在散布式系统中,副本和备份是1个用来提供高可用性和1定的容错能力的手段和措施。HA(高可用性)在当前愈来愈成为1个趋势在1些移动计算的领域和1些失去连接的状态场景之下。在这篇笔记中,我会介绍1些副本备份的相干技术点,比如基于隶属度管理的组通讯,还有被动和主动备份技术,和最后的副本分区的1些情况。
1、副本在散布式系统中被用的非常的广泛,比如说被用于资源的缓存的访问,放置在代理服务器上或说存在于客户真个本地机子上,对源资源的1个拷贝。
2、副本的技术的出现加强了服务的性能,首先可以免了要求服务的延迟,当远程访问源服务器资源的时候,第2点,提高了高可用性,当服务器宕机的时候,最少还有他的副本资源的存在,以致于在客户端失去连接的时候还能正常使用,这其实也是容错能力的1个表现。这里用1个数字来体现这1点,如果说服务器有2个副本,每一个服务器宕机的几率为5%,只有当2个服务器都不可用的时候才会造成系统真实的不可用,几率p=1-0.05*0.05=0.9975,也就是说是99.75%,这已是很1个高度可用的比例值了。
3、但是这里就会有1个比较重要的问题,已有这么多的副本备份了,如何保护他们的1致性问题,数据不1致了,后果可很严重哦,比如说1些资金,银行等方面的,明显是不容有失的。
各个副本实际上是1个物理对象,寄存在各个单1的机子上的。这里提供了1种组通讯的机制用来调和他们之间的1致性。
为了使得问题变得1般化,我们构造了1个基本的结构模型用来管理副本数据。在这个结构中,我们用到了1个主要的角色RM(Replication Manager)副本管理器,在这里,你可以把副本管理器就理解为1个Server服务端。所以这个结构就变成了常见的C-S的模型了。在这里每一个副本管理器包括了每一个对象的1个副本。
1、当客户端发出1个要求操作的时候,他其实不是直接马上的发给RM,而是先到1个专门处理要求的组件,叫做front end,front end的作用才是通过消息传递与RM副本管理器通讯的1个角色。
2、然后履行后面的5个阶段的进程:(1)、Requesting要求。(2)、Coordination调和。(3)、Execution履行阶段。(4)、Agreement1致性阶段。(5)、Response回复阶段。
3、在之前的章节中,我们提到过组通讯中用到的covering algorithm覆盖算法,当在副本技术中,这里要求1个更高要求的动态隶属度方法,意味着在进程进入或离开系统的时候,组的隶属度会产生改变。因此就衍生出了1个额外的服务叫做membership service服务。
容错服务与上面提到的高可用的区分在于对数据的正确性上的处理上,也就是说,当服务器挂了的时候,此时如果你的副本数据已正确更新了,固然没问题,但是如果此时的你的副本上的数据还是旧的话,明显还达不到系统的要求,所以这里说的容错服务是对数据1致性的要求。
1、在数据1致性的分类中,这里分为了2类:Linearizability consistency和sequential consistency。
Passive replication的意思是被动副本的意思,1句话说,就是当最初的RM副本管理器挂掉的时候,在这些备份的副本中会选出1个作为新的主要的备份管理器,将会重新恢复刚刚操作失败时的状态。被动副本技术的缺点在于比较高的沟通本钱,在这里的进程会产生数次的来回的消息通讯,无疑也会造成1定的延迟。而且当主副本上更新了数据的时候,必须one-to-one的方式更新备份副本上的数据,效力还是比较低下的。
与上面的方式相对的是Active replication,积极的备份技术,如果在此模式下,如果服务器的RM挂了,将不会对系统的性能有任何的影响,剩下的副本管理器还是会继续的响应回复。所以积极的副本技术的原理就是他会向所有的副本管理器发出要求,然后要求会在所有的RM上跑1遍,然后客户端获得到所有的回复,最后第1个回复的结果将会被采用。所以在积极副本技术中,其中的全局有序性就显得比较重要了。
在下面,将会罗列出几个利用了副本技术使得服务变得高可用性的例子。
1、gossip结构实现高可用的措施是通过副本管理器之间进行周期性的交换gossip message,为了是副本之间能及时获得到来自客户真个更新操作以此保持1致性。gossip服务提供2种类型的操作,query操作和update更新操作。
2、为了保持进程操作的有序性,每一个要求采取了类似于1个vector timestamp时间戳向量的概念。当每次操作结束,就会更新新的时间戳向量的新的值。
3、每一个gossip信息包括了2个项,1个是副本管理器RM的log,和副本的timestamp,日志是用来合并用的。
4、gossip结构并没有规定甚么时候或说在哪里进行副本管理器之间的信息交换,这里推荐了1种update-propagation更新传播的策略。
Bayou系统是1个提供数据副本的高可用性但是在1致性的方面稍微差1点的系统。他的副本情势是以数据库的情势保存的,因此可以支持增删改查的操作。Bayou的更新操作会被标记为暂存的临时的版本直到下1次的更新操作来到的时候,上次的更新操作才会被利用。更新的冲突需要1个独立的检验进程和合并进程。
Coda是1个文件系统,他的出现是为了弥补AFS文件系统的不足的地方。Coda的1个为了提高可用性的核心措施是利用了数据的本地副本实现了HA特性。Coda的副本策略是乐观的,为何这么说呢,他允许在网络分区的情况下,或失去连接的条件下,对副本数据进行修改的处理。然后依托每一个副本文件的Coda version vector(CVV)来提供足够的信息表明了文件的更新历史,以便最后做冲突的检测。
我们已知道客户端要求单1操作在1系列的对象副本中。1个事务用在有副本对象的场景与无副本对象的场景的表现应当是要1样的。这个属性叫做one-copy serializability。还好,每一个RM提供了1定的并发控制能力和恢复对象的能力。one-copy Serializability的实现依托的是read-one和write-all的机理实现。怎样说呢?read-one指的是读操作只会在你1个单1的副本管理器RM上履行,毕竟只是读操作而已,而write-all则要在每一个RM上利用到,所以他的体系结构要求,当到来1个写要求时,所有的RM都要履行1遍,至于要求怎样转达到各个副本管理器,不需要客户端1个个要求到每一个RM里,RM之间可以自己交换,传播消息。
副本管理器的拷贝复制是为了避免,RM意外产生宕机或说通讯失败,要求拷贝1个与他1样数据的RM,1遍能够选择另外的方式进行操作。
网络的分区会致使副本管理器的group会本分成2个或2个以上的子组,而子组之间由于分区的缘由是没法通讯的,所以这常常造成数据的不1致性。解决这个问题的办法叫available copies algorithm可用拷贝算法,利用在每一个分区中,当分区已被修复的时候,再进行冲突的验证。冲突的验证可以用Version vector版本向量标记写操作。在网络分区中,还有1个重要的概念叫virtual partition algorithm虚拟分区算法。
参考文献:<<Distributed Sysytems Concepts And Design>>原版第5版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon
Blair