Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Erlang CI Actions Status

(Note: Work-in-progress documentation here)

riak_ensemble is a consensus library that supports creating multiple consensus groups (ensembles). Each ensemble is a separate Multi-Paxos instance with its own leader, set of members, and state.

Each ensemble also supports an extended API that provides consistent key/value operations. Conceptually, this is identical to treating each key as a separate Paxos entity. However, this isn't accomplished by having each key maintain its own Paxos group. Instead, an ensemble emulates per-key consensus through a combination of per-key and per-ensemble state.

As mentioned, riak_ensemble supports multiple independent consensus groups. Ensembles are created dynamically, allowing applications to use riak_ensemble in whatever way best fits that application. Each ensemble also supports dynamic ensemble membership, using joint consensus to guarantee consistent membership transitions.

A given ensemble is configured to use a particular "ensemble backend". An ensemble backend is an implemented behavior that defines how a given peer actually stores/retrieves data. For example, riak_ensemble ships with the riak_ensemble_basic_backend which stores data as an orddict that is saved to disk using term_to_binary, whereas riak_kv implements the riak_kv_ensemble_backend that is used to interface with Riak's vnodes.

Better documentation is coming soon. For now, this talk from RICON West 2013 discusses the design of riak_ensemble in the context of adding consistency to Riak 2.0: