1. 一致性(Consistency)

一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。

1.1 强一致性(Strict Consistency)

也称为:**原子一致性(Atomic Consistency)**线性一致性(Linearizable Consistency)

强一致性有两个要求:

  • 任何一次读都能读到某个数据的最近一次写的数据。
  • 系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。

简言之,在任意时刻,所有节点中的数据都是一样的。

例如,对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。

1.2 顺序一致性(Sequential Consistency)

the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program. - - Lamport

两个要求:

  • 任何一次读都能读到某个数据的最近一次写的数据。
  • 系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。

举个例子:

Write(x, 4):写入x=4 
Read(x, 0):读出x=0

1)图a是满足顺序一致性,但是不满足强一致性的。原因在于,从全局时钟的观点来看,P2进程对变量X的读操作在P1进程对变量X的写操作之后,然而读出来的却是旧的数据。但是这个图却是满足顺序一致性的,因为两个进程P1,P2的一致性并没有冲突。从这两个进程的角度来看,顺序应该是这样的:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2),每个进程内部的读写顺序都是合理的,但是这个顺序与全局时钟下看到的顺序并不一样。

2)图b满足强一致性,因为每个读操作都读到了该变量的最新写的结果,同时两个进程看到的操作顺序与全局时钟的顺序一样,都是Write(y,2) ,Write(x,4), Read(x,4) ,  Read(y,2)。

3)图c不满足顺序一致性,当然也就不满足强一致性了。因为从进程P1的角度看,它对变量Y的读操作返回了结果0。那么就是说,P1进程的对变量Y的读操作在P2进程对变量Y的写操作之前,这意味着它认为的顺序是这样的:Write(x,4) , Read(y,0) , Write(y,2), Read(x,0),显然这个顺序又是不能被满足的,因为最后一个对变量x的读操作读出来也是旧的数据。因此这个顺序是有冲突的,不满足顺序一致性。

1.3 弱一致性

数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。

最终一致性就属于弱一致性。

最终一致性

不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。

简单说,就是在一段时间后,节点间的数据会最终达到一致状态。

最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:

因果一致性(Casual Consistency)。如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问,遵守一般的最终一致性规则。

**“读己之所写(read-your-writes)”一致性。**当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。

**会话(Session)一致性。**这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。

**单调(Monotonic)读一致性。**如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。

**单调写一致性。**系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。


另外一种划分一致性级别的:

一致性是指从系统外部读取系统内部的数据时,在一定约束条件下相同,即数据变动在系统内部各节点应该是同步的。根据一致性的强弱程度不同,可以将一致性级别分为如下几种:

**  ①**强一致性(strong consistency)。任何时刻,任何用户都能读取到最近一次成功更新的数据。

**  ②**单调一致性(monotonic consistency)。任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。也就是说,获取的数据顺序必是单调递增的。

**  ③**会话一致性(session consistency)。任何用户在某次会话中,一旦读到某个数据在某次更新后的值,那么在本次会话中就不会再读到比这值更旧的值。会话一致性是在单调一致性的基础上进一步放松约束,只保证单个用户单个会话内的单调性,在不同用户或同一用户不同会话间则没有保障。示例case:php的session概念。

**  ④** 最终一致性(eventual consistency)。用户只能读到某次更新后的值,但系统保证数据将最终达到完全一致的状态,只是所需时间不能保障。
**  ⑤**弱一致性(weak consistency)。用户无法在确定时间内读到最新更新的值。

2. 共识(Consensus)

共识问题中所有的节点要最终达成共识,由于最终目标是所有节点都要达成一致,所以根本不存在一致性强弱之分。

例如,Paxos是共识(Consensus)算法而不是强一致性(Consistency)协议。共识算法没有一致性级别的区分。


3.线性化和可串行化的区别

读写操作的线性化与术语“原子一致性”同义,并且是Gilbert和Lynch 对CAP定理的证明中的 “C”或“一致性” 。我们说线性化是可组合的 (或“本地”),因为如果系统中每个对象的操作是可线性化的,那么系统中的所有操作都是可线性化的。

可串行性是ACID中的传统“I”或隔离。如果用户的事务各自保持应用程序的正确性(ACID中的“C”或一致性),则可序列化执行也保持正确性。因此,可串行化是一种保证数据库正确性的机制。

与线性化不同,可串行化本身不会对事务的排序施加任何实时约束。可序列化也是不可组合的。可串行化并不意味着任何类型的确定性顺序 - 它只需要存在一些等效的串行执行。

这些定义如此混乱的原因之一是线性化来自分布式系统和并发编程社区,可串行化来自数据库社区。如今,几乎每个人都使用分布式系统和数据库,这往往会导致过载的术语(例如,“一致性”,“原子”)。

4、zookeeper的一致性分析-单调一致性

很多文章和博客里提到,zookeeper是一种提供强一致性的服务,在分区容错性和可用性上做了一定折中,这和CAP理论是吻合的。但实际上Zookeeper提供的只是单调一致性。
原因
  1. 假设有2n+1个server,在同步流程中,leader向follower同步数据,当同步完成的follower数量大于 n+1时同步流程结束,系统可接受client的连接请求。如果client连接的并非同步完成的follower,那么得到的并非最新数据,但可以保证单调性,也就是说,可获取的数据顺序是单调递增的。
  2. 假设是follower接收到的写请求,则会转发给leader处理;leader完成两阶段提交的机制。向所有server发起提案,当提案获得超过半数(n+1)的server的ACK后,将对整个集群进行同步,超过半数(n+1)的server同步完成后,该写请求完成。如果client连接的并非同步完成follower,那么得到的并非最新数据,但可以保证单调性,也就是说,可获取的数据顺序是单调递增的。

用分布式系统的CAP原则来分析Zookeeper
(1)C: Zookeeper保证了最终一致性,在十几秒可以Sync到各个节点
(2)A: Zookeeper保证了可用性,数据总是可用的,没有锁.并且有一大半的节点所拥有的数据是最新的,实时的. 如果想保证取得是数据一定是最新的,需要手工调用Sync()
(3)P: 有2点需要分析的

  • 节点多了会导致写数据延时非常大,因为需要多个节点同步.
  • 节点多了Leader选举非常耗时, 就会放大网络的问题. 可以通过引入 observer节点缓解这个问题.

5、 结论

可以的出的结论是Zookeeper的一致性保证的是单调一致性,CAP原则中的C是强一致性。

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以关注+点赞,点击这里免费获取

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

JAVA核心知识点+1000道 互联网Java工程师面试题

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

题**

[外链图片转存中…(img-23wgg43U-1627005741855)]

[外链图片转存中…(img-q24KbZpX-1627005741855)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

2021年Java开发实战!mysql获取数据库名称相关推荐

  1. java开发_mysql中获取数据库表描述_源码下载

    功能描述: 在mysql数据库中,有两张表: data_element_config , test_table 我们需要获取表:test_table表的描述信息,然后把描述信息插入到表:data_el ...

  2. 2021年Java开发实战!java培训视频网站

    K8S:深入浅出Kubernetes(理论+实战) Kubernetes(k8s)是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌 ...

  3. 2021年Java开发实战!java开发安卓app的流程

    开篇闲扯 打工人,打工魂,我们生而人上人.当"资本主义"逐渐禁锢我们人(大)上(韭)人(菜)肉体的时候,那一刻我才明白那个日不落帝国·资本主义收割机·瑞民族之光幸·瑞幸咖啡是多么的 ...

  4. MySQL获取数据库每个表的行数

    这个问题的起因,是我要进行数据库数据的迁移,迁移后确定数据是否都迁移成功而遇到的. 对于数据库的迁移,我是使用MySQL官方的数据库管理工具MySQL Workbench完成的.源数据库和目标数据库都 ...

  5. mysql 获取数据库中最大的日期

    mysql 获取数据库中最大的日期 select DATE_FORMAT(max(over_time),'%Y-%m-%d') from 表名格式化参考 %a 缩写星期名 %b 缩写月名 %c 月,数 ...

  6. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  7. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  8. 解决微信小程序云开发模式无法获取数据库数据问题

    解决微信小程序云开发模式无法获取数据库数据问题 问题: 在数据库有两条数据,获取数据时输出窗口没有任何反应 错误原因: 检查数据库名字是否对应 检查你是否有多个云开发环境 如果有多个云开发环境,就需要 ...

  9. 优酷java_youtubie 仿优酷的视频网站,采用JAVA开发,支持Oracle数据库。主要功能包含注册登录, 上传 Jsp/Servlet 238万源代码下载- www.pudn.com...

    文件名称: youtubie下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 12657 KB 上传时间: 2015-04-23 下载次数: 1 详细说明:仿优酷的 ...

最新文章

  1. dns tunnel CC
  2. java web项目里ehcache.xml的参数说明
  3. Tomcat方面的知识点
  4. Spring 事务处理参数
  5. 程序猿段子_【新年新气象】今年,能为程序员男友做点什么?
  6. 大三时候实现的,关于大整数(超过long范围)加减乘除操作的头文件,并包含了实现RSA加解密的函数...
  7. 【搜索/推荐排序】FM,FFM,AFM,PNN,DeepFM:进行CTR和CVR预估
  8. ajax post 变options,关于ajax:JQuery POST请求转换为OPTIONS。 为什么?
  9. mysql事务-与pymyql的事务
  10. 伪样式:hover ,:active,:focus
  11. 通过Word 2016 发布的内容
  12. AgreementMaker:Efficient Matching for Large Real-World 翻译
  13. MySQL读写分离详解(二)——MyCAT实战配置
  14. Notepad++-第一篇命令行语句执行之编译、运行Java
  15. 空间两条直线的夹角公式(两向量的夹角公式)
  16. 支付宝即时到账在线语音音效生成器html源码
  17. 英语口语软件测试满分多少分,小学生英语口语测试评分标准
  18. 用esp8266开发板制作WiFi Killer
  19. authorized_key 不生效。
  20. IDU-指令译码单元

热门文章

  1. 市政协科技界委员视察生命珍宝公司结发钻石体验中心
  2. Android怎么自定义充电铃声,安卓手机充电提示音怎么改 Android设置换充电提示音教程...
  3. DVWA 之 Insecure CAPTCHA(不安全的验证码)
  4. Java 代码性能优化收录
  5. 一代计算机内存条,内存条DDR1到4分别有什么区别呢?
  6. map赋值+map遍历
  7. Python列表排序并得到原来对应的下标
  8. 王者荣耀如何修改服务器信息,王者荣耀定位怎么更改设置 修改定位方法推荐...
  9. 万亿物联网的投资逻辑
  10. Spring Boot事务管理详解