Skip to content

adityaramkumar/anna

 
 

Repository files navigation

Anna

Build Status codecov License

Anna is a low-latency, autoscaling key-value store developed in the RISE Lab at UC Berkeley.

Design

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. A more detailed description of the system design and the coordination-free consistency mechanisms, as well as an evaluation and comparison against other state-of-the-art systems can be found in our ICDE 2018 paper.

Anna also is designed to be a cloud-native, autoscaling system. When deployed in a cluster, Anna comes with a monitoring subsystem that tracks workload volume, and responds with three key policy decisions: (1) horizontal swelasticity to add or remove resources from the cluster; (2) selective replication of hot keys; and (3) data movement across two storage tiers (memory- and disk-based) for cost efficiency. This enables Anna to maintain its extremely low latencies while also being orders of magnitude more cost efficient than systems like AWS DynamoDB. A more detailed description of the cloud-native design of the system can be found in our VLDB 2019 paper.

Using Anna

To run the Anna KVS locally, you need to first need to install its dependencies, which you can do with the install-dependencies*.sh scripts in the hydro-project/common repo, which is a submodule of this repository. You can build the project, which scripts/build.sh, and you can use scripts/start-anna-local.sh and scripts/stop-anna-local.sh scripts to start and stop the KVS respectively. This repository has an interactive CLI (source, executable compiles to build/cli/anna-cli) as well as a Python client (source). The common repository has an importable C++ client that can embed into other applications.

More detailed instructions on building and running can be found in the docs directory. This repository only explains how to run Anna on a single machine. For instructions on how to run Anna in cluster mode, please see the hydro-project/cluster repository.

License

The Hydro Project is licensed under the Apache v2 License.

About

A low-latency, cloud-native KVS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 82.0%
  • Python 9.7%
  • CMake 4.4%
  • Shell 3.6%
  • Dockerfile 0.3%