分布式数据一致性理解

栏目: 后端 · 发布时间: 5年前

内容简介: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)

以客户端为中心的一致性包含了四种子模型:

  1. 单调读一致性(Monotonic-read Consistency):如果一个进程读取数据项 x 的值,那么该进程对于 x 后续的所有读操作要么读取到第一次读取的值要么读取到更新的值。即保证客户端不会读取到旧值。

  2. 单调写一致性(Monotonic-write Consistency):一个进程对数据项 x 的写操作必须在该进程对 x 执行任何后续写操作之前完成。即保证客户端的写操作是串行的。

  3. 读写一致性(Read-your-writes Consistency):一个进程对数据项 x 执行一次写操作的结果总是会被该进程对 x 执行的后续读操作看见。即保证客户端能读到自己最新写入的值。

  4. 写读一致性(Writes-follow-reads Consistency):同一个进程对数据项 x 执行的读操作之后的写操作,保证发生在与 x 读取值相同或比之更新的值上。即保证客户端对一个数据项的写操作是基于该客户端最新读取的值。

三、共识算法(水平问题)

一致性问题是结果,共识是为达到这个结果所要经过的过程,或者说一种手段。

  1. 拜占庭错误。表示通过伪造信息进行恶意响应产生的错误。

  2. 非拜占庭错误。没有进行响应产生的错误

解决「 拜占庭错误 」的称作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协议

参考文章: 分布式系统:一致性模型

最终一致性的实现方式

分布式系统关注点——「共识」的兄弟「事务」

分布式系统关注点——通过“共识”达成数据一致性

近期文章:

5种分布式锁实现的对比?

Java并发编程学习体系

java8 Stream 史上最全总结

Java 网络编程"初探"

redis 知识点总结

java 核心技术学习总结 (一)

spring中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

请长按二维码,关注 乔志勇笔记

分布式数据一致性理解


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

个体与交互

个体与交互

Ken Howard、Barry Rogers / 贾永娜、张凯峰 / 机械工业出版社华章公司 / 2012-3-20 / 45.00元

对敏捷软件开发的关注重点,通常都集中在“机制”方面,即过程和工具。“敏捷宣言”认为,个体与交互的价值要高于过程和工具,但这一点很容易被遗忘。在敏捷开发中,如果你重新将注意力放在人的方面,将会收获巨大利益。 本书展示了如何解决敏捷团队在实际项目中遭遇的问题。同时,本书也是很有实用价值的敏捷用户指南,其中包含的故事、最佳实践方法、经验以及技巧均可应用到实际项目当中。通过逐步实践,你将学会如何让团......一起来看看 《个体与交互》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具