GlobalSupervisor
A supervisor that dynamically distributes children across the cluster.
A GlobalSupervisor is like a DynamicSupervisor that coordinates with other
GlobalSupervisors registered with the same name in the cluster to dynamically
distribute children across the cluster.
A GlobalSupervisor has the same API and behaviour of a DynamicSupervisor
with some minor differences to provide distributed functionality.
When you start a child using start_child/2, global supervisor uses a
consistent hash algorithm to decide on which node it should be started.
When a node goes down, all children running on that node will be
redistributed on remaining nodes. When a new node is added to the cluster
global supervisor by default automatically rebalances distribution of
running children.
In case of a network split each partition restarts children running on the
other part assuming that part is down. Once the partition is healed,
children will be rebalanced again, but rebalancing might lead to some children
being started again on the same node which they started on initially.
Also when auto balancing is disabled, a healed netsplit might have multiple
instances of the same child running on two or more nodes. To prevent two
instances of the same child stay running after a net split heals, you need
to register each child process with a unique name. Local names will only
prevent running multiple instances of a child on a single node, you can
use :global registry or any other distributed registry to prevent running
multiple instances of a child across the cluster.
Installation
If available in Hex, the package can be installed
by adding global_supervisor to your list of dependencies in mix.exs:
def deps do
[
{:global_supervisor, "~> 0.1.0"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/global_supervisor.