A distributed system has many discrete processes that run on a multitude of arbitrary devices and networks yet to the user it appears to be a single coherent program. Distributed systems can help to provide availability and fault tolerance.
Fault-tolerance and strong consistency are not exactly compatable. Vines attempts to facilitate data replication and coordinated decision making through a combination of eventual consistency and quorum-based concensus.
Vines is targeted toward applications that require intelegence distribution such as application monitoring.
- Automatic reconnect
- Quorum based consensus protocol
- Gossip based data replication
A computer at 192.168.0.2
can generate some information.
var vine = Vine()
vine
.listen(8000)
.gossip('foo', 'hello, world')
A computer at 192.168.0.3
can discover that information regardless of
when then peers were connected or when the data was entered.
var vine = Vine()
vine
.listen(8000)
.join(8000, '192.168.0.2')
.on('gossip', 'foo', function(value) {
console.log(value);
})
A computer at 192.168.0.2
can call an election and cast a vote.
var electionCriteria = {
topic: 'email',
expire: String(new Date(now.setMinutes(now.getMinutes() + 5))),
min: 2,
total: 2
}
var vine = Vine()
vine
.listen(8000)
.on('quorum', onQuorum)
.on('expire', onExpire)
.election(electionCriteria)
.vote('email', true)
A computer at 192.168.0.3
can also call an election however only one
of the peers will be able to execute the callback for the quorum
event.
var vine = Vine()
vine
.listen(8000)
.join(8000, '192.168.0.2')
.on('quorum', onQuorum)
.on('expire', onExpire)
.election(electionCriteria)
.vote('email', true)