【课程报告一】CAP理论——理解分布式计算一致性算法的前提

        前言:应课程老师的要求,需研读分布式计算中的几遍经典论文。关于分布式计算,本人纯属萌新,如有大佬发现错误,欢迎指正。第一篇是Leslie Lamport的Paxos Made Simple。粗看一遍下来,云里雾里,在网上查了查,也许从CAP原理入手理解较为合适。

 首先介绍一下什么是CAP原理。根据百度百科:指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。定义容易找到,如下:

Consistency (一致性)

  • “all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

Availability (可用性)

  • 可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

Partition Tolerance (分区容错性)

  • 即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。
  • 分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

在分布式系统中,必需要满足P(分区容错性)。分布式系统区别于单体架构的最重要的就是系统中由多台机器协同工作,如果一台机器出错整个系统就无法工作的话,这个分布式系统就没多大的实际效用。

看了很多介绍CAP理论的文章,分布式系统要么满足CA,要么CP,要么AP。无法同时满足CAP。

关于架构我并没有深入,想要了解可以参考:

分布式系统架构中CAP原理及案例 - 腾讯云开发者社区-腾讯云 (tencent.com)

在解决分布式系统的一致性问题上,一种思想就被提出了——Paxos算法。

首先简要描述一下算法,关于论文的思考我在下篇文章给出。

为了解决一致性问题,强一致模型被提出。最朴素的模型为同步模型,如下图所示:当master节点发送或数据或请求或什么其他东西到slave节点后,模型要求各子节点必须保持一致,当某个子节点出现异常,master迟迟收不到一致的信息,该节点就会阻塞,便破坏了系统的分区容错性。

 那为了解决这个问题,前文提到的论文作者Leslie Lamport就提出了Paxos算法

 

Paxos算法加入了proposers(提议员),acceptors(议员), learners(记录员).

在基础的BasicPaxos中,一个值被传出前有两个阶段——promise和accept阶段。当一个客户端传入了一个请求,proposer会代替客户端发出请求,并把这个请求编号(记为N),后续每个请求的编号会加1。在promise和accept阶段中,在分布式系统中的acceptors会对请求返回一个值(不要求返回一致的结果),当某个值超过了一半,则会回传给proposer。当这两个过程中的任意时刻有编号大于N的请求被acceptors接收,编号为N的请求就会被忽略从而无法传出结果。当一个请求经过两轮回传幸运地没有被后来者打断,客户端就能接收到结果。而这个请求及其结果在结果传出前会被learners记录备份。图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值