TDDMS揭秘(三)分布式一致性技术是如何实现的(上)

友情链接:


分布式一致性技术

image.png

在分布式系统中,为了消除单点提高系统可用性,通常会使用副本来进行容错,系统在用户的写操作被响应前会将数据复制到不同的副本上。但这会带来另一个问题,即如何保证多个副本之间的一致性?

依靠分布式一致性协议。

前面有提到TDDMS管理层中多个MasterServer共同组成了一个Raft Group,基于Raft协议在多台服务器上构建高可用服务,同步数据,保持数据间的一致性。Raft协议可以保证各节点之间可以达成共识,即使在小部分(≤ (N-1)/2)节点故障的情况下,系统仍然能正常对外提供服务。

当然,除了Raft之外,还有许多其他的一致性协议,比如Paxos、Multi-Paxos等等。下面我将为您介绍什么是分布式一致性协议,常见的一致性协议有哪些,Raft的核心算法剖析以及在TDDMS中发挥了什么样的作用


什么是分布式一致性协议?

分布式系统的一大特点就是可线性扩展,那么,当多个独立的参与方共同参与处理大量工作进程的时候,如何确保这些参与方的决策目标是一致的?如何确保选择是公平、安全、可信的?如何确保他们的某项“恶意”决策不会对系统造成致命影响?如何确保系统的可靠性和容错性?

共识算法与一致性协议。

举个比较有意思的例子,我们都知道在参与多人战斗的游戏时,当出现需要团体进攻时,大家的目标需要是一致的,比如是选择优先攻击输出还是先攻击血量低的,如果对方开团了,大家在没有优势的情况下是先撤退还是直接发起进攻?如果大家最开始的目标是一致的,比如如果开始开团就选择优先攻击输出。但是中途突然有个玩家玩着玩着摆烂不想玩了,跟其他几个人说要撤退或者自己跑去送人头了,有的玩家没听他的还是发起攻击,有的玩家蒙圈了也停止攻击了,那这种情况下就出现了决策不一致的情况,最终结果一定会跟预期结果出现偏差,导致整个团队的失败。还有种更坏的情况,这个玩家有可能是恶意玩家,专门来搞事情传递虚假信息。所以,所有参与方需要达成一致,就算有某个参与方做出恶意决策,系统也可以基于预先指定的默认策略来规避风险。这个就是分布式系统中很容易出现的一个典型故障:拜占庭故障(拜占庭故障通常指的是系统进程故障或恶意行为者操纵的结果,当网络中存在多个拜占庭组件时,它们可能会串通对网络造成更大的损害。拜占庭故障也被称为拜占庭将军问题、拜占庭一致性问题等等)。例子虽然不是很恰当,但是可以反映出分布式系统中需要考虑的一些潜在问题(勿喷)。

除了上述的例子,分布式系统也在面临着许多其他风险,比如节点宕机、通信延迟阻塞、网络分区、组件发生故障宕机导致无法运行等等。

因此,为了实现整体系统的可靠性,需要通过一定的容错措施,协调多个多个进程、实例通过一定的原则、规则针对某项内容、某个状态达成一致。一旦作出决定,那么该决定则是最终决定。这个通信和协商的过程就是共识(consensus)。共识算法在分布式节点之间达成一致和建立单一事实来源方面发挥着至关重要的作用。比如集群中如果个别服务器出现故障(≤ (N-1)/2),那么其他服务器也可以继续运行,系统仍然能正常对外提供服务。但是如果多台服务器都出现了故障,则进程会停止,但是不会返回不正确的结果。一致性协议确保了结果,即分布式系统中各节点在出现故障或网络条件变化的情况下保持一致性,预防了节点崩溃导致数据丢失等风险。


一组机器达成一致性协议是否可行?如何实现?

目前比较常见的分布式一致性协议有:

  • Paxos:Paxos是一种用于一致性问题的分布式协议。它通过在多个节点之间达成共识来保证一致性,即使在存在故障或消息丢失的情况下也能够工作;
  • Raft: Raft是一种用于一致性问题的分布式协议,是Paxos的变体。它通过选举一个领导者节点来协调各个节点之间的操作,从而达成共识;
  • Bitcoin协议: Bitcoin协议是一种用于去中心化数字货币系统的分布式协议。它通过工作量证明 (Proof of Work) 算法来选择一个节点作为区块链的创建者,并使用链式结构来维护交易的有序性和安全性;
  • Ethereum协议: Ethereum协议是一种基于区块链技术的分布式协议。它通过智能合约和虚拟机的支持,使得开发者可以构建和部署去中心化应用程序 (DApps);
  • ZooKeeper协议: ZooKeeper是一个用于分布式应用程序协调和管理的分布式协议。它提供了一个层次化的命名空间、状态同步和分布式锁等功能,使得开发者可以更容易地实现分布式系统的一致性;
  • Google的Chubby协议: Chubby是Google开发的一个分布式锁服务,它使用Paxos算法来实现高可用性和一致性。Chubby协议用于解决分布式系统中的协调和同步问题;

每个协议都有不同的应用场景和特点,用于解决分布式系统中的各种问题。总体上,一致性协议可以分为两大类,单主协议或多主协议。

多主协议

多主协议指的是说整个集群不止存在一个主节点,允许多个节点发起写操作并同步给其他副本,传输顺序具有随机性,由于数据的有序性无法得到保证,因此只保证最终数据的一致性。比较经典的这类协议有Gossip、POW等等。

多主协议大多数时候应用于区块链等领域,核心特性是“去中心化”,所有节点将共同保留控制权。“去中心化”指的是通过分布式核算和存储,各个节点实现了信息自我验证、传递和管理,具有高度自治的特征。它将控制权和决策权从中心化实体(个人、组织或群体)转移到了分布式网络,无需依赖额外的第三方管理机构,也无需中心管制。该特性确保了信息的安全性,没有任何节点可以进行系统控制或者更改其中保存的信息。比如POW(Proof-of-work)算法,POW算法从名字上就可以将其实现的功能窥见一二,即工作量证明。大量的节点参与竞争,通过其自身的工作结果来证明其能力(抢夺决策权),最终能力最大的节点获胜,其他节点的信息与该节点统一。本篇内容暂不围绕多主协议展开,感兴趣的小伙伴可以查看:https://en.wikipedia.org/wiki/Proof_of_work 进一步了解。

单主协议

单主协议指的是说用一个主节点来负责写操作,整个分布式系统就像一个单体系统,所有写操作都由主节点处理并且同步给其他副本(从节点),确保了数据传输的有序性,一致性更强。例如主备同步、Paxos、Raft 都属于这类协议。其中,PAXOS是理论基础,它的诞生是具有里程碑意义因为它从理论上解决了分布式一致性的问题。RAFT、Zookeeper、VR、multi-paxos是其实现,他们的分布式决议保障一致性的算法原理完全一样。但是比起Paxos以及multi-paxos来说,Raft更加好理解一些,实现难度也降低了很多。



下一篇我们将针对应用最广泛的Raft协议做进一步讲解。


下一篇:一致性协议Raft的工作原理及介绍--Raft协议背景及算法初剖析

评论
登录后可评论
发布者
星小环分享号
文章
180
问答
205
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入