数据一致性

分布式系统的数据一致性理论

一、 问题引入

1. 数据一致性理论出现的背景(拜占庭将军问题)

拜占庭帝国国土辽阔,有5个将军带领军队守卫疆土,现面临战争,需要5个将军共进退,那如何才能让他们能够达成一起进攻或者撤退的共识?

那简单的方法是5个将军进行投票,每个将军派出信使将自己的意见传达给其他的几位将军。对于每个将军而言算上自己的票数,只要进攻票数超过2票即可进攻,反之则撤退。
但这时候可能会出现以下几种情况:
【5个将军中会不会有奸细?】
比如其中一位将军是奸细,另外4位将军中,两个同意进攻而另外两个同意撤退。那么奸细给同意进攻的两位将军传达进攻的消息,给另外的两位同意撤退的将军传达撤退的消息,那么将会产生一种情况即:两位同意进攻的将军将会发起进攻而两位同意撤退的将军会撤退。最终的战争必然会失败。
在这里插入图片描述
【信使会不会被暗杀或者谋反?】
信使不可靠也将导致战争的失败。

2. 分布式系统中的“拜占庭将军问题”

将“拜占庭将军问题”引入到计算机世界,一个将军代表着计算机节点,那么将问题简化一下,即:
a) 不考虑将军中存在奸细这种情况,即假定计算机只有宕机而不处理请求的情况,但不会发送伪造信息。
b) 信使不会被策反,即信道会受到噪声影响而发生错误或因为中断而无法传输消息。

那么最终就是,在信道不可信、服务器节点出现错误或宕机而无法通信的情况下,该如何保证分布式系统的数据一致性?

二、 Paxos算法

针对上述问题,我们来介绍一下Paxos算法。
在介绍Paxos算法之前我们需要了解一下Lamport在论文中提出的一个故事,即Paxos岛,大致情况是:岛上所有的法令都是由议会的议员表决通过的。议员都身兼其他职位,在表决法令的时候不一定会出席议会。但好在兼职议员互相之间高度信任,且被表决的提案都会被通过(不会有人反对)。那么当岛屿需要颁布一个法令的时候,会召集议员进行投票表决,当投同意票的议员数量超过总数的一半的时候,该法令将会被通过。
在这里插入图片描述
将这个故事抽象出来,Paxos算法中包含三个角色:Proposer、Acceptor、Learner。

Basic-Paxos算法

1. 这三个角色的功能

Proposer:提出议案,用于投票表决。每个议案会有一个议案编号,记为n。
Acceptor:参与议案决策,对每个议案进行投票,需要注意的是,该角色收到编号是k的提案后,会先拿该该议案的编号k与本身缓存的议案编号m对比,如果k小于m则不予响应;如果k大于m则予以响应,但不会再接收比k小的请求。
Learner: 不会参与决策,只会将最终达成一致的提案记录下来。

【注】:Proposer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang L.R.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值