Skip to content

danielrs/botellier

Repository files navigation

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

Releases

No releases published

Packages

No packages published

Languages