Saber是一个分布式服务框架,主要参考了Google的Chubby和Apache的Zookeeper,在Voyager和Skywalker的基础上实现的分布式锁服务。
Author: Mirants Lu (mirantslu@gmail.com)
Saber主要包含以下几个部分:
1. util: 基础库模块,包括互斥量、条件变量、线程、轮询队列等基础工具。
2. proto: Saber的消息协议,在Google的Protobuf的基础上搭建。
3. service: Saber的事件通知机制,对外开放事件通知接口。
4. client: Saber的客户端实现,对外提供数据节点的创建、删除、读写等接口。
5. server: Saber的服务端实现,对外提供服务的启动、集群的管理等接口。
6. public: Saber的对外版本号接口。
7. main: Saber的可执行程序实现,包括Client端和Server端。
8. test: Saber的使用和测试示例。
- 同时提供Client端和Server端的实现。
- 采用分桶策略来管理会话。
- 数据节点分为临时节点和持久节点两大类。
- 提供数据节点的版本控制功能。
- 提供强大的事件通知机制。
- 拥有严格地顺序访问控制能力。
- 只有Master节点才能处理读写请求。
- 基于Voyager来完成网络传输功能。
- 基于Skywalker来完成分布式一致性功能。
- 基于Protobuf来完成消息的序列化和反序列化。
- 没有像Chubby那样实现客户端缓存。
- 对会话的激活和超时处理做得不是特别的精细,没有根据当前服务器的负载来进行动态调整。
- 对Master故障恢复还有不少的优化空间。
- 数据分布/订阅
- 负载均衡
- 命名服务
- 集群管理
- Master选举
- 分布式锁
- 分布式队列
- 可参照benckmarks做压力测试。
Saber只支持Linux,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及以上版本
- Skywalker 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编译安装(https://github.com/QiumingLu/skywalker/blob/master/README.md)
- 进入third_party/skwalker目录
- 执行./build.sh
- 进入./build/release目录
- 执行sudo make install
(5) Saber编译安装
- 执行./build.sh
- 进入./build/release目录
- 执行sudo make install