27 releases

new 0.9.3 Mar 21, 2024
0.8.9 Mar 3, 2024
0.8.8 Dec 13, 2023
0.8.7 Nov 28, 2023
0.6.4 Jan 3, 2022

#47 in Asynchronous

Download history 2694/week @ 2023-12-01 2249/week @ 2023-12-08 2646/week @ 2023-12-15 1896/week @ 2023-12-22 1482/week @ 2023-12-29 2068/week @ 2024-01-05 3091/week @ 2024-01-12 3055/week @ 2024-01-19 2464/week @ 2024-01-26 1920/week @ 2024-02-02 350/week @ 2024-02-09 2350/week @ 2024-02-16 3379/week @ 2024-02-23 1450/week @ 2024-03-01 480/week @ 2024-03-08 1993/week @ 2024-03-15

7,665 downloads per month
Used in 7 crates (6 directly)

MIT/Apache

1MB
24K SLoC

Openraft

Advanced Raft in 🦀 Rust using Tokio. Please ⭐ on github!

Crates.io docs.rs guides Discord Chat
CI License Crates.io Crates.io

This project intends to improve raft as the next-generation consensus protocol for distributed data storage systems (SQL, NoSQL, KV, Streaming, Graph ... or maybe something more exotic).

Currently, openraft is the consensus engine of meta-service cluster in databend.

  • 🚀 Get started:

  • 🙌 Questions?

    • Why not take a peek at our FAQ? You might find just what you need.
    • Wanna chat? Come hang out with us on Discord!
    • Or start a new discussion over on GitHub.
    • Or join our Feishu group.
    • And hey, if you're on WeChat, add us: drmingdrmer. Let's get the conversation started!

Whatever your style, we're here to support you. 🚀 Let's make something awesome together!

Status

  • The features are almost complete for building an application.
  • Performance: Supports 70,000 writes/sec for single writer, and 1,000,000 writes/sec for 256 writers. See: Performance
  • Unit test coverage stands at 92%.
  • The chaos test has not yet been completed, and further testing is needed to ensure the application's robustness and reliability.

API status

  • Openraft API is not stable yet. Before 1.0.0, an upgrade may contain incompatible changes. Check our change-log. A commit message starts with a keyword to indicate the modification type of the commit:

    • DataChange: on-disk data types changes, which may require manual upgrade.
    • Change: if it introduces incompatible changes.
    • Feature: if it introduces compatible non-breaking new features.
    • Fix: if it just fixes a bug.

Versions

Roadmap

Performance

The benchmark is focused on the Openraft framework itself and is run on a minimized store and network. This is NOT a real world application benchmark!!!

clients put/s ns/op
256 1,014,000 985
64 730,000 1,369
1 70,000 14,273

For benchmark detail, go to the ./cluster_benchmark folder.

Features

  • Async and Event-Driven: Operates based on Raft events without reliance on periodic ticks, optimizing message batching for high throughput.
  • Extensible Storage and Networking: Customizable via RaftLogStorage, RaftStateMachine and RaftNetwork traits, allowing flexibility in choosing storage and network solutions.
  • Unified Raft API: Offers a single Raft type for creating and interacting with Raft tasks, with a straightforward API.
  • Cluster Formation: Provides strategies for initial cluster setup as detailed in the cluster formation guide.
  • Built-In Tracing Instrumentation: The codebase integrates tracing for logging and distributed tracing, with the option to set verbosity levels at compile time.

Functionality:

Who use it

Contributing

Check out the CONTRIBUTING.md guide for more details on getting started with contributing to this project.

Contributors

Made with contributors-img.

License

Openraft is licensed under the terms of the MIT License or the Apache License 2.0, at your choosing.

Dependencies

~5–17MB
~207K SLoC