Anna is an in-memory KVS that delivers high performance at multiple scales, from a single core machine to NUMA to geo-distributed deployment. It also provides a wide spectrum of coordination-free isolation levels that aim to meet the consistency requirements of different applications.
-
Install Clang and libc++, run:
sudo apt-get update
.
sudo apt-get install -y build-essential autoconf automake libtool curl make g++ unzip pkg-config wget clang-3.9
.
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.9 1
.
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.9 1
.
sudo apt-get install -y libc++-dev libc++abi-dev libtbb-dev
. -
Install cmake, run:
wget https://cmake.org/files/v3.9/cmake-3.9.4-Linux-x86_64.tar.gz
.
tar xvzf cmake-3.9.4-Linux-x86_64.tar.gz
.
mv cmake-3.9.4-Linux-x86_64 /usr/bin/cmake
.
export PATH=$PATH:/usr/bin/cmake/bin
.
rm cmake-3.9.4-Linux-x86_64.tar.gz
. -
Install protobuf: after cloning the protobuf repo, run:
./autogen.sh
.
./configure CXX=clang++ CXXFLAGS='-std=c++11 -stdlib=libc++ -O3 -g'
.
make
.
make check
.
sudo make install
.
ldconfig
. -
Build KVS, run:
bash scripts/build_release.sh
.
(This command will build a KVS that provides last-writer-win consistency. Lattice composition for other consistency levels can be found inkvs/include
)
For each server node:
- The ip of the current node should be stored in
conf/server/server_ip.txt
. - The ip of the seed node should be stored in
conf/server/seed_server.txt
. The seed node can be any proxy node. - The ip of all the proxy nodes should be stored in
conf/server/proxy_address.txt
. Each line contains a single proxy ip.
For each proxy node:
- The ip of the current node should be stored in
conf/proxy/proxy_ip.txt
.
For each user/benchmark node:
- The ip of the current node should be stored in
conf/user/user_ip.txt
. - The ip of all the proxy nodes should be stored in
conf/user/proxy_address.txt
. Each line contains a single proxy ip.
Please start the proxy first, and then the server and client.
- Start a proxy by running
./build/kvs/kvs_proxy
. - Start a server by running
./build/kvs/kvs_server
. - Start a client by running
./build/kvs/kvs_user
.
The accepted input formats are GET $key
and PUT $key $value
.