Is an app with 3000 Microservices a fit for Elixir/OTP over Kubernetes/GRPC

Same within the same node is definitely simpler, and should be the first approach to consider.

Multiple nodes on the same machine is basically mainstream microservices (multiple OS processes), and it might make sense in some special situations. Two cases that come to mind:

  1. Isolated deploy without the hassle of code upgrades. Split the system in two (or more) nodes, and then you can deploy/restart them separately, while other nodes are running.
  2. Isolated failures in the case of a NIF or port driver. If you’re running in-process custom native code, then moving that code (and a minimal Elixir/Erlang code surrounding it) to a separate node ensures that e.g. a segfault in nif won’t take down the entire system.

In both cases I wouldn’t use distributed Erlang, but rather have nodes communicate via e.g. HTTP.

1 Like