Skip to content

Latest commit

 

History

History
36 lines (20 loc) · 2.03 KB

File metadata and controls

36 lines (20 loc) · 2.03 KB

Build Status

Botellier

A distributed key-value data store. It aims to be a simple Redis clone for the JVM.

Replication Scheme

To keep things simple, Botellier uses single-leader replication. Each replica is a whole copy of the leader, and no sharding/partitioning is used.

All the nodes that form the quorum can be either three types: leader, synced replica or replica. All writes request go through the leader, who waits for the synced replica to proccess the same requests before returning to the client. All other replicas process the requests asynchronously.

Election process

Initially, all nodes are of type replica which then try to become the synced replica, usually the most up-to-date node is the one to do it. After that, the only node that can become a leader is a synced replica; so in the event that the leader dies, the synced replica automatically becomes the leader, and the next most up-to-date common replica takes its place.

Here's a flowchart that shows the process:

Flowchart

Coordination between proccesses is done using Zookeper.

Command support

As of now, most commonly used commands are supported, such as connection, strings, lists and general ones like delete, rename, etc. For a complete list of supported commands check here.

Testing

The project includes an entry point that starts a server on the default port (6679) with the password set to 'password'. After starting the server try corkscrew for connecting to it and executing commands. Here's an example:

asciicast