swim-js
JavaScript implementation of SWIM membership protocol
Motivation
Membership management is important to distributed systems and large clusters need a decentralized protocol such as SWIM, which handles failure detection and membership dissemination in a scalable and weakly-consistent way. It can be used to implement functionalities based on membership like distributed consensus, application layer sharding, log replication, etc.
Usage
Installation
npm install swim --save
var Swim = ;var opts = local: host: '10.31.1.191:11000' meta: 'application': 'info' // optional codec: 'msgpack' // optional disseminationFactor: 15 // optional interval: 100 // optional joinTimeout: 200 // optional pingTimeout: 20 // optional pingReqTimeout: 60 // optional pingReqGroupSize: 3 // optional suspectTimeout: 60 // optional udp: maxDgramSize: 512 // optional preferCurrentMeta: true // optional;var swim = opts;var hostsToJoin = '10.31.1.192:11000' '10.31.1.193:11000'; swim; // orswim;// bootstrap error handlingswim;// bootstrap readyswim;
Benchmark
Benchmark convergence time under different configuration
node bench/script/convergence-time.js -h Usage: convergence-time [options] Options: -h, --help output usage information --cycles [value] number of cycles --workers [value] number of workers --codec [value] msgpack or json --dissemination-factor [value] dissemination factor --interval [value] interval --join-timeout [value] join timeout --ping-timeout [value] ping timeout --ping-req-timeout [value] ping req timeout --ping-req-group-size [value] ping req group size --max-dgram-size [value] max dgram size
node bench/script/convergence-time.js configuration:- cycles 10- workers 10- codec msgpack- dissemination factor 15- interval 20 ms- join timeout 100 ms- ping timeout 4 ms- ping req timeout 12 ms- ping req group size 3- max dgram size 512 bytesconvergence time under single node failurehistogram data:- count 10- min 76- max 123- mean 100- median 101- variance 308.44444444444446- std dev 17.56258649642599- p75 116.25- p95 123- p99 123
License
MIT