jbpaxos - 跨机房配置中心


Apache
跨平台
Java

软件简介

paxos是什么?

一致性算法,google称其为唯一的一致性算法,其他的算法都是paxos的简化。

我们知道一般数据库的主从同步,实际上在极端情况下,依然会产生不一致的现象,这就造成了master的损坏,需要手动的切换备机,而在paxos中,由于一致性算法,我们可

以做到自动的进行master的切换,而不会产生不一致的现象,当然这个要在一个大前提下,就是n台机器,仅有小于
n/2的机器损坏,但这样依然提供了我们一种更高的容灾标准。

jbpaxos是什么?

jbpaxos = java basic paxos , java语言实现的paxos编程框架,提供高可用,强一致,基于paxos构建分布式程序的框架。

适用的场景?

对于一般的应用而言,没有数据的保存,仅仅是提供服务,那么我们可以说这些server对于数据而言是无状态的,比如说,我们多数的java
web应用,这些应用所需要的数据,

要么在缓存里,要么在
db里,那这些server仅仅需要提供一个更稳定的负载器来进行故障转移即可了,实际上整套系统的一致性和容灾全部交由另外的系统来解决(db,缓存,

稳定的负载均衡),这些server 是不适用paxos算法的。

对于另外一些应用,我们需要自己维护数据副本,不依赖于第3方服务的,比较适合paxos,自动选主,主故障时,15s恢复期,可提供强一致性,诱人的特性,但这些特性,也

不是没有代价,更高的网络负载,更高的写入延时,如果你能忍受这些,那么请选择paxos吧。

构建高可用的分布式程序,不是有zookeeper吗?

zookeeper提供了类似chubby的功能,可以说zookeeper提供的是一种服务,jbpaxos提供的是更底层的算法实现,基于接口的编程,就可以实现类似与zookeeper的功能

通过jbpaxos,可以自由的实现副本间的同步,zookeeper提供服务的形式,是无法提供副本间同步的功能,副本间同步的功能,请参见下面的demo,实际上,每个config
server 就是一份副本

jbpaxos 0.0.1beta提供了什么?

一个classic
paxos的实现,应对磁盘损坏,主机宕机,可以做到15s恢复,提供了paxos的底层实现,提供了网络层的接口,二次开发不需要考虑网络层上的开发,基于此项目的二次开发,可以实现高可用的配置中心,分布式锁,基于paxos的副本同步机制等等。

根据网络情况,和设定的最大 rt 容忍时间,自动运行时调整封包大小,最大化网络利用率。

0.0.1beta暂时没有提供fellower的实现,仅仅有senator的实现

jbpaxos 0.0.1beta中的概念

senators,用于写入时投票的节点,fellowers(下个版本实现,对于配置中心类似的多读少写的应用比较有用),仅仅学习的节点,不参与投票过程

master , 从senators中选举出的法官,它来发起一项法案的投票

jbpaxos 的基本性能

3个节点时,写入大小128bytes, 单线程单tcp连接非阻塞同步写入3w+ tps , 1000线程单tcp连接阻塞同步写入2.5w+ , 3线程3个
tcp连接非阻塞同步写入4w+ ,单线程同步写入200tps

写入大小512bytes ,3线程3个 tcp连接非阻塞同步写入3w+

写入大小1024bytes,3线程3个 tcp连接非阻塞同步写入1.6w+

512及1024bytes的时候,基本上将千兆网卡顶满了

如果说节点上升到5个的时候,吞吐会下降,写入的大小影响系统性能非常多,所以建议在开发的时候写入数据需要经过压缩,建议使用snappy或lzo这种高吞吐的压缩算法

读取性能,要看二次开发的实现如何,及服务端口,是否和内部系统端口,走同一块网卡

当前的总体架构图

\

架构解说: 5个config server
为互备节点,当2个节点(包含2个)以下损坏,不会影响服务,client连接上任一节点即可,对于跨机房部署,要优先连接最近的节点

后续架构: jbpaxos下个版本,预计支持fellower,当下个版本发布后,config server不做代码修改,即可将架构变为下图:

后续架构解说: 相比两种架构区别,后一种,在扩展更高连接量时,有非常大的优势,fellower的数量决定了可以支撑的client
的数量,但对写入没有帮助,反而会加大写入的延时,适合于像配置中心这类多监视变化,少修改的类型

程序架构图: 红框的部分,是我们需要做的