分布式数据一致性理解

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

内容简介: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中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

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

分布式数据一致性理解


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

查看所有标签

猜你喜欢:

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

金融数量分析

金融数量分析

郑志勇 / 北京航空航天大学出版社 / 2014-7-1 / CNY 58.00

《金融数量分析——基于MATLAB编程(第3版)》一书中的案例均来源于作者的工作实际,并充分体现“案例的实用性、程序的可模仿性”,程序中附有详细的注释。例如,投资组合管理、KMV模型计算、期权定价模型与数值方法、风险价值VaR的计算等案例程序,读者可以直接使用或根据需要在源代码的基础上修改、完善。 本书共23章。前两章分别对金融市场的基本概况与MATLAB的基础知识进行概述;接下来为20个金......一起来看看 《金融数量分析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具