From a8b625d861a87a29482867f0284b1fd4cb720d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Budiseli=C4=87?= Date: Fri, 19 Jan 2024 21:30:51 +0000 Subject: [PATCH] Add NuRaft ADR (#1634) Co-authored-by: Andi --- ADRs/002_nuraft.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 ADRs/002_nuraft.md diff --git a/ADRs/002_nuraft.md b/ADRs/002_nuraft.md new file mode 100644 index 000000000..9be239e17 --- /dev/null +++ b/ADRs/002_nuraft.md @@ -0,0 +1,34 @@ +# NuRaft ADR + +**Author** +Marko Budiselic (github.com/gitbuda) + +**Status** +PROPOSED + +**Date** +January 10, 2024 + +**Problem** + +In order to enhance Memgraph to have High Availability features as requested by +customers, we want to have reliable coordinators backed by RAFT consensus algorithm. Implementing +RAFT to be correct and performant is a very challenging task. Skillful Memgraph +engineers already tried 3 times and failed to deliver in a reasonable timeframe +all three times (approximately 4 person-weeks of engineering work each time). + +**Criteria** + +- easy integration with our C++ codebase +- heavily tested in production environments +- implementation of performance optimizations on top of the canonical Raft + implementation + +**Decision** + +There are a few, robust C++ implementations of Raft but as a part of other +projects or bigger libraries. **We select +[NuRaft](https://github.com/eBay/NuRaft)** because it focuses on delivering +Raft without bloatware, and it's used by +[Clickhouse](https://github.com/ClickHouse/ClickHouse) (an comparable peer to +Memgraph, a very well-established product).