Giter Club home page Giter Club logo

skywalker's Introduction

Skywalker -- 分布式一致性协议Paxos的实现

简介

Skywalker是一个基于Leslie LamportPaxos Made Simple实现的C++ Paxos库,它的目标是使得单机服务能够很容易地扩展为分布式服务,并且具有强一致性和高度的容错能力。

Build Status

Author: Mirants Lu ([email protected])

Skywalker主要包括以下几个部分:

1. include/skywalker:对外开放的接口文件;
2. util:基础库模块,包括互斥量、条件变量、线程、字符串处理、时间处理等基础工具;
3. network:网络传输模块,处理Skywalker的网络传输,在Voyager网络库的基础上搭建;
4. storage:日志存储模块,处理Skywalker的日志存储,在LevelDB数据库的基础上搭建;
5. paxos:Paxos协议实现模块,根据Leslie Lamport的Paxos Made Simple一文来实现;
6. machine:状态机模块,完成Skywalker的内部状态机的状态转移功能;
7. proto: Proto消息定义模块,定义Skywalker的消息协议,在Protobuf序列化库的基础上搭建;
8. examples:Skywalker的使用示例,目前在Skywalker的基础上实现了一个分布式KV数据库;
9. third_party: 第三方库,目前使用的第三方库有:LevelDB,Protobuf,Voyager;
10. cmake:CMake编译文件。

特性

  • 基于Leslie Lamport的Paxos Made Simple来实现。
  • 一个Node节点实例可以同时运行多个Paxos Group。
  • Propose提议不阻塞用户线程,以异步架构实现,并且严格地按照用户提交顺序来进行提交,结果通过Callback的形式向用户返回提交结果。
  • 一次Propose提议的完成,每台机器的性能消耗可以做到只有一次网络RTT,一次磁盘写入。
  • 自动定时地发起学习操作,使得集群内的机器能够及时地保持状态对齐,可以正常地参与Paxos协议过程,降低集群停止正常工作的风险。
  • 如果用户已经实现checkpoint接口,对于状态落后较大的节点,Skywalker会自动地通过checkpoint来进行学习,从而可以加快学习的速度。
  • 内置Master选举功能。
  • 内置成员变更管理配置功能。
  • 基于Voyager来完成网络传输功能。
  • 基于LevelDB来完成日志存储功能。
  • 基于Protobuf来完成消息序列化功能。
  • 接口简单方便使用,基本的操作为Propose。

局限

  • 没有做特别的过载保护,可能会导致节点在高压的情况下不能自适应地运转。
  • 没有实现实时监控功能,需要开发者自行开发。

性能

兼容性

Skywalker支持Linux,Mac OS X,FreeBSD等类Unix平台,不支持Windows平台,以下是一些曾测试的平台/编译器组合:

  • Linux 4.4.0,GCC 5.4.0
  • macOS 10.12,Clang 3.6.0

编译依赖

  • LevelDB v1.3及以上版本
  • Protobuf v3.0.0及以上版本
  • Voyager v1.0.2及以上版本

编译安装

(1) LevelDB编译安装(https://github.com/google/leveldb/blob/master/README.md)

  • 进入third_party/leveldb目录
  • 执行 make
  • 执行 sudo cp -rf out-shared/libleveldb.* /usr/local/lib/
  • 执行 sudo cp -rf include/leveldb /usr/local/include

(2) Protobuf编译安装(https://github.com/google/protobuf/blob/master/src/README.md)

  • 进入third_party/protobuf目录
  • 执行 ./autogen.sh
  • 执行 ./configure
  • 执行 make && sudo make install

(3) Voyager编译安装(https://github.com/QiumingLu/voyager/blob/master/README.md)

  • 进入third_party/voyager目录
  • 执行./build.sh。
  • 进入./build/release目录,
  • 执行sudo make install

(4) Skywalker编译安装

  • 通过CMake编译安装,和Voyager相同。
  • 通过Makefile编译安装,和LevelDB相同。

使用示例


1、简单地使用Skywalker的基本功能,可以参考examples/journey 。
2、在Skywalker的基础上搭建分布式服务,可以参考https://github.com/QiumingLu/saber

skywalker's People

Contributors

qiuminglu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

tlexy zoujiaqing

skywalker's Issues

Hi,mac下编译报错,可以帮忙看下原因吗

已经按照readme编译了levelDB, voyager
-- Found Protobuf Compiler: /usr/local/bin/protoc
-- Found Protobuf (include: /usr/local/include, libraries: /usr/local/lib/libprotobuf.dylib)
-- Found LevelDB (include: /usr/local/include, library: /usr/local/lib/libleveldb.dylib)
CMake Error at /usr/local/Cellar/cmake/3.11.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find Voyager (missing: VOYAGER_LIBRARY)

/usr/local/lib下voyager相关的文件如下:
$ ls | grep voyager
libvoyager_core.1.6.dylib
libvoyager_core.1.dylib
libvoyager_core.a
libvoyager_core.dylib
libvoyager_http.1.6.dylib
libvoyager_http.1.dylib
libvoyager_http.a
libvoyager_http.dylib
libvoyager_port.1.6.dylib
libvoyager_port.1.dylib
libvoyager_port.a
libvoyager_port.dylib
libvoyager_rpc.1.6.dylib
libvoyager_rpc.1.dylib
libvoyager_rpc.a
libvoyager_rpc.dylib
libvoyager_util.1.6.dylib
libvoyager_util.1.dylib
libvoyager_util.a
libvoyager_util.dylib

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.