• Stars
    star
    232
  • Rank 172,847 (Top 4 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A geo-distributed KV store for metadata management

Xline

Discord Shield Apache 2.0 licensed Build Status codecov

Xline is a geo-distributed KV store for metadata management. It provides the following features:

  • Etcd compatible API.
  • Geo-distributed friendly deployment.
  • Compatible with K8s.

Motivation

With the wide adoption of cloud computing, multi-cloud has become the mainstream IT architecture for enterprise customers. Multi-cloud (or similarly multi-datacenter), however, obstacles data access across different cloud (or data center) providers to some extent. Further, data isolation and data fragmentation resulting from cloud barriers have become impediments to business growth. The biggest challenge of multi-datacenter architecture is how to maintain strong data consistency and ensure high performance in the race condition of multi-datacenter scenario. Traditional single datacenter solutions cannot meet the availability, performance, and consistency requirements of multi-data center scenarios. This project targets the multi-datacenter scenario, aiming to realize a high-performance multi-cloud metadata management solution, which is critical for businesses with geo-distributed and multi-active deployment requirements.

Innovation

Cross-datacenter network latency is the most important factor that impacts the performance of geo-distributed systems, especially when a consensus protocol is used. We know consensus protocols are popular to use to achieve high availability. For instance, Etcd uses the Raft protocol, which is quite popular in recently developed systems.

Although Raft is stable and easy to implement, it takes 2 RTTs to complete a consensus request from the view of a client. One RTT takes place between the client and the leader server, and the leader server takes another RTT to broadcast the message to the follower servers. In a geo-distributed environment, an RTT is quite long, varying from tens of milliseconds to hundreds of milliseconds, so 2 RTTs are too long in such cases.

We adopt a new consensus protocol named CURP to resolve the above issue. Please refer to the paper for a detailed description. The main benefit of the protocol is reducing 1 RTT when contention is not too high. As far as we know, Xline is the first product to use CURP. For more protocol comparison, please refer to the blog

Performance Comparison

We compared Xline with Etcd in a simulated multi-cluster environment. The details of the deployment is shown below.

test deployment

We compared the performance with two different workloads. One is 1 key case, the other is 100K key space case. Here's the test result.

xline key perf

It's easy to tell Xline has a better performance than Etcd in a geo-distributed multi-cluster environment.

Quick Start

Read the document QUICK_START.md for more details.

Contribute Guide

Read the document CONTRIBUTING.md for more details.

Code of Conduct

Read the document CODE_OF_CONDUCT.md for more details.

Roadmap

  • v0.1 ~ v0.2

    • Support all major ETCD APIs
    • Support configuration file
    • Pass validation tests (All the supported etcd APIs and their validation test results can be viewed in VALIDATION_REPORT.md)
  • v0.3 ~ v0.5

    • Enable persistent storage
    • Enable snapshot
    • Enable cluster membership change
    • Implement a k8s operator basically
  • v0.6 ~ v0.8

    • Enable to export metrics to some monitoring and alerting systems
    • Enable SSL/TLS certificates
    • Provide clients implementing in different languages, like go, python (not determined). [Note: Although the Xline is etcd-compatible, we provide an Xline specific client SDK to users for better performance. Currently this SDK is only in Rust lang, and we plan to extend it to other languages]
  • v1.0 ~

    • Enable chaos engineering to validate the system's stability
    • Integration with other CNCF components

More Repositories

1

datenlord

DatenLord, Computing Defined Storage, an application-orientated, cloud-native distributed storage system
Rust
872
star
2

async-rdma

Easy to use RDMA API in Rust async
Rust
335
star
3

open-rdma

RoCE v2 hardware and software implementation
87
star
4

s3-server

Generic S3 server implementation
Rust
80
star
5

lockfree-cuckoohash

A rust implementation of lock free cuckoo hashmap
Rust
67
star
6

rdma-sys

Rust bindings for RDMA fundamental libraries: libibverbs-dev and librdmacm-dev
Rust
37
star
7

r-epaxos

Rust
27
star
8

wavebpf

High-performance eBPF implementation in hardware.
Scala
25
star
9

ring-io

An easy-to-use interface for io_uring
Rust
17
star
10

TRIDENT

A Hardware Implemented Poseidon Hasher
C++
16
star
11

blue-rdma

RoCEv2 hardware implementation in Bluespec SystemVerilog
Bluespec
15
star
12

etcd-client

Rust
15
star
13

poseidon-spinal

The hardware implementation of Poseidon hash function in SpinalHDL
Python
14
star
14

open-rdma-driver

Datanlord's RDMA nic driver
C
8
star
15

roce-sim

Python
7
star
16

async-dpdk

DPDK API in async Rust
Rust
7
star
17

blue-crc

A high-throughput, parameterized, parallel crc hardware implementation.
Bluespec
7
star
18

aligned-utils

Rust
5
star
19

hardware-agile-dev-workshop

4
star
20

blue-udp

The hardware implementation of UDP in Bluespec SystemVerilog
Bluespec
4
star
21

async-fuse

[WIP] asynchronous FUSE implementation
Rust
3
star
22

datenlord.github.io

TypeScript
3
star
23

concurrent-btree

Rust
3
star
24

LordOS

distributed containerized OS
Shell
3
star
25

dpdk-sys

Rust bindings for DPDK fundamental libraries.
Rust
3
star
26

training

3
star
27

DistroSim

C++
3
star
28

r4l_playground

Rust
3
star
29

rustChinaHackathon22

2
star
30

better-as

Explicit type casting
Rust
2
star
31

wbpf-driver

wBPF Linux driver.
C
2
star
32

rdma-env-setup

Shell
2
star
33

xline-home

Xline's Home Page
TypeScript
2
star
34

blake2b_compress

verilog implementation of blake2b_compress
Verilog
2
star
35

arc

Container engine with OCI specification
Rust
2
star
36

utilities

Rust
1
star
37

fp-err-handle

Rust
1
star
38

wbpf-userspace

Userspace utilities for wBPF.
Rust
1
star
39

raft_kv_training

Rust
1
star
40

merged_range

Rust
1
star
41

cgroup2

Rust
1
star
42

blue-dmac

Bluespec
1
star