Code Monkey home page Code Monkey logo

hermes's Introduction

Hermes Reliable Replication Protocol

This is the publicly available artifact repository supporting the ASPLOS'20 paper "Hermes: A Fast, Fault-Tolerant and Linearizable Replication Protocol". The repository contains both code to experimentally evaluate Hermes(KV) and complete Hermes TLA+ specifications which can be used to verify Hermes correctness via model-checking.


High Perfomance Features

  • Reads: i) Local ii) Load-balanced (served by any replica)
  • Updates (Writes and RMWs): i) Inter-key concurrent ii) Decentralized iii) Fast (1rtt commit -- any replica)
  • Writes: iv) Non-conflicting (i.e., never abort)

Consistency and Properties

Linearizable reads, writes and RMWs with the following properties:

  1. Writes: from a live replica always commit after Invalidating (and getting acknowledgments from) the rest live replicas.
  2. RMWs: at most one of possible concurrent RMWs to a key can commit, and this only once all acknowledgments from live replicas are gathered.
  3. Reads: return the local value if the targeted keys are found in the Valid state and the coordinator was considered live at the time of reading. The later can be ensured locally if the coordinator has a lease for (and is part of) the membership.

Fault Tolerance

Coupling Invalidations with per-key logical timestamps (i.e., Lamport clocks) and propagating the value to be updated with the invalidation message (early value propagation), Hermes allows any replica blocked by an update (write or RMW) to safely replay the update and unblock it self and the rest of followers.


License

This work is freely distributed under the Apache 2.0 License.
The authors encourage any capital contributions to be donated to charity instead!

Hardware dependencies

A homogeneous cluster of x86_64 nodes interconnected via RDMA network cards and switched (tested on "Mellanox ConnectX-4" Infiniband infrastructure).

Software requirements

Linux OS (tested on Ubuntu 18.04 4.15.0-55-generic) with root access.

The software is tested using the following version of Mellanox OFED RDMA drivers MLNX_OFED_LINUX-4.4-2.0.7.0.

Third-party libraries that you will require to run the experiments include:

  1. parallel (Cluster management scripts only)
  2. libmemcached-dev (used to exchange QP informations for the setup of RDMA connections)
  3. libnuma-dev (for mbind)

Setup

On every node:

  1. Install Mellanox OFED ibverbs drivers
  2. ./hermes/bin/setup.sh

On manager (just pick on node in the cluster):

  1. Fill variables in /hermes/exec/hosts.sh
  2. Configure setup and default parameters in /hermes/include/hermes/config.h
  3. From /hermes/exec/ compile hermesKV through make
  4. scp hermesKV and the configured hosts.sh in the /hermes/exec/ directory of all other nodes in the cluster.

Compilation

cd hermes/exec; make

Warning: Do not compile through through cmake; instead use the Makefile in exec/ directory.

Run

Run first on manager: ./run-hermesKV.sh <experiment_parameters>

Then run on all other member nodes ./run-hermesKV.sh <experiment_parameters>

Note that some members will eagerly terminate if experiment uses smaller number of nodes than specified in hosts.sh

An experiment example for three nodes 12 worker threads and 35% write ratio would be as follows: ./run-hermesKV.sh -W 12 -w 350 -M 3 Supported command-line arguments for the experiments are detailed in the run-hermesKV.sh script.


Acknowledgments

Hermes is based on HERD/MICA design as an underlying KVS, the code of which we have adapted to implement HermesKV.

Contact

Antonios Katsarakis: [email protected]

hermes's People

Contributors

akatsarakis avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.