_ _ _____ _____ _______ _______ _____ ______ _______
|_____| | | | | | |______ | | | |_____/ |______
| | |_____| |_____ |_____| ______| | |_____| | \_ |______
HoloStore is a distributed, strongly consistent key/value store built on the Accord consensus algorithm. It exposes a Redis compatible interface for simple benchmarking and integrates a durable commit log (WAL) + storage engine to make writes correct and crash safe.
What is Accord?
- Accord is a leaderless consensus protocol.
- It uses pre-accept → accept → commit phases with dependency tracking.
- A fast path is possible when dependencies converge without conflicts.
- Transactions are ordered per key via dependency sets, so unrelated writes can proceed in parallel without a single global leader.
- Accord consensus protocol paper (CEP-15 draft whitepaper).
In this repository we implement:
- A per partition Accord group with batched consensus RPCs.
- A commit log (WAL) that persists committed entries and replays on restart.
- An execution loop that applies committed commands to a state machine.
- Range generation IDs that keep split/merge ownership changes safe during apply and WAL replay.
- A Redis protocol surface for easy benchmarking.
Documentation
Build
make build-releaseFor allocator-specific performance runs:
make build-release-mimallocMeta-plane health
./target/release/holoctl --target 127.0.0.1:15051 meta-status
./target/release/holoctl --target 127.0.0.1:15051 controller-status
TARGET=127.0.0.1:15051 ./scripts/check_meta_plane_health.sh
# Prometheus-style metrics export from any node:
redis-cli -p 16379 HOLOMETRICSRun a local 3-node cluster
./scripts/cleanup_cluster.sh
./scripts/start_cluster.shBenchmark with redis-benchmark
redis-benchmark -h localhost -p 16379 -c 50 -n 1000000 -r 100000 -P 100 -t get
====== GET ======
1000000 requests completed in 1.76 seconds
50 parallel clients
3 bytes payload
keep alive: 1
multi-thread: no
Summary:
throughput summary: 569,152.00 requests per second
latency summary (msec):
avg min p50 p95 p99 max
8.721 4.504 7.271 13.479 39.615 52.735Porcupine linearizability check
make check-linearizabilityYou can customize the workload via env vars:
NODES="127.0.0.1:16379,127.0.0.1:16380,127.0.0.1:16381" \
CLIENTS=3 KEYS=5 SET_PCT=50 DURATION=10s OP_TIMEOUT=10s FAIL_FAST=true \
./scripts/check_linearizability.shNotes
- By default, the cluster starts on non-standard Redis ports (16379–16381).
- The start script prefers
target/release/holo-storeif it exists. - You can override defaults via environment variables (batch sizes, shards, WAL persistence, etc.).