Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
N

NuRaft

> 编程语言
Open source

C++ implementation of Raft core logic as a replication library

1.2K stars0 likes0 views
WebsiteGitHub

About

C++ implementation of Raft core logic as a replication library

NuRaft

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.

Features

In the original cornerstone

  • Core Raft algorithm
    • Log replication & compaction
    • Leader election
    • Snapshot
    • Dynamic membership & configuration change
  • Group commit & pipelined write
  • User-defined log store & state machine support

New features added in this project

  • 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
  • Streaming Mode

How to Build

1. Install cmake and openssl:

  • Ubuntu
bash
$ sudo apt-get install cmake openssl libssl-dev libz-dev
  • OSX
bash
$ brew install cmake
$ brew install openssl
  • Windows
    • Download and install CMake.
    • Currently, we do not support SSL for Windows.

2. Fetch Asio library:

Using git submodule
bash
$ git submodule update --init
Other ways to fetch:
  • Linux & OSX: using the bash script
bash
$ ./prepare.sh
  • Windows: doing it manually
    • Clone Asio asio-1-24-0 into the project directory.
bash
C:\NuRaft> git clone https://github.com/chriskohlhoff/asio -b asio-1-24-0

3. Build static library, tests, and examples:

  • Linux & OSX
bash
$ mkdir build
$ cd build
build$ cmake ../
build$ make

Run unit tests

bash
build$ ./runtests.sh
  • Windows:
bash
C:\NuRaft> mkdir build
C:\NuRaft> cd build
C:\NuRaft\build> cmake -G "NMake Makefiles" ..\
C:\NuRaft\build> nmake

You may need to run vcvars script first in your build directory. For example (it depends on how you installed MSVC):

bash
C:\NuRaft\build> c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat

Alternative Build Method (with Conan)

If you project needs to integrate with NuRaft and you build your project with Conan you might want to have NuRaft built with Conan too. This is now supported: this project has conanfile.py which can be used to build locally and export the package to conan cache/repository or use it in editable mode locally.

  1. Install conan using one of the methods desribed here: https://conan.io/downloads
  2. conan build . - builds Release configuration
  3. conan build . -s build_type=Debug builds an alternative configuration supported by CMake
  4. You can control supported build options via command line as well, ex: conan build . -o build_tests=True

How to Use

Please refer to this document.

Example Implementation

Please refer to examples.

Benchmark

Please refer to tests/bench.

Quick Benchmark Results

Supported Platforms

  • Linux, OSX (extensively tested and widely used)
  • Windows (built with MSVC 2019, limited testing)

Contributing to This Project

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.

Contact

  • Jung-Sang Ahn

License Information

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.

3rd Party Code

  1. URL: https://github.com/datatechnology/cornerstone

License: https://github.com/datatechnology/cornerstone/blob/master/LICENSE

Originally licensed under the Apache 2.0 license.

  1. URL: https://github.com/stbrumme/crc32

Original Copyright 2011-2016 Stephan Brumme

See Original ZLib License: https://github.com/stbrumme/crc32/blob/master/LICENSE

  1. URL: https://github.com/greensky00/simple_logger

License: https://github.com/greensky00/simple_logger/blob/master/LICENSE

Originally licensed under the MIT license.

  1. URL: https://github.com/greensky00/testsuite

License: https://github.com/greensky00/testsuite/blob/master/LICENSE

Originally licensed under the MIT license.

  1. URL: https://github.com/greensky00/latency-collector

License: https://github.com/greensky00/latency-collector/blob/master/LICENSE

Originally licensed under the MIT license.

  1. 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.

  1. 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.

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

C++availabilityconsensusconsistencycpp

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言