内容简介:1、关联数据之间的逻辑关系是否正确 (数据约束一致). 理解为垂直方向的冗余
点击蓝色“ 乔志勇笔记 ”关注我哟
加个“ 星标 ”,第一时间获取推送的文章哦!
一、基本概念:
1、关联数据之间的逻辑关系是否正确 (数据约束一致). 理解为垂直方向的冗余
2、由于数据的复制,不同数据节点中的数据内容是否完整并且相同(数据副本一致) ,理解为水平方向的冗余
二、一致性模型
一致性模型主要可以分为两类:
能够保证所有进程对数据的读写顺序都保持一致的一致性模型称为 强一致性模型 ,
而不能保证的一致性模型称为 弱一致性模型
(1)强一致性模型
1、线性一致性(Linearizable Consistency)
cap中的一致性指的就是线性一致性,目前而言线性一致性是无法实现的,做的最好就是Google的Spanner
2、顺序一致性(Sequential Consistency)
(2)弱一致性模型
1、因果一致性(Causal Consistency)
2、最终一致性(Eventual Consistency)
base 理论中的E就是最终一致
3、以客户端为中心的一致性(Client-centric Consistency)
以客户端为中心的一致性包含了四种子模型:
-
单调读一致性(Monotonic-read Consistency):如果一个进程读取数据项 x 的值,那么该进程对于 x 后续的所有读操作要么读取到第一次读取的值要么读取到更新的值。即保证客户端不会读取到旧值。
-
单调写一致性(Monotonic-write Consistency):一个进程对数据项 x 的写操作必须在该进程对 x 执行任何后续写操作之前完成。即保证客户端的写操作是串行的。
-
读写一致性(Read-your-writes Consistency):一个进程对数据项 x 执行一次写操作的结果总是会被该进程对 x 执行的后续读操作看见。即保证客户端能读到自己最新写入的值。
-
写读一致性(Writes-follow-reads Consistency):同一个进程对数据项 x 执行的读操作之后的写操作,保证发生在与 x 读取值相同或比之更新的值上。即保证客户端对一个数据项的写操作是基于该客户端最新读取的值。
三、共识算法(水平问题)
一致性问题是结果,共识是为达到这个结果所要经过的过程,或者说一种手段。
-
拜占庭错误。表示通过伪造信息进行恶意响应产生的错误。
-
非拜占庭错误。没有进行响应产生的错误
解决「 拜占庭错误 」的称作Byzantine Fault Tolerance(BFT)类算法,解决「 非拜占庭错误 」的称作Crash Fault Tolerance(CFT)类算法
(1)BFT类型算法
BFT类型算法又有2个分支。「 基于确定性的 」和「 基于概率的 」。
先聊聊「基于确定性的」,此类算法表示一旦对某个结果达成共识就不可逆转,即共识是最终结果。它的代表作是PBFT(Practical Byzantine Fault Tolerance)算法
再聊聊「基于概率的」,此类算法的共识结果则是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,成为事实上的最终结果。它的代表作是PoW(Proof of Work)算法
(2)CFT类算法
CFT类算法解决的是分布式系统中存在故障,但不存在恶意节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题
「Paxos」算法
Raft算法
Zookeeper里的「ZAB」(ZooKeeper Atomic Broadcast)算法也是CFT类算法,是以Fast Paxos算法为基础实现的
四、分布式事务(垂直问题)
分布式系统的事务,不得不提到被广为流传的两个理论:「 CAP 」、「 BASE 」。
(1)「CAP」为基础解决方案
1、两阶段提交(2PC)[5]
2、三阶段提交(3PC)[6]
3、TCC
注意幂等性
(2) 「BASE」理论为基础的解决方案
1、异步消息——本地消息表
2、异步消息——不支持事务的MQ
3、异步消息——支持事务的MQ
目前唯一支持事务的MQ框架是RockerMQ
4、Saga
必须要额外确保 执行了「回滚」之后再接收到「正向请求」,等于“请求无效”的效果
5、Gossip协议
参考文章: 分布式系统:一致性模型
最终一致性的实现方式
近期文章:
如果你喜欢本文
请长按二维码,关注 乔志勇笔记
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
个体与交互
Ken Howard、Barry Rogers / 贾永娜、张凯峰 / 机械工业出版社华章公司 / 2012-3-20 / 45.00元
对敏捷软件开发的关注重点,通常都集中在“机制”方面,即过程和工具。“敏捷宣言”认为,个体与交互的价值要高于过程和工具,但这一点很容易被遗忘。在敏捷开发中,如果你重新将注意力放在人的方面,将会收获巨大利益。 本书展示了如何解决敏捷团队在实际项目中遭遇的问题。同时,本书也是很有实用价值的敏捷用户指南,其中包含的故事、最佳实践方法、经验以及技巧均可应用到实际项目当中。通过逐步实践,你将学会如何让团......一起来看看 《个体与交互》 这本书的介绍吧!