10 comments

[ 1.7 ms ] story [ 30.8 ms ] thread
Regarding 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.

Nebulex 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.

In 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`).

Having 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.
I’m always curious to learn about things that make people cautious to run the BEAM in production. What makes it scary for you?
NHS and Boston MBTA both run BEAM in production, and arguably lives are at stake there (mostly indirectly but still) ...
Pure fear of the unknown, combined with fear of getting less-than-stellar tracebacks & profiling because Elixir's only one of the VM languages.
Makes 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!
You 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.