Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/basho/riak_ensemble
Multi-Paxos framework in Erlang
https://github.com/basho/riak_ensemble
Last synced: 11 days ago
JSON representation
Multi-Paxos framework in Erlang
- Host: GitHub
- URL: https://github.com/basho/riak_ensemble
- Owner: basho
- License: apache-2.0
- Created: 2013-10-21T09:49:02.000Z (about 11 years ago)
- Default Branch: develop
- Last Pushed: 2022-12-21T13:23:33.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T04:03:24.757Z (7 months ago)
- Language: Erlang
- Homepage: http://www.youtube.com/watch?v=gXJxbhca5Xg
- Size: 3.47 MB
- Stars: 166
- Watchers: 94
- Forks: 74
- Open Issues: 27
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Erlang CI Actions Status](https://github.com/basho/riak_ensemble/workflows/Erlang%20CI/badge.svg)](https://github.com/basho/riak_ensemble/actions)
(Note: Work-in-progress documentation [here](https://github.com/basho/riak_ensemble/blob/develop/doc/Readme.md))
`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