分布式系统的一致性与共识算法(四)

Etcd与Raft算法

Raft保证读请求Linearizability的方法:

  • 1.Leader把每次读请求作为一条日志记录,以日志复制的形式提交,并应用到状态机后,读取状态机中的数据返回(一次RTT、一次磁盘写)
  • 2.使用Leader Lease,保证整个集群只有一个Leader,Leader接收到请求后,记录下当前的commit index为read index,当apply index大于等于read index后,则可以读取状态机中的数据返回(0次RTT、0次磁盘写)
  • 3.不适用Leader Lease,而是当Leader通过以下两点保证整个集群中只有其一个正常工作的Leader:
    3.1 在每个Term开始时,由于新选出的leader可能不知道上一个Term的commit index,所以需要先在当前新的Term提交一条空操作的日志;
    3.2 Leader每次接到读请求后,向多数节点发送心跳确认自己的Leader身份。之后的读流程与Leader Lease的做法相同。(一次RTT、0次磁盘写)
  • 4.从Follower节点读:Follower先向Leader询问read index,Leader收到Follower的请求后依然要通过2或3中的方法确认自己Leader的身份,然后返回当前的commit index作为read index,Follower拿到read index后,等待本地的apply index大于等于read index后,即可读取状态机中的数据返回(2次或1次RTT、0次磁盘写)

Linearizability和Serializability

Serializability是数据库领域的概念,而Lineaizability是分布式系统、并发编程领域的东西,在这个分布式SQL时代,自然Linearizability和Serializability会经常一起出现。

  • 1.Serializability:数据库领域的ACID中的I.数据库的四种隔离级别,由弱到强分别是Read Uncommited, Read Committed(RC),Repeatable Read(RR)和Serializability
    Serializability的含义是:对并发事务包含的操作进行调度后的结果和某种把这些事务一个接一个的执行之后的结果一样。最简单的一种调度实现就是真的把所有的事务进行排队,一个个的执行,显然这满足Serializability,问题就是性能。可以看出Serializability是与数据库事务相关的一个概念,一个事务包含多个读、写操作,这些操作又涉及到多个数据对象。
  • 1.Linearizability:针对单个操作,单个数据对象而说的,属于CAP中C这个范畴。一个数据被更新后,能够立马被后续的读操作读到
  • 2.Strict Serializability:同时满足Serializability和Linearizability

举个最简单的例子:两个事务T1,T2,T1先开始,更新数据对象o,T1提交。接着T2开始,读数据对象o,提交。以下两种调度:

  • 1.T1,T2,满足Serializability,也满足Linearizability
  • 2.T2,T1,满足Serializability,不满足Linearizability,因为T1之前更新的数据T2读不到

因果一致性Causal Consistency

因果一致性,属于弱一致性,因为在Causal Consistency中,只对有因果关系的事件有顺序要求。
没有因果一致性时会发生如下情形:

  • 1.夏侯铁柱在朋友圈发表状态:“我戒指丢了”
  • 2.夏侯铁柱在同一条状态下评论"我找到了"
  • 3.诸葛建国在同一条状态下评论"太棒了"
  • 4.远在美国的键盘侠看到"我戒指丢了" “太棒了”,开始喷诸葛建国
  • 5.远在美国的键盘侠看到"我戒指丢了" “我找到啦” “太棒了”,意识到喷错人了。
    所以很多系统采用因果一致性系统来避免这种问题,例如微信的朋友圈就采用了因果一致性

最终一致性Eventual Consistency.

最终一致性这个词大家听到的次数应该是最多的,也是弱一致性,不过因为大多数场景下用户可以接受,应用也就比较广泛。
理念:不保证在任意时刻任意节点上的同一份数据都是相同的,但是随者事件的迁移,不同节点上的同一份数据总是在向趋同的方向变化。
简单说,就是在一段时间后,节点间的数据会最终达到一致状态。不过最终一致性的要求非常低,除了向Gossip这样明确以最终一致性为卖点的协议外,包括Redis主备、MongoDB、乃至MySQL热备都可以算是最终一致性,甚至如果我记录操作日志,然后在副本故障了100天之后手动在副本上执行日志以达成一致,也算是符合最终一致性的定义。有人说最终一致性就是没有一致性,因为没人可以知道什么时候算是最终。
上面提到的因果一致性可以理解为是最终一致性的变种,如果进程A通知进程B它已经更新了一个数据项,那么进程B的后续访问将返回更新后的值,并且写操作将被保证取代前一次写入。和进程A没有因果关系的C的访问将遵循正常的最终一致性规则。

最终一致性其实分支很多,以下都是它的变种:

  • 1.Causal Consistency(因果一致性)
  • 2.Read-your-writes Consistency(读自己所写一致性)
  • 3.Session Consistency(会话一致性)
  • 4.Monotonic Read Consistency(单调读一致性)
  • 5.Monotonic Write Consistency(单调写一致性)
    后面要提到的BASE理论中的E,就是Eventual Consistency最终一致

ACID理论

ACID是处理事务的原则,一般特指数据库的一致性约束,ACID一致性完全与数据库规则相关,包括约束,级联,触发器等。在事务开始之前和事务结束以后,都必须遵守这些不变量,保证数据库的完整性不被破坏,因此ACID中的C表示数据库执行事务前后状态的一致性,防止非法事务导致数据库被破坏。比如银行系统A和B两个账户的余额总和为100,那么无论A,B之间怎么转换,这个余额和是不变的,前后一致的.
这里的C代表的一致性:事务必须遵循数据库的已定义规则和约束,例如约束、级联和触发器。因此,任何写入数据的数据都必须有效,并且完成的任何事务都会该笔那数据库的状态。没有事务可以创建无效的数据状态。注意,这与CAP定理中定义的一致性是不同的。
ACID可以翻译为酸,相对应得是碱,也就是BASE.不过提BASE之前要先说下CAP,毕竟,BASE是基于CAP理论提出的折中理论

CAP理论

CAP理论中的C也就是我们常说的分布式系统中的一致性,更确切地说,指的是分布式一致性中地一种:也就是前面说地线性一致性(Linearizability)也叫做原子一致性(Atomic Consistency).
CAP理论也是个被滥用地词汇,很多时候我们会用CAP模型去评估一个分布式系统,但是CAP模型却有一定的局限性。因为按照CAP理论,很多系统MongoDB、ZooKeeper既不满足(线性一致性),也不满足可用性(任意一个工作中的节点都要可以处理请求),但这并不意味着它们不是优秀的系统,而是CAP定理本身的局限性(没有考虑处理延迟,容错等)

BASE理论

正因为CAP中的一致性和可用性是强一致行和高可用,后来又有人基于CAP理论提出了BASE理论,即基本可用(Basicly Available)、软状态(Soft State)、最终一致性(Eventual Consistency).BASE的核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方法来使系统达到最终一致性。显然最终一致性弱于CAP中的线性一致性。很多分布式系统都是基于BASE中的"基本可用"和"最终一致性"来实现的,比如MySQL/PostgreSQL Replication异步复制

ACID一致性与CAP一致性的区别.

在这里插入图片描述

ACID一致性使有关数据库规则,如果数据表结构定义一个字段值是唯一的,那么一致性系统将解决所有操作中导致这个字段值非唯一的情况,如果带有一个外键的一行记录被删除,那么其外键相关记录也应该被删除,这就是ACID一致性的意思。
CAP理论的一致性是保证同样一个数据在所有不同服务器上的拷贝i都是相同的,这是一种逻辑保证,而不是物理,因为光速限制,在不同服务器上这种复制是需要时间的,集群通过阻止客户端查看不同节点上还未同步的数据维持逻辑视图。

当跨分布式系统提供ACID是,这两个概念会混淆在一起,Google’s Spanner System能够提供分布式系统的ACID,其包含ACID+CAP涉及,也就是两阶段提交2PC+多副本复制机制

ACID/2PC/3PC/TCC/Paxos关系

ACID是处理事务的原则,限定了原子性、一致性、隔离性、持久性。ACID、CAP、BASE这些都只是理论,只是在实现时的目标或者折中,ACID专注于分布式事务,CAP和BASE是分布式通用理论。
解决分布式事务有2PC、3PC、TCC等方式,通过增加协调者来进行协商,里面也有最终一致的思想。
而Paxos协议与分布式事务并不是同一层面的东西,Paxos用于解决多个副本之间的一致性问题。比如日志同步,保证各个节点的日志一致性,选主的唯一性。简而言之,2PC用于保证多个数据分片上事务的原子性,Paxos协议用于保证同一个数据分片在多个副本的一致性,所以两者可以是互补的关系,不是替代关系。对于2PC协调者单点问题,可以利用Paxos协议解决,当协调者出现问题时,选一个新的协调者继续提供服务,原理上Paxos和2PC相似,但目的上是不同的,etcd中也有事务的操作,比如迷你事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Flask-RESTful构建RESTful API

文章目录 安装Flask-RESTful导入模块和类创建一个资源类运行应用测试API总结 Flask是一个轻量级的Python web开发框架,而Flask-RESTful是一个基于Flask的扩展,专门用于构建RESTful API。它提供了一些帮助类和方法,使构建API变得更加简单和高效…

详细分析Vue3中的reactive(附Demo)

目录 1. 基本知识2. 用法3. Demo 1. 基本知识 reactive 是一个函数,用于将一个普通的 JavaScript 对象转换为响应式对象 当对象的属性发生变化时,Vue 会自动追踪这些变化,并触发相应的更新 Vue2没有,而Vue3中有,为啥…

公司邮箱是什么?公司邮箱和个人邮箱有什么不同?

公司邮箱是企业用来收发邮件的专业版电子邮箱,不同于个人邮箱的简单功能和有限的存储空间,公司邮箱的功能更加丰富,能够满足企业的日常办公和协作需求。本文将为您详细讲解公司邮箱和个人邮箱的区别,以供您选择更适合自己的邮箱类…

嵌入式——C51版本Keil环境搭建

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 目标搭建流程下载与安装激活STC环境添加校验是否导入STC环境 目标 ● 了解C51版本Keil开发环境的概念和用途 ● 掌握C51版本Keil环…

2024年NOC大赛创客智慧(西瓜创客)Python复赛编程真题模拟试卷包含答案

NOC复赛python模拟题 1.编写一个程序,提示用户输人一个矩形的长度和宽度,并输出其面积, 2.试计算在区间 1 到 n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如在 1到11 中,即在 1,2,3.45,6.7,8.9,10,11 中,数字 1出现了 4 次.…

鸿蒙生态融合进行时!菊风启动适配HarmonyOS NEXT,赋能原生应用实时

​​今日话题 鸿蒙HarmonyOS NEXT 自华为公开宣布鸿蒙 HarmonyOS NEXT 系统以来,该系统受到了业内广泛关注,和以往鸿蒙系统不同的是该系统底座完全由华为自研,摒弃了 Linux 内核和安卓 AOSP 代码,仅兼容鸿蒙内核及鸿蒙系统的应用…

Leetcode---1.两数之和 (详解加哈希表解释和使用)

文章目录 题目 [两数之和](https://leetcode.cn/problems/two-sum/)方法一:暴力枚举代码方法二:哈希表代码 哈希表哈希表的基本概念哈希函数(Hash Function):冲突(Collision):链地址…

windows驱动开发-PCI讨论(一)

前面描述中断的时候,我们曾经多次体积PCI,甚至提供了一些PCI的相关知识,但是整个PCI是一个很大的体系,专门记录这个体系超出了这个系列的范畴,有兴趣的可以到PCI官网了解详细的情况。 但是还是会花费一些时间讨论PCI技…

Pytorch入门实战 P10-使用pytorch实现车牌识别

目录 前言 一、MyDataset文件 二、完整代码: 三、结果展示: 四、添加accuracy值 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 本周的学习内容是&#xff0…

国网698.45报文解析工具

本文分享一个698.45协议的报文解析工具,此报文解析工具功能强大,可以解析多种国网数据协议。 下载链接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取码: y1de 主要界面如下: 本工具内置698.45数据协议, 即可调用word…

win编写bat脚本启动java服务

新建txt,编写,前台启动,出现cmd黑窗口 echo off start java -jar zhoao1.jar start java -jar zhoao2.jar pause完成后,重命名.bat 1、后台启动,不出现cmd黑窗口,app是窗口名称 echo off start "名…

美团小程序mtgsig1.2逆向

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

VMware虚拟机没有网,无法设置网络为桥接状态

今天需要使用Ubuntu18但现有虚拟机是Ubuntu20,由于硬盘空间不够大,所以删除了原来的虚拟机并重新搭建Ubuntu18的环境,然后发现虚拟机没有网络,而我之前的虚拟机这一切都是正常的。 在网络设置里勾选的是桥接模式但无法联网&#x…

Cow Exhibition G的来龙去脉

[USACO03FALL] Cow Exhibition G - 洛谷 曲折经过 爆搜 一开始没什么好的想法&#xff0c;就针对每头奶牛去or不去进行了爆搜。 #include <cstdio> #include <algorithm> using namespace std;#define maxn 405 int iq[maxn], eq[maxn]; int ans; int n;void d…

留学资讯 | 2024英国学生签证申请需要满足哪些条件?

英国移民局于2020年9月10日发布了《移民规则变更声明: HC 707》&#xff0c;对学生签证制度进行了全面改革。该法案于2020年10月5日正式生效。根据此法案&#xff0c;新的学生签证——The Student and Child Student Routes学生和儿童学生路线&#xff0c;将替代原先的Tier 4学…

短视频赛道有哪些:成都鼎茂宏升文化传媒公司

短视频赛道有哪些&#xff1a;探索多元化的内容领域 随着科技的飞速发展和人们生活节奏的加快&#xff0c;短视频已成为现代人生活中不可或缺的一部分。它以其简短、直观、易于分享的特点&#xff0c;迅速占领了各个年龄层和社会群体的心智。然而&#xff0c;短视频的赛道并非…

层次式体系结构概述

1.软件体系结构 软件体系结构可定义为&#xff1a;软件体系结构为软件系统提供了结构、行为和属性的高级抽象&#xff0c;由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构&#xff0c;并…

小程序框架是智能融媒体平台构建的最佳线路

过去5年&#xff0c;媒体行业一直都在进行着信息化建设向融媒体平台建设的转变。一些融媒体的建设演变总结如下&#xff1a; 新闻终端的端侧内容矩阵建设&#xff0c;如App新闻端&#xff0c;社交平台上的官方媒体等新闻本地生活双旗舰客户端&#xff0c;兼顾主流媒体核心宣传…

TopOn 正式聚合Kwai 旗下程序化广告平台——Kwai Network

**我们非常高兴的宣布&#xff0c;TopOn SDK 近日已正式聚合Kwai Network。**作为Kwai 旗下的程序化广告平台&#xff0c;Kwai Network 通过优质的变现能力及产品能力&#xff0c;为广大开发者提供高效及时的服务。 TopOn 聚合平台与Kwai Network 正式完成接入后&#xff0c;开…

实战+代码!Selenium + Phantom JS爬取天天基金数据

功能&#xff1a; 通过程序实现从基金列表页&#xff0c;获取指定页数内所有基金的近一周收益率以及每支基金的详情页链接。再进入每支基金的详情页获取其余的基金信息&#xff0c;将所有获取到的基金详细信息按近6月收益率倒序排列写入一个Excel表格。 思路&#xff1a; 1.…