Introduction
A raft-based java library for building high-available, high-durable, strong-consistent commitlog, which could act as the persistent layer for distributed storage system, i.e. messaging, streaming, kv, db, etc.
Dledger has added many new features that are not described in the original paper. It has been proven to be a true production ready product.
Features
- Leader election
- Preferred leader election
- Pre-vote protocol
- High performance, high reliable storage support
- Parallel log replication between leader and followers
- Asynchronous replication
- State machine
- Multi-Raft
- High tolerance of symmetric network partition
- High tolerance of asymmetric network partition
- Jepsen verification with fault injection
New features waiting to be added
- Snapshot (working in progress)
- Dynamic membership & configuration change
- SSL/TLS support
Quick Start
Prerequisite
-
64bit JDK 1.8+
-
Maven 3.2.x
How to Build
mvn clean install -DskipTests
Run Command Line
Help
Print Help in Command Line
java -jar example/target/dledger-example.jar
Appender
A high-available, high-durable, strong-consistent, append-only log store.
Start a Standalone Appender Server
java -jar example/target/dledger-example.jar appender
Append Data to Appender
java -jar example/target/dledger-example.jar append -d "Hello World"
After this command, you have appended a log which contains "Hello World" to the appender.
Get Data from Appender
java -jar example/target/dledger-example.jar get -i 0
After this command, you have got the log which contains "Hello World" from the appender.
RegisterModel
A simple multi-register model
Start a Standalone RegisterModel Server
java -jar example/target/dledger-example.jar register
Write Value for a Key
java -jar example/target/dledger-example.jar write -k 13 -v 31
After this command, you have written a key-value pair which is <13, 31> to the register model.
Read Value for a Key
java -jar example/target/dledger-example.jar read -k 13
After this command, you have read the value 31 for the key 13 from the register model.
Contributing
We always welcome new contributions, whether for trivial cleanups, big new features. We are always interested in adding new contributors. What we look for are series of contributions, good taste and ongoing interest in the project. If you are interested in becoming a committer, please let one of the existing committers know and they can help you walk through the process.
License
Apache License, Version 2.0 Copyright (C) Apache Software Foundation