GitHub - ucbrise/anna

 4 years ago
source link: https://github.com/ucbrise/anna
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.


Anna: A KVS for any scale

Note: This is a snapshot of the Anna codebase as of March, 2018. The latest codebase is released and maintained here (https://github.com/fluent-project/fluent).

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.

Build Instruction (Ubuntu):

  1. 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.

  2. 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.

  3. Install protobuf: after cloning the protobuf repo, run:
    ./configure CXX=clang++ CXXFLAGS='-std=c++11 -stdlib=libc++ -O3 -g'.
    make check.
    sudo make install.

  4. 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 in kvs/include)

IP Configuration:

For each server node:

  1. The ip of the current node should be stored in conf/server/server_ip.txt.
  2. The ip of the seed node should be stored in conf/server/seed_server.txt. The seed node can be any proxy node.
  3. 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:

  1. The ip of the current node should be stored in conf/proxy/proxy_ip.txt.

For each user/benchmark node:

  1. The ip of the current node should be stored in conf/user/user_ip.txt.
  2. The ip of all the proxy nodes should be stored in conf/user/proxy_address.txt. Each line contains a single proxy ip.

Run Instruction:

Please start the proxy first, and then the server and client.

  1. Start a proxy by running ./build/kvs/kvs_proxy.
  2. Start a server by running ./build/kvs/kvs_server.
  3. Start a client by running ./build/kvs/kvs_user.

The accepted input formats are GET $key and PUT $key $value.

About Joyk

Aggregate valuable and interesting links.
Joyk means Joy of geeK