首先,什么是一致性?

一致性是指分布式系统中多个节点为达到某一数值而达成的协议。

具体来说,可以分为强一致性和弱一致性。

  • 强一致性:所有节点的数据在任何时候都是相同的。同时,您应该得到节点A中的key1值和节点B中的key1值。

  • 弱一致性:无法保证所有节点在任何时候都拥有相同的数据,并且存在许多不同的实现。最广泛实现的是最终的一致性。所谓最终一致性,是指任何节点上的相同数据在任何时间都是相同的,但随着时间的推移,不同节点上的相同数据总是朝着收敛的方向变化。也可以简单理解为,经过一段时间后,节点之间的数据最终会达到一致状态。

分布式和一致的应用场景:

多节点提供读写服务,确保高可用性和可扩展性(ZooKeeper, DNS, redis集群)

分布式系统面临的问题:

  • 消息异步(asynchronous):真实的网络不是一个可靠的通道,存在消息延迟、丢失,以及节点间消息不能同步(synchronous)

  • node-fail-stop:节点继续崩溃并且无法恢复

  • 节点宕机恢复(fail- recovery):节点经过一段时间后恢复,在分布式系统中最为常见

  • 网络分区:网络链接有问题,将N个节点分成多个部分

  • 拜占庭故障(拜占庭故障)[2]:节点或宕机或逻辑故障,即使没有卡抛出干扰分辨信息

需要满足一致性的分布式系统设计的一般前提是不存在拜占庭一般问题(内部网可信)

本文介绍了分布式系统的基本理论FLP定理,即当只有节点宕机时,系统的可用性和强一致性不能同时满足。另一种观点是CAP理论,即强一致性、可用性和分区容错,其中只有两种可以保证。

有许多协议确保一致性,包括2PC, 3PC, Paxos, raft和PacificA。

2PC:

两阶段锁提交协议,保证多个数据片上操作的原子性。(分布式事务)

将节点分为协调者和参与者(participat),并将执行分为两个阶段。

  • 阶段1:协调器发起一个建议,询问是否接受每个参与者。参与执行事务操作,将撤销和重做信息写入事务日志,并向协调器回复是或否。

  • 阶段2:协调器根据参与者的反馈提交或终止事务。如果参与者的回答都是yes,则提交,只要参与者的回答是no。根据协调器的提交/回滚信息正式提交或终止事务,释放占用的资源并返回ack。

  1. 优点:原理简单,易于实现

  2. 缺点:同步阻塞,单点问题,数据不一致(协调员崩溃之前发送提交请求或网络原因共识不收到提交的一部分,那么参与者不能提交事务的一部分),过于保守(如果参与者在协调)如果有失败在沟通、协调器只能依靠超时机制来确定事务需要打断。

3PC:

3级锁提交协议,保证多个数据片上操作的原子性。(分布式事务)

相对于2PC,分为查询、预提交、提交3个阶段(解决阻塞,但仍有数据不一致的可能)

流程:在收到参与者的反馈(投票)后,协调器进入阶段2,并向每个参与者发送准备提交命令。参与者可以在收到提交指令后锁定资源,但要求回滚相关操作。在收到应答(ACK)后,协调器进入第三阶段并提交/中止。3PC的第三阶段与2PC的第二阶段没有什么不同。3PC也采用协调看门狗和状态记录。

Paxos算法(求解单点问题)

Paxos算法是目前最重要的一致性算法,所有的一致性算法都是Paxos或Paxos的简化版本。

Paxos算法会解析相同数据的多个值,以达成一个值的一致。证明正确性的理论基础:任何两个合法集合(包含超过一半节点的集合)的交集都不是空的。

性格:

在投票过程的提案中有三个作用:

  • Proposer:可能有多于一个提案人,并负责提出建议。

  • Acceptor:必须有多个收件人。他们对特定的提案进行投票,同意接受提案,或不同意。

  • Learner:学习者,收集各Acceptor接受的提案,按照少数多数的原则形成最终提案。

事实上,分布式系统中的一个组件可以对应一个或多个角色。

算法描述:

*第一阶段(准备阶段)

申请人:

  • 选择提案编号n,向大多数接受人发送编号n的准备请求。

受体:

  • 如果提案号n大于已经收到的提案号,提案人承诺不接受编号小于n的提案号。如果之前已经接受过提案号,则以已接受提案号中编号最高的提案号为已发送提案号。

  • 如果收到的提案号n小于它收到的提案号的最大数目。

*第二阶段(接受阶段)

申请人:

  • 首先,依次接收响应:

  • 如果收到拒绝,将不处理。

  • 如果你收到了“同意”,同时也收到了“接受人”已经接受的建议书,记下建议书和编号。

  • 处理完回应后,计算拒绝和同意的数量:

  • 如果大多数人拒绝,为下一个提案做准备。

  • 如果大多数人同意,从这些Acceptors接受的提案中选择提案号最大的提案作为提案,不使用自己的提案,逐个向Acceptor发送Accept消息。

受体:

  • 如果收到的提案编号n小于它收到的最大提案编号。

  • 如果收到的提案编号n等于它收到的最大提案编号,该提案将被接受。

  • 如果接收到的提案号n大于它接收到的最大提案号。

  • 形成共识(与准备和接受阶段平行)

受体:

  • 每当一个提案被接受,提案和编号就会被发送给学习者。

学习者:

  • 记录每个接受人当前接受的提案。如果Acceptor连续发送多个提案,则保留数量最大的提案。

  • 计算接受每个提案的接受人数。如果有一半以上的人被接受,就会形成共识。

本文 http://jiagoushi.pro/node/1385
讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】
公众号 【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
微信小号 【cea_csa_cto】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

QQ群 【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

视频号 【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

知识星球 向大咖提问,近距离接触,或者获得私密资料分享。

喜马拉雅 路上或者车上了解最新黑科技资讯,架构心得。 【智能时刻,架构君和你聊黑科技】
知识星球 认识更多朋友,职场和技术闲聊。 知识星球【职场和技术】
微博 【智能时刻】 智能时刻
哔哩哔哩 【超级架构师】

抖音 【cea_cio】超级架构师

快手 【cea_cio_cto】超级架构师

小红书 【cea_csa_cto】超级架构师

谢谢大家关注,转发,点赞和点在看。

「数据一致性」理解分布式系统中的一致性相关推荐

  1. 理解分布式系统中的缓存架构(下)

    承接上一篇<理解分布式系统中的缓存架构(上)>,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计常见问题以及解决方案,业界案例. 1. 分层缓存架 ...

  2. 深入理解分布式系统中的缓存架构(下)

    转载自   深入理解分布式系统中的缓存架构(下) 承接上一篇<理解分布式系统中的缓存架构(上)>,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计 ...

  3. redis实现轮询算法_白话分布式系统中的一致性哈希算法

    本文首发于:白话分布式系统中的一致性哈希算法 微信公众号:后端技术指南针 持续输出干货 欢迎关注! 通过本文将了解到以下内容:分布式系统的概念和作用 分布式系统常用负责均衡策略 普通哈希取模策略优缺点 ...

  4. 分布式系统中的一致性协议之两阶段提交协议(2PC)

    分布式系统中的一致性协议之两阶段提交协议(2PC) 两阶段提交协议是很常见的解决分布式事务的方式,他可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持 ...

  5. 理解分布式系统中的缓存架构(上)

    本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1. 缓存概述 缓存概述 2. 缓存的分类 缓存主要分为以下四类 缓存的分类 2.1 CDN缓存 基本介绍 CDN(Conte ...

  6. 深入理解分布式系统中的缓存架构(上)

    转载自   深入理解分布式系统中的缓存架构(上) 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2.1 CDN缓存 基本 ...

  7. docker运行linux桌面,「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例)...

    「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例) 更新日期:2021年01月15日 @IGNORECHANGE @WIP 问题描述 我们使用 Debian 发行版,但是某 ...

  8. 分布式系统中的一致性协议

    本文详细介绍目前分布式系统中常见的一些一致性协议:两阶段提交协议,三阶段提交协议,向量时钟,RWN协议,paxos协议,Raft协议.下面就一个个详细讲解下. 一. 两阶段提交协议(2PC) 两阶段提 ...

  9. 分布式系统中的一致性模型

    文章目录 什么是一致性模型? 强一致性模型 线性一致性(Linearizable Consistency) 顺序一致性(Sequential Consistency) 弱一致性模型 因果一致性(Cau ...

最新文章

  1. 真·机械朋克!物理学家用扬声器搭建神经网络,登上今日Nature
  2. oracle 删除补全日志组_浅谈Oracle 20c ASM文件组模板技术
  3. 限流算法(记录cyc大佬的专栏)
  4. Linux内核的启动过程分析
  5. requests库之处理响应
  6. python科学编程入门书_Python数据科学零基础一本通
  7. JavaScript 演练(8). 对象成员、类成员(原型、非原型)
  8. 为什么你说的话别人不愿意听?
  9. Eclipse 插件开发 资料贡献
  10. 34_注解的定义与反射调用
  11. BZOJ 2957 分块
  12. python 如果你的年龄大于18_02Python基础
  13. VTM10.0代码学习18:xCheckRDCostMerge2Nx2N()
  14. Unity调用打印机打印图片
  15. java负载均衡搭建_负载均衡环境搭建(nginx和tomcat)
  16. 在ubuntu用wget下载多个文件,axel多线程下载(多线程超级快)
  17. Cisco交换机下载IOS
  18. 与关系型数据库相比,MongoDB的优缺点
  19. 计算机网络的三级结构是什么,计算机的三级存储结构是什么
  20. K8S集群中网络通信故障常见问题的排查思路

热门文章

  1. 何为P2P技术?发展前景如何?
  2. 费马小定理、欧拉定理与扩展欧拉定理(含证明)
  3. 华为运维客户端SeoClient接收返回码错误
  4. 网页底部版权信息如何注明?
  5. 如何在WORD中插入可播放的视频
  6. 论文阅读汇总(3)-【篇数:50】
  7. Consider defining a bean of type ‘com.zsb.dao.UserDao‘ in your configuration.
  8. 代码分享 Python | 批量nc文件转tif
  9. Android读取联系人的姓名及电话号码
  10. 如何正确地写存储过程