vladnec
Configuring a Single Flame Runner Across Multiple Deployment Instances
Hello all,
I’ve configured the following setup in application.ex :
{FLAME.Pool,
name: Nexus.HTMLToPDFRunner,
min: 1,
max: 10,
max_concurrency: 5,
idle_shutdown_after: 10_000,
log: :debug}
But, my application is deployed across multiple instances (fly scale count 3). As a result, I end up with 3 instances of the flame runner instead of the single one I intended to have.
Does anyone have insights on how to configure this so that I only get one flame runner, regardless of the number of deployed instances?
Most Liked
slouchpie
You can totally do this. You can have a global singleton which is your FLAME pool. For example, using :pogo:
-
Remove
FLAME.Poolfrom your application children. -
Add Pogo supervisor to your application children (check the pogo docs). Let’s say you called it
MyApp.DistributedSueprvisor -
Start your global singleton FLAME pool supervisor like this:
Pogo.DynamicSupervisor.start_child(
MyApp.DistributedSupervisor,
FLAME.Pool.child_spec(
name: MyApp.FlamePool,
min: 20,
max: 30,
max_concurrency: 10,
idle_shutdown_after: 2 * 60 * 60 * 1_000,
min_idle_shutdown_after: 2 * 60 * 60 * 1_000,
timeout: 5_000
)
)
Pogo will ensure unique children IDs. Flame will set the ID to be some kind of tuple like {FLAME.Pool, MyApp.FlamePool} (it uses the name opt). So if you are using the pogo supervisor which_children function, watch out for that.
Do not copy my Flame config! Decide your own values. This is just a concept BTW. I am not recommending you use a single flame supervisor on just one node. It seems at odds with the spirit of FLAME.








