最近在学习分布式的一些东西,断断续续有些自己的想法。找了个时间记录一下。
首先是分布式系统的意义,目前来看分布式系统主要分为分布式存储系统和分布式应用系统,
前者主要用于数据备份,容灾。后者主要用于保证系统高可用性,防止出现单点故障导致的服务不可用。
但这样就会出现不一致的问题,以数据库为例,如果有集群中有三台服务器提供读写服务,写一台机器后会把操作传递给其他两台,如果同时有写操作a=1和a=2写到两个不同的服务器,再做复制由于网络的异步性很容易使集群数据库有a=1和a=2两个不同的状态。所以一般的数据库集群服务都是一主多备的模式,只有主设备能写,再把操作同步给备份数据,如果主设备宕机,其他设备通过投票机制再选出一个主设备。
但这个设计会有一个问题,就是如果主机在操作日志同步之前宕机会造成数据操作在一个应用周期内丢失的情况,这对一些应用来说是没法接受的
paxos算法是一个比较完备的解决分布式一致性的算法
http://lamport.azurewebsites.net/pubs/paxos-simple.pdf
http://www.ux.uis.no/~meling/papers/2013-paxostutorial-opodis.pdf
这两篇论文主要介绍了paxos算法的推导和证明过程,以及paxos算法工业化落地的实现方法,
目前paxos算法在应用中的两大优势在我看来:
1是能够保证集群操作的顺序化,2在主机宕机重选之后集群操作的不丢失和可恢复
以大家经常用的zookeeper为例子,zookeeper集群中的机器有三种身份,leader,acceptor,和leaner,leader一般只有一台机器负责提交用户的操作议案给acceptor,并通知leaner执行,需要说明的是zookeeper集群中的acceptor和leaner身份是重合的,一台server即具有acceptor也具有leaner的身份,这样集群中的机器就都会保存一份操作记录和待操作记录,这样就保证leader宕机重新选出leader之后,相应数据记录能同步给新leader进行处理,保证操作的不丢失。
网友评论