前言
这里说的分布式系统是指用集群部署方式提供统一服务的架构,并不是指微服务或者大型电商这种拥有多种功能不同节点构成的系统,这类多节点、多服务的系统主要是为了把大型系统拆分成多个小系统方便维护,可以进行局部升级。而集群部署的分布式系统的多个节点的功能相同、数据相同,是为了提高可用性。从概率角度描述,假设一个节点的故障率是P,则单点系统的可用性为1-P。假设有N个节点同时提供服务,每个节点的故障率都是P,则整个集群的可用性为1-P^N,显然N越大,可用性越高。
节点数越多,维持节点间数据一致性越困难,通常可分为两种模式:以数据同步为方式的状态转移和以操作同步为方式的操作转移。将某一个节点的某个时刻的数据视为一个状态,通过数据复制的方式同步到其他节点,就是状态转移。操作转移则是将节点的数据视为状态机,通过某些操作如增删改引起了状态变化,只需要将这些操作同步到其他节点并执行,其他节点的数据也能转移到同样的状态,目前主流的分布式系统均以操作转移方式进行数据同步。而且分布式环境下,网络分区不可避免,为了保证可用性,通常采用“少数服从多数”原则,只要大部分节点完成了状态变换,就认为系统实现了数据同步,就可以对外提供服务,而少部分节点的数据不一致则需要系统自行处理。
这个让系统各节点容忍网络分区、节点崩溃、执行速度不一致等因素,最终呈现出数据整体一致的过程,就称为协商共识(Consensus)。而我们常说的一致性(Consistency)是指数据间的差异。一致性是我们追求的目标,例如数据的ACID原则中,通过AID来保证C。在分布式系统中,通过协商共识的方法,来保证节点间的一致性。
Paxos
Paxos是分布式系统中最重要的基础共识算法,最早于1990年发表,在2006年广为人知,其后的Raft、ZAB等算法均在Paxos基础上发展而来。Paxos实际包含两部分:Basic Paxos 和 Multi Paxos。Basic Paxos可以就某一个问题达成共识,这里是说,整个分布式系统只能就一个问题达成共识,它不能处理更多问题,共识达成之后也不能再修改,典型的如三军问题(指挥部通过通信兵和三支军队协商何时发起攻击问题,非拜占庭问题,即消息不会被篡改)。显然Basic Paxos应用场景非常有限,Multi Paxos 则是在 Basic Paxos 算法基础上用来解决多个问题共识问题,也就是我们现在比较熟悉的zookeeper、etcd等分布式协调系统可以提供基于K-V的共识服务。
Basic Paxos
Basic Paxos将系统中的节点分为三类角色:
- Proposer,提案节点。其可以向所有决策节点提出一个提案(Proposal),每个提案都携带一个ID和value,每个节点的ID是自增的,通常使用时间戳和节点Id组合,value则是针对目标问题的值。

最低0.47元/天 解锁文章
2721

被折叠的 条评论
为什么被折叠?



