一致性算法

参考: https://www.bilibili.com/video/av21667358


什么是分布式系统?

由多台设备组成的一个系统叫做分布式系统。

什么是一致性?

CAP理论

对于一个分布式系统,不能同时满足以下三点

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition Tolerance)

一致性模型

  • 弱一致性
    • 最终一致性
      • DNS(Domain Name System)
      • Gossip(Cassandra的通信协议)
  • 强一致性
    • 同步
    • Paxos
    • Raft(multi-paxos)
    • ZAB(multi-paxos)

最终一致性

例如:
DNS
映射域名test.yangzhang.edu11.11.11.11,这个操作是对这个分布式系统中一台设备的操作,不会立即被整个分布式系统同步,所以当你想立即访问你的域名时,可能会出现访问不到的情况,但过了一段时间之后,一定可以访问到那个域名,这种情况被称为最终一致性。

首先——明确问题

数据不能存在单点上。
分布式系统对 fault tolorance 的一般解决方案是 state machine replication。
其实强一致性算法的本质就是 state machine replication 的共识算法。
(系统的最终一致性,不仅需要达成共识,还会取决于 client 的行为)
state machine replication: 通过存/读 log 的方式来完成一致性

强一致性算法——主从同步

  1. Master接受写请求
  2. Master复制日志到slave
  3. Master等待,直到所有slave返回
    主从同步

问题
一个节点失败,导致Master阻塞,整个集群不可用,保证了一致性,但可用性缺大大降低。

强一致性算法——多数派

基本思想:
每次写都保证写入大于 N/2 个节点,每次读都保证从大于 N/2 个节点中读。
问题:
在高并发的场景下,例如某台设备input Inc5(增加5),另一台设备input Set0,会导致某些设备上的 log 顺序不一致。
多数派的问题

强一致性算法——Paxos

发明者:Lesile Lamport
为描述Paxos算法,Lamport虚拟了一个叫做Paxos的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这种事。所以无论是议员,议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议或者传递消息的时间。

  • Paxos
    • Basic Paxos
    • Multi Paxos
    • Fast Paxos

强一致性算法——Basic Paxos

  • 角色介绍:
    • Client:系统外部角色,请求发起者。比作民众。
    • Proposer:接受Client请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。比作议员,替民众提出议案。(在Basic中是多个,在Multi中是单个)
    • Accpetor(Voter):提议投票和接收者,只有在形成法定人数(Qunrum = (n+1)/2,一般即为majority多数派)时,提议才会最终被接受。比作国会。
    • Learner:提议接受者,backup,备份,对集群一致性没什么影响。比作记录员。

基本流程:

  1. Client民众 对 Proposer议员 发出一个写请求
  2. Proposer议员 对 Acceptor1、2、3 发出请求:请求采用方案1(1是编号,此时只对Acceptor发送编号,不发生方案的实际内容)
  3. Acceptor1、2、3 响应 Proposer 表示同意(一共有3个 Acceptor,其中有3个 Acceptor表示同意,同意的数量大于等于 Qunrum(大多数))
  4. Proposer议员 对 Acceptor1、2、3 发送方案1的实际内容
  5. Acceptor1、2、3 相应 Proposer 表示同意,并告诉 Learner记录员 记下这个方案(此时才正式写入log)
  6. Learner 将 response 返回给 client
    基本流程

部分节点失败,但达到了Quorum:

部分节点失败

失败的方案1:

在方案1没有完成记录之前,方案2到来,Acceptor将直接放弃方案1,只相应编号最大的方案。
方案1失败

潜在问题:活锁

每个方案在被记录之前,都有新的方案提出,导致没有任何方案记录,没有response,产生活锁。
活锁

Basic Paxos 总结:

  1. 难实现
  2. 效率低(2轮RPC)
  3. 活锁

强一致性算法——Multi Paxos

引入新的概念:Leader,唯一的Proposer,所有写请求都需要经过此Leader。

基本流程:

  1. Proposer 请求 Acceptor 成为 Leader
  2. 达到Quorum数量的 Acceptor 响应(同意),此Proposer成为Leader
  3. Client发出request给Leader
  4. 第N号Leader(Proposer),发出编号I的方案和方案内容给Acceptor
  5. Acceptor响应Leader,并通知Learner 写入log
  6. Client发出request给Leader
  7. 第N号Leader(Proposer),发出编号I+1的方案和方案内容给Acceptor
  8. Acceptor响应Leader,并通知Learner 写入log
    ......
    基本流程

Multi Paxos总结:

  1. 解决活锁:只有一个Leader,由Leader来决定方案顺序
  2. 提高效率

强一致性算法——Raft

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点??? 还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力………… 感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务