All Projects → evanmcc → vrrm

evanmcc / vrrm

Licence: Apache-2.0 license
rough code for running consensus

Programming Languages

erlang
1774 projects

Projects that are alternatives of or similar to vrrm

Copycat
A novel implementation of the Raft consensus algorithm
Stars: ✭ 551 (+2961.11%)
Mutual labels:  replication, state-machine, consensus
Library
Collection of papers in the field of distributed systems, game theory, cryptography, cryptoeconomics, zero knowledge
Stars: ✭ 100 (+455.56%)
Mutual labels:  state-machine, consensus
epaxos
A pluggable implementation of the Egalitarian Paxos Consensus Protocol
Stars: ✭ 39 (+116.67%)
Mutual labels:  replication, consensus
Nuraft
C++ implementation of Raft core logic as a replication library
Stars: ✭ 428 (+2277.78%)
Mutual labels:  replication, consensus
xstate-react-router
XState connector to React Router.
Stars: ✭ 23 (+27.78%)
Mutual labels:  state-machine
Php Mysql Replication
Pure PHP Implementation of MySQL replication protocol. This allow you to receive event like insert, update, delete with their data and raw SQL queries.
Stars: ✭ 213 (+1083.33%)
Mutual labels:  replication
Synch
Sync data from the other DB to ClickHouse(cluster)
Stars: ✭ 200 (+1011.11%)
Mutual labels:  replication
Herddb
A JVM-embeddable Distributed Database
Stars: ✭ 192 (+966.67%)
Mutual labels:  replication
Text101-Original
A basic state-machine based text adventure exercise as part of our Complete Unity C# Developer course (http://gdev.tv/cudgithub)
Stars: ✭ 43 (+138.89%)
Mutual labels:  state-machine
StateArts
Intellij plugin that creates state machine diagram from state machine
Stars: ✭ 87 (+383.33%)
Mutual labels:  state-machine
ldb
Replication of CRDTs
Stars: ✭ 37 (+105.56%)
Mutual labels:  replication
Seamless database pool
Add support for master/slave database clusters in ActiveRecord to improve performance.
Stars: ✭ 222 (+1133.33%)
Mutual labels:  replication
SwiftElm
Reactive + Automaton + VTree in Swift, inspired by Elm.
Stars: ✭ 97 (+438.89%)
Mutual labels:  state-machine
Vasto
A distributed key-value store. On Disk. Able to grow or shrink without service interruption.
Stars: ✭ 206 (+1044.44%)
Mutual labels:  replication
raft-badger
Badger-based backend for Hashicorp's raft package
Stars: ✭ 27 (+50%)
Mutual labels:  consensus
Amazonriver
amazonriver 是一个将postgresql的实时数据同步到es或kafka的服务
Stars: ✭ 198 (+1000%)
Mutual labels:  replication
Flopnite Ue4
A remake of the popular battle royale game, Fortnite, made in Unreal Engine 4 and integrated with Amazon GameLift
Stars: ✭ 250 (+1288.89%)
Mutual labels:  replication
kcoin
A stable cryptocurrency that algorithmically targets $1 USD using the Kowala Protocol
Stars: ✭ 17 (-5.56%)
Mutual labels:  consensus
Acid State
Add ACID guarantees to any serializable Haskell data structure
Stars: ✭ 246 (+1266.67%)
Mutual labels:  replication
Reopenldap
Production-ready replacement for OpenLDAP with robust multi-master replication
Stars: ✭ 242 (+1244.44%)
Mutual labels:  replication

VRRM: just enough consensus

https://travis-ci.org/evanmcc/vrrm.svg?branch=master

DISCLAIMER

calling this research quality code is an insult to research quality code.

this code almost certainly contains one or more horrifying linearizability bugs.

rationale

a library designed for distributed systems that require concurrency, but in a fairly lightweight way (i.e. state is easy to recover or repair, FSMs have fairly regular checkpoints where log tails may be discarded). It’s currently unclear if this is actually a good idea!

the tagline above, “just enough consensus” hints at what I am aiming for here. rather than relying on an external service to provide linearizable consistency, we write a strongly consistent FSM for our service cluster which contains just the state we need to be linearized, and no more. most services aim for industrial strength, this library aims in the opposite direction, to provide simple, lightweight, and naive consistency primitives for building right into your clustered applications.

structure

  • ha_supervisor (currently unimplemented):
    • mostly just has the same supervisor API, maybe simplified a little
    • when the vrrm app is started, the supervisor tries to form an ensemble with all other supervisors (vrrm_ha_sup) on everything in nodes()
    • allows users to start new replicated fsms on all nodes or a subset (3, 5, etc)
    • manages failure detection for the ensembles that it and propagation of participation information to them.
  • vrrm_fsm:
    • each is its own ensemble
    • degenerate state-keeping, on repair, just transfer the entire serialized state of the behavior implementation and most of our own.

documentation

right now there isn’t any. the blackboard test is perhaps the best example. the library is expected to be in flux for quite some time.

why not paxos or raft?

the language and descriptions in the paper, while not perfect, are clearer and more implementation-oriented than either (most of) the Paxos papers or the Raft paper. Paxos is notoriously complicated to implement correctly, and Raft has few things to recommend it over VR(R) in terms of the separation of various parts of the protocol.

resources

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].