We are heavily using Bull in our app, i.e., our instances running Bull have more resources than the traditional meteor servers, which clients directly connect to.
Our generic guide is to prevent any single client connection from affecting another client connection. Therefore, anything that requires disk access, heavy db processing, or access to non-local apis must be passed to Bull.
Ideally, all those processes are passive (the client does not need to wait for the result/output). For those identified as active, we first figure out if we can make them passive (mostly UX redesign).
Next, we have notifications built into most of our apps. Can we notify the user once the process has been completed, e.g., “Your marketing video is now available.”
Lastly, if we have no choice but to make it active, we use Meteor’s reactivity to inform the client that the output is ready.
Our servers do not wait for the Bull output.