Raft implementation derived from the cornerstone project, which is a very lightweight C++ implementation with minimum dependencies, originally written by Andy Chen.
New features that are not described in the original paper, but required for the real-world use cases in eBay, have been added. We believe those features are useful for others outside eBay as well.
- Core Raft algorithm
- Log replication & compaction
- Leader election
- Snapshot
- Dynamic membership & configuration change
 
- Group commit & pipelined write
- User-defined log store & state machine support
- Pre-vote protocol
- Leadership expiration
- Priority-based semi-deterministic leader election
- Read-only member (learner)
- Object-based logical snapshot
- Custom/separate quorum size for commit & leader election
- Asynchronous replication
- SSL/TLS support
- Parallel Log Appending
- Custom Commit Policy
- Ubuntu
$ sudo apt-get install cmake openssl libssl-dev libz-dev- OSX
$ brew install cmake
$ brew install openssl- Windows
- Download and install CMake.
- Currently, we do not support SSL for Windows.
 
2. Fetch Asio library:
$ git submodule update --init- Linux & OSX: using the bash script
$ ./prepare.sh- Windows: doing it manually
- Clone Asio asio-1-24-0into the project directory.
 
- Clone Asio 
C:\NuRaft> git clone https://github.com/chriskohlhoff/asio -b asio-1-24-0- Linux & OSX
$ mkdir build
$ cd build
build$ cmake ../
build$ makeRun unit tests
build$ ./runtests.sh- Windows:
C:\NuRaft> mkdir build
C:\NuRaft> cd build
C:\NuRaft\build> cmake -G "NMake Makefiles" ..\
C:\NuRaft\build> nmakeYou may need to run vcvars script first in your build directory. For example (it depends on how you installed MSVC):
C:\NuRaft\build> c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.batPlease refer to this document.
Please refer to examples.
Please refer to tests/bench.
- Ubuntu (tested on 14.04 -- 20.04)
- Centos (tested on 7)
- OSX (tested on 10.13 -- 12.3)
- Windows (built using MSVC 2019, not thoroughly tested)
We welcome contributions. If you find any bugs, potential flaws and edge cases, improvements, new feature suggestions or discussions, please submit issues or pull requests.
- Jung-Sang Ahn [email protected]
Copyright 2017-present eBay Inc.
Author/Developer: Jung-Sang Ahn
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- 
URL: https://github.com/datatechnology/cornerstone 
 License: https://github.com/datatechnology/cornerstone/blob/master/LICENSE
 Originally licensed under the Apache 2.0 license.
- 
URL: https://github.com/stbrumme/crc32 
 Original Copyright 2011-2016 Stephan Brumme
 See Original ZLib License: https://github.com/stbrumme/crc32/blob/master/LICENSE
- 
URL: https://github.com/greensky00/simple_logger 
 License: https://github.com/greensky00/simple_logger/blob/master/LICENSE
 Originally licensed under the MIT license.
- 
URL: https://github.com/greensky00/testsuite 
 License: https://github.com/greensky00/testsuite/blob/master/LICENSE
 Originally licensed under the MIT license.
- 
URL: https://github.com/greensky00/latency-collector 
 License: https://github.com/greensky00/latency-collector/blob/master/LICENSE
 Originally licensed under the MIT license.
- 
URL: https://github.com/eriwen/lcov-to-cobertura-xml/blob/master/lcov_cobertura/lcov_cobertura.py 
 License: https://github.com/eriwen/lcov-to-cobertura-xml/blob/master/LICENSE
 Copyright 2011-2012 Eric Wendelin
 Originally licensed under the Apache 2.0 license.
- 
URL: https://github.com/bilke/cmake-modules 
 License: https://github.com/bilke/cmake-modules/blob/master/LICENSE_1_0.txt
 Copyright 2012-2017 Lars Bilke
 Originally licensed under the BSD license.