This repo and the corresponding hex package differ from the basho/riak_ensemble in the following ways:
- Removed use of
riak_ensemble_clockreplacing with OTP-18 time functionality eleveldbis no longer the defaultsynctree
To use eleveldb as the synctree add the eleveldb dep to your projects rebar.config dep list. Add eleveldb to your app's application list before the entry for riak_ensemble. And add to your configuration {riak_ensemble, [{synctree_backend, synctree_leveldb}]}.
(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:
http://www.youtube.com/watch?v=gXJxbhca5Xg