4 ms·
Elixir: Practical Concurrency Cookbook
- manusachi 5y ago> One of the strengths of GenServers is that they allow us to spin one up per user very easily, so they don't become a bottleneck where the Agent does. Agent is a special case of GenServer[1]. With the same luck we could spin up an agent per user. [1] [Agent.start_link/2](https://github.com/elixir-lang/elixir/blob/9137fd1cb2368bb1bc3a9c590440dffc9f5fed62/lib/elixir/lib/agent.ex#L271 https://github.com/elixir-lang/elixir/blob/9137fd1cb2368bb1b...)
- atonse 5y agoRegarding caching, after years of not using any, we finally ended up using nebulex (with the in-memory cache) and it’s been excellent. The ability to add cache annotations to functions feels really clean. There’s also the ability to have cluster wide state but we haven’t set that up yet. We will soon.
- conradfr 5y agoNebulex seems interesting, I may be tempted to replace cachex with it. It also seems a clean way to fill the lack of integrated cache solution in ecto.
- tylerpachal 5y agoIn addition to what the offer recommended in the "Scheduling work" section, using the `:timer.send_interval()` can be useful if you want to do something every X seconds, instead of every X + Y seconds, where Y is the time it takes to process the "work" message. Also I prefer to use `handle_continue` instead of `schedule_work()` style (which in a lot of cases pre-date the introduction of `handle_continue`).
- sandwichinvest 5y agoHaving reliable scheduling in the language itself seems like it would simplify a ton of software that's currently reliant on a lot of message queueing and cron duct tape. Running BEAM in production still scares me, but that's one reason to conquer the fear.
- mattbaker 5y agoI’m always curious to learn about things that make people cautious to run the BEAM in production. What makes it scary for you?
- dnautics 5y agoNHS and Boston MBTA both run BEAM in production, and arguably lives are at stake there (mostly indirectly but still) ...
- sandwichinvest 5y agoPure fear of the unknown, combined with fear of getting less-than-stellar tracebacks & profiling because Elixir's only one of the VM languages.
- mattbaker 5y agoMakes sense. For what it’s worth we’ve been really happy with traces, no issues there, and there are definitely profiling tools. Plus you can point Erlang’s Observer tool at a production BEAM node, it’s wildly useful!
- hmmokidk 5y agoYou may have done it already through RabbitMQ. Also I want to comment that it is awesome and I love it. It’s simple and effective. OTP being bundled into the language is really very brilliant.