erlang开发的开源高可靠性nosql数据库tiger介绍
可靠性:
写:对于n=2f+1 机器集群,在f台机器宕机的情况下可写
读:只要是没有宕机的机器都是可读的
一致性:
强一致性
扩展性:
读的能力可以线性扩展
功能:
目前实现了key/value的get set 和delete功能:
基于memcached协议和leveldb的持久数据库
基于redis协议和redis存储引擎的内存数据库,宕机后数据重放到内存
性能:
单机跑3个实例:
双核,Pentium(R) Dual-Core CPU E6600 @ 3.06GHz
centos 5.6 erlang R15b 2G 内存
基于memcached协议的接口:
set接口:
91.49% <= 12 milliseconds,5387.93 requests per second
get 接口:
100.00% <= 13 milliseconds 18177.54 requests per second
基于redis协议的接口:
基于redis协议的接口:
set接口:
100.00% <= 60 milliseconds 3954.13 requests per second
get 接口:
13477.09 requests per second
13477.09 requests per second
测试程序使用:mc-benchmark,redis-benchmark,因为3个实例在一个机器上,所以写的性能影响比较大, 部署的时候建议分开到不同物理机部署。
主要技术:
erlang:用于socket和通讯层
Zab(Zookeeper
Atomic Broadcast):实现消息的原子广播
存储引擎:leveldb,redis存储引擎
架构实现:
zab_engine介绍:
将zab协议实现为erlang的api,如果使用erlang开发项目,可以嵌入zab_engine,实现多master的架构变得非常简单
引擎实现功能:
1:2阶段提交
2:恢复
a.follow恢复
b.leader恢复
c.在线加入和恢复
架构:
使用说明:
1.实现gen_zab_server 回调函数
2.对于须同步数据,实现handle_commit
3.对于只读数据,实现handle_call