多数据中心间复制技术的较量
2017-06-26 16:28:44
虽然数据中心的建设规模越来越大,但也不可能无限制地扩容下去,这和数据中心所处的位置、环境、技术水平、公共设施等都有关系。很多时候,要在多地建设很多座数据中心,有时是应用的需要,有时是资源限制,也有时是为了数据备份,甚至到现在还出现了很多新鲜的概念:比如微型数据中心,云端数据中心等,不再一味地强调建设超大超强的数据中心,俗话说“三个臭皮匠顶一个诸葛亮”,未来的数据中心可以以数量取胜,而不是个体的大与小。那么问题来了,多个数据中心之间如何协调工作,才能达到“1+1大于2”的效果?这就涉及到数据中心之间的数据复制技术,必须学会用好复制技术,才能玩转多数据中心。
单主复制技术
单主复制指的是只有一个主数据中心有数据写权限,完成数据的写入工作,同时向其它数据中心同步数据,其它数据中心只提供只读服务。单主复制技术相当于将主数据中心的数据COPY多份,放到其它数据中心中,供更多人去访问,但是这些数据只有读权限,对于那些交互式的访问,这种复制技术行不通。为了不影响主数据中心的写入性能,同步数据一般采用异步方式复制,这样由于时间上的不完全同步,当主数据中心失效时,其它数据中心的数据会有少量丢失,还有多个数据中心只有一个主数据中心执行写数据操作,工作效率低,写数据量少,同样也会影响复制到其它数据中心的数据量,最终影响的是整个数据中心系统的效率。
多主复制技术
既然单主复制技术的写数据效率太低,于是就出现了多主复制技术。多主实现了多个数据中心都可以写数据,当然也支持读数据。多主复制技术需要解决写请求顺序的问题,不同数据中心所处的位置不同,相同的写操作在不同的数据中心执行的效果和时间并不同,这就容易出现数据的差异,导致写数据错误或者有延迟,这是数据中心的应用所不能容忍的,这样一般选择在地理位置上接近的数据中心进行同时写数据,时延可以得到保障,所以这类多主复制技术一般是部署在两个数据中心上,由两个位置较近的数据中心同时完成写数据,同时两个数据中心向其它数据中心复制数据,其它数据中心支持数据的读访问,如果要实现多于两个数据中心同时写数据,多主复制技术就不适合了。
第二阶段提交技术
两阶段提交是在分布式系统上实现事务的一种协议,分布式系统的一个难点是如何保证架构下多个节点在进行事务性操作的时候保持一致性。二阶段提交技术首先假设存在一个节点作为协调者,其他节点作为参与者,所有节点之间可以进行网络通信。同时所有节点都采用预写式日志,即使节点损坏日志数据也不会消失。二阶段提交技术也适用于多数据中心之间数据复制,在数据中心里选出一个协调者,其它充当参与者,按照第二阶段提交算法来实现多数据中心之间的数据复制。不过,第二阶段提交技术也有很大限制,这种方案虽没有单点错误,但由于额外的协调通讯,它会提高延迟,一个写操作时间就要达到 200 毫秒的级别,大大降低吞吐量和增加延迟,不适用于那些对吞吐量和时延要求比较高的数据中心。在协调者数据中心在执行过程中,所有参与节点都是事务阻塞型的,当参与者发生故障,协调者需要给每个参与者额外指定超时机制,超时后整个事务失败,没有容错机制,参与者可能会一直阻塞下去。如果协调者在发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了,那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否已经被提交。显然第二阶段提交技术也存在问题,当然还有第三阶段提交技术,相比第二阶段提交增加了超时机制,并在第一阶段和第二阶段之间增加了一个准备阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。既然第三阶段提交比第二阶段好,为何是第二提交阶段技术总为人所提及,这是因为第三阶段提交会存在数据不一致的问题,这大大限制了技术的应用。
Paxos一致性算法
Paxos是莱斯利兰伯特于1990年提出的一种基于消息传递的算法,被认为是一致性算法中最为有效的一种,其解决了一个分布式系统中数据一致性问题。Paxos为保证每个节点执行相同的命令序列,需要在每一条指令上执行Paxos,以保证每个节点看到的指令一致。若在多数据中心之间部署Paxos,可以实现数据的完全一致性。将Paxos算法部署到数据中心,可以实现所有的跨数据中心一切操作,特别用来协调状态在数据中心间转移。如果你的应用为一个数据中心提供数据,当它需要把数据转移到另外一个数据中心时,这些协调的工作就需要通过 Paxos ,Paxos 还会用来管理 memcache 和离线处理。因为Paxo算法中也有不少的判断和交互过程,这直接导致的就是数据的处理时延高,读写效率下降,但数据基本不会丢失,并且数据中心之间的数据也完全一致。