Anna is a low-latency, autoscaling key-value store developed in the RISE Lab at UC Berkeley.
The core design goal for Anna is to avoid expensive locking and lock-free atomic instructions, which have recently been shown to be extremely inefficient. Anna instead employs a wait-free, shared-nothing architecture, where each thread in the system is given a private memory buffer and is allowed to process requests unencumbered by coordination. To resolve potentially conflicting updates, Anna encapsulates all user data in lattice data structures, which have associative, commutative, and idempotent merge functions. As a result, for workloads that can tolerate slightly stale data, Anna provides best-in-class performance.
For more details, see:
- Key Concepts — actors, consistent hashing, replication, gossip, storage tiers
- Architecture — system components, actor model, communication, fault tolerance
- Lattices and Consistency — lattice types, consistency levels, comparisons with other systems
- Autoscaling and Policy Engine — SLOs, elasticity, selective replication, tiering
- ICDE 2018 — "Anna: A KVS For Any Scale" — system design, coordination-free consistency, evaluation
- VLDB 2019 — "Autoscaling Tiered Cloud Storage in Anna" — cloud-native design, policy engine, cost-performance evaluation
Anna has four client implementations, each with a library and CLI:
| Client | Library | CLI Binary | Language |
|---|---|---|---|
| C++ | anna-client-lib |
anna-cli |
C++ |
| Rust | annalib |
anna |
Rust |
| Python | anna package |
anna-py |
Python |
| Go | annalib |
anna-go |
Go |
All clients support the same operations (GET, PUT, GET_SET, PUT_SET, GET_CAUSAL, PUT_CAUSAL)
and are tested against shared golden files (tests/shared/cli/).
See detailed instructions in building anna.
See detailed instructions in running anna.
The Project is licensed under the Apache v2 License.