When I read articles about production elixir applications they all talk about deployment directly in ‘‘machines’’ (1 instance per machine) I’d like to understand if that is a real thing or is it common to production elixir applications have their deployment processes in a container enviroment and if this kind of deployment boosts elixir somehow once that we could have like N instances of a application distributed across Y real machines in our cluster or we don’t really have a real gain by doing that.
Hi,
Yes it is common to deploy elixir apps with docker, especially when the app is stateless (ex CRUD apps, with a db layer). If we are making releases, then dockerzing is a recommended approach. Also if the organization is already using orchestration tools like k8s, then its good to leverage them too. If the elixir app is statefull then we can even leverage distributed elixir functionalities by clustering the k8s nodes. So overall we could get best of both worlds.
I watched the video, but it seems a bit overkill to have a whole set of distributed supervisors, CRDTs and registries so erlang processes can be killed and redeployed in a new container.
For the Tanx, it seems that it can just rely on a Redis cluster to store states instead of keeping all of state in OTP. That would simplify things quite a bit.
Do you use (or have you used) that kind of setup in production?