Skip to content

Simple leader election for Elixir applications

License

Notifications You must be signed in to change notification settings

oestrich/squabble

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Squabble

A simple leader election. Pulled from ExVenture.

Warning: This has currently only been tested on low traffic production. It works, but may not stand up to your production. I'd love to get it there though!

What is this doing?

Squabble starts once on each node and uses Raft leadership election amongst all of the nodes. When a leader is selected, callback modules are called on that you supply. This lets you kick off a process once in your cluster anytime cluster state changes.

This is used in ExVenture to boot the virtual world, for instance.

Two callbacks are currently provided as seen below, when a new leader is selected and also when a node goes down. ExVenture uses both of these to rebalace the world across the still running cluster.

Installation

Install via hex.

def deps do
  [
    {:libcluster, "~> 3.0"},
    {:squabble, "~> 0.1.0"},
  ]
end

In order to connect multiple nodes you should also set up libcluster.

Configuration

Configure Squabble when you start the worker in your supervision tree. This should go after libcluster if you're using that. All nodes should be connected before starting Squabble.

children = [
  {Squabble, [subscriptions: [MyApp.Leader], size: 1]}
]

Leader Notifications

Squabble will a call a module on the node when the leader node is selected. This is a behaviour. See a sample below.

defmodule MyApp.Leader do
  @behaviour Squabble.Leader

  @impl true
  def leader_selected(term) do
  end

  @impl true
  def node_down() do
  end
end

About

Simple leader election for Elixir applications

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages