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.
Last Post!
NduatiK
I agree with you, I meant that the code shows that for each instance the number of min workers is managed locally, without considering whether workers exist on other instances.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









