All Projects → ease-lab → Hermes

ease-lab / Hermes

Licence: apache-2.0
Hermes: a fault-tolerant replication protocol, implemented over RDMA, guaranteeing linearizability and achieving low latency and high throughput.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Hermes

Glusterfs
Gluster Filesystem : Build your distributed storage in minutes
Stars: ✭ 3,437 (+3173.33%)
Mutual labels:  replication, distributed-systems
epaxos
A pluggable implementation of the Egalitarian Paxos Consensus Protocol
Stars: ✭ 39 (-62.86%)
Mutual labels:  distributed-systems, replication
Immudb
immudb - world’s fastest immutable database, built on a zero trust model
Stars: ✭ 3,743 (+3464.76%)
Mutual labels:  performance, replication
Distributed Consensus Reading List
A long list of academic papers on the topic of distributed consensus
Stars: ✭ 803 (+664.76%)
Mutual labels:  replication, distributed-systems
Copycat
A novel implementation of the Raft consensus algorithm
Stars: ✭ 551 (+424.76%)
Mutual labels:  replication, distributed-systems
Nuraft
C++ implementation of Raft core logic as a replication library
Stars: ✭ 428 (+307.62%)
Mutual labels:  replication, distributed-systems
Seaweedfs
SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.
Stars: ✭ 13,380 (+12642.86%)
Mutual labels:  replication, distributed-systems
Pysyncobj
A library for replicating your python class between multiple servers, based on raft protocol
Stars: ✭ 468 (+345.71%)
Mutual labels:  replication, distributed-systems
Lizardfs
LizardFS is an Open Source Distributed File System licensed under GPLv3.
Stars: ✭ 793 (+655.24%)
Mutual labels:  replication, distributed-systems
Go Craq
CRAQ (Chain Replication with Apportioned Queries) in Go
Stars: ✭ 75 (-28.57%)
Mutual labels:  replication, distributed-systems
Gimbal
Web Performance Auditing tooling
Stars: ✭ 99 (-5.71%)
Mutual labels:  performance
Performance Handbook
Webフロントエンド パフォーマンス改善ハンドブック
Stars: ✭ 99 (-5.71%)
Mutual labels:  performance
Repl
REPL rewrite for Node.js ✨🐢🚀✨
Stars: ✭ 101 (-3.81%)
Mutual labels:  performance
Shopify Theme Inspector
A Chrome DevTools plugin that visualizes Shopify Liquid render profiling data so you can triage long-running code and reduce server response times!
Stars: ✭ 102 (-2.86%)
Mutual labels:  performance
Aimeos Slim
Slim PHP package for professional, ultra fast online shops
Stars: ✭ 98 (-6.67%)
Mutual labels:  performance
Optick
C++ Profiler For Games
Stars: ✭ 1,364 (+1199.05%)
Mutual labels:  performance
Geotic
Entity Component System library for javascript
Stars: ✭ 97 (-7.62%)
Mutual labels:  performance
Specs
COALA IP is a blockchain-ready, community-driven protocol for intellectual property licensing.
Stars: ✭ 98 (-6.67%)
Mutual labels:  distributed-systems
Zookeeper Cpp
A ZooKeeper client for C++.
Stars: ✭ 98 (-6.67%)
Mutual labels:  distributed-systems
Rapid
Rapid is a scalable distributed membership service
Stars: ✭ 103 (-1.9%)
Mutual labels:  distributed-systems

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.

top picks available functional stars

license license last commit follow on Twitter


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.


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.

Independet Implementations of Hermes

Contact

Antonios Katsarakis: [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].