Skip to content
ScaleCube Cluster is a lightweight Java VM implementation of SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol. features cluster membership, failure detection, and gossip protocol library.
Java Shell Python
Branch: develop
Clone or download
Latest commit cfe1294 Jan 24, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Create release-drafter.yml Dec 1, 2019
cluster-api Renamed default codecs to jdk codecs Jan 8, 2020
cluster-testlib Enhanced logging Jan 19, 2020
cluster
codec-parent Added jackson smile Jan 23, 2020
examples Added jackson smile Jan 23, 2020
src/main/scripts + script files Oct 28, 2019
transport-parent Fixed logging (one more time) Jan 23, 2020
.editorconfig Made code and tests compile; formatted with google; removed unused ch… Oct 19, 2018
.gitattributes Made code and tests compile; formatted with google; removed unused ch… Oct 19, 2018
.gitignore + git ignore Sep 27, 2019
.travis.yml updated: travis ci configuration file Jul 28, 2019
CODE_OF_CONDUCT.md
DEVELOPMENT.md
LICENSE.txt first commit May 12, 2018
README.md
pom.xml
requirements.txt + script files Dec 12, 2018
travis-settings.xml

README.md

ScaleCube - Cluster

ScaleCube Cluster is a lightweight decentralized cluster membership, failure detection, and gossip protocol library. It provides an implementation of SWIM cluster membership protocol for Java VM.

It is an efficient and scalable weakly-consistent distributed group membership protocol based on gossip-style communication between the nodes in the cluster. Read blog post with distilled notes on the SWIM paper for more details.

It is using a random-probing failure detection algorithm which provides a uniform expected network load at all members. The worst-case network load is linear O(n) for overall network produced by running algorithm on all nodes and constant network load at one particular member independent from the size of the cluster.

ScaleCube Cluster implements all improvements described at original SWIM algorithm paper, such as gossip-style dissemination, suspicion mechanism and time-bounded strong completeness of failure detector algorithm. In addition to that we have introduced support of additional SYNC mechanism in order to improve recovery of the cluster from network partitioning events.

Using ScaleCube Cluster as simple as few lines of code:

// Start cluster node Alice as a seed node of the cluster, listen and print all incoming messages
Cluster alice = Cluster.joinAwait();
alice.listen().subscribe(msg -> System.out.println("Alice received: " + msg.data()));

// Join cluster node Bob to cluster with Alice, listen and print all incoming messages
Cluster bob = Cluster.joinAwait(alice.address());
bob.listen().subscribe(msg -> System.out.println("Bob received: " + msg.data()));

// Join cluster node Carol to cluster with Alice (and Bob which is resolved via Alice)
Cluster carol = Cluster.joinAwait(alice.address());

// Send from Carol greeting message to all other cluster members (which is Alice and Bob)
carol.otherMembers().forEach(member -> carol.send(member, Message.fromData("Greetings from Carol")));

You are welcome to explore javadoc documentation on cluster API and examples module for more advanced use cases.

Support

For improvement requests, bugs and discussions please use the GitHub Issues or chat with us to get support on Gitter.

You are more then welcome to join us or just show your support by granting us a small star :)

Maven

Binaries and dependency information for Maven can be found at http://search.maven.org.

To add a dependency on ScaleCube Cluster using Maven, use the following:

<dependency>
  <groupId>io.scalecube</groupId>
  <artifactId>scalecube-cluster</artifactId>
  <version>x.y.z</version>
</dependency>

To add a dependency on ScaleCube Transport using Maven, use the following:

<dependency>
  <groupId>io.scalecube</groupId>
  <artifactId>scalecube-transport</artifactId>
  <version>x.y.z</version>
</dependency>

Contributing

  • Follow/Star us on github.
  • Fork (and then git clone https://github.com/--your-username-here--/scalecube.git).
  • Create a branch (git checkout -b branch_name).
  • Commit your changes (git commit -am "Description of contribution").
  • Push the branch (git push origin branch_name).
  • Open a Pull Request.
  • Thank you for your contribution! Wait for a response...

References

License

Apache License, Version 2.0

You can’t perform that action at this time.