Skip to content
/ copycat Public
forked from atomix/atomix

Protocol-agnostic, strongly consistent replication framework built on Raft

License

Notifications You must be signed in to change notification settings

madjam/copycat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Maven Central

Persistent • Consistent • Fault-tolerant • Database • Coordination • Framework

Atomix is a high-level asynchronous framework for building fault-tolerant distributed systems. It combines the consistency of ZooKeeper with the usability of Hazelcast to provide tools for managing and coordinating stateful resources in a distributed system. Its strongly consistent, fault-tolerant data store is designed for such use cases as configuration management, service discovery, group membership, scheduling, messaging, and synchronizing distributed processes.

Atomix exposes a set of high level APIs with tools - known as resources - to solve a variety of distributed systems problems including:

Project status: BETA

Atomix is a fault-tolerant framework that provides strong consistency guarantees, and as such we take the responsibility to test these claims and document the implementation very seriously. Atomix is built on Copycat, a well tested, well documented, Jepsen verified implementation of the Raft consensus algorithm. But the beta label indicates that the implementation may still have some bugs or other issues that make it not quite suitable for production. Users are encouraged to use Atomix in development and contribute to the increasing stability of the project with issues and pull requests. Once we've reached consensus on the lack of significant bugs in the beta release(s), a release candidate will be pushed. Once we've reached consensus on the stability of the release candidate(s) and Atomix's production readiness, a full release will be pushed.

It's all about that consensus!

Documentation for most of Atomix's implementation of the Raft algorithm is available on the Atomix website, and users are encouraged to explore the Javadoc which is also heavily documented. All documentation remains under continued development, and websites for both Atomix and Copycat will continue to be updated until and after a release.

Examples

Users are encouraged to explore the examples in the /examples directory. Perhaps the most interesting/revelatory example is the leader election example. This example demonstrates a set of replicas that elect a leader among themselves.

To run the leader election example:

  1. Clone this repository: git clone --branch master [email protected]:atomix/atomix.git
  2. Navigate to the project directory: cd atomix
  3. Compile the project: mvn package
  4. Run the following three commands in three separate processes from the same root directory of the project:
java -jar examples/leader-election/target/atomix-leader-election.jar logs/server1 localhost:5000 localhost:5001 localhost:5002
java -jar examples/leader-election/target/atomix-leader-election.jar logs/server2 localhost:5001 localhost:5000 localhost:5002
java -jar examples/leader-election/target/atomix-leader-election.jar logs/server3 localhost:5002 localhost:5000 localhost:5001

Each instance of the leader election example starts an AtomixReplica, connects to the other replicas in the cluster, creates a DistributedLeaderElection, and awaits an election. The first time a node is elected leader it will print the message: "Elected leader!". When one of the processes is crashed, a new process will be elected a few seconds later and again print the message: "Elected leader!".

Note that the same election process can be done with AtomixClients as well. Atomix provides the concept of stateful nodes (replicas) which store resource state changes on disk and replicate changes to other replicas, and stateless nodes (clients) which operate on resources remotely. Both types of nodes can use the same resources in the same ways. This makes Atomix particularly well suited for embedding in server-side technologies without the overhead of a Raft server on every node.

See the website for documentation and examples.

About

Protocol-agnostic, strongly consistent replication framework built on Raft

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 99.5%
  • Shell 0.5%