Two others things:
- deploying Erlang / Elixir app is difficult ( even with distillery... )
- Erlang is slow, much much slower than Go
Two others things:
- deploying Erlang / Elixir app is difficult ( even with distillery... )
- Erlang is slow, much much slower than Go
Most applications at least have connection state, at the least a TCP connection. It is at minimum disruptive to disconnect a million clients and have them reconnect. Certainly, your service environment needs to be able to handle this anyway [1] in case of node failure, but if you do a rolling restart of frontends, many active clients will have to reconnect multiple times which adds load to your servers as well as your clients. Actually disconnecting users cleanly takes time too, so a full restart deploy will take a lot longer than a hot code reload, unless you have enough spare capacity to deploy a full new system, and move users in one step, and then kill the old system.
Certainly, hot loading can introduce more failure modes, but most of those are things you already need to think about in a distributed system -- just not usually within a single node; ex: what happens if a call from the old version hits the new version.
[1] There are some techniques to provide TCP handling, but I'd be surprised to hear if anyone is using them at a large scale.
Hot code reload is imo a bad practice and should be avoided.
https://kubernetes.io/docs/tutorials/kubernetes-basics/updat...
That's the power of Kubernetes, and since it's very popular the community and tooling are great, good luck replicating that with BEAM.
Also, message-passing and the actor model is not a particular design focus of k8s compared to BEAM.