从Paxos到Zookeeper 分布式一致性原理与实践(一)

匿名 (未验证) 提交于 2019-12-02 23:51:01

1、分布式一致性问题

  假设客户端C1将系统的K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间才能读取到。-------数据库之间复制的延迟问题。

  数据复制需求:1、为了增加系统的可用性,以防止单点故障引起的系统不可用。2、提高系统的整体性能,通过负载均衡技术,能够让分布在不同地方的数据副本都能够为用户提供服务。

  所谓分布式一致性问题,是指分布式环境中引入数据复制机制后,不同数据节点间可能出现的,并无法依靠计算机应用程序自身解决的数据不一致情况。简单地讲,数据一致性就是指在对一个副本进行更新的同时,必须确保也能够更新其他副本,否则不同副本之间的数据将不再一致。

  影响性能的解决方法:将写入动作阻塞,直到数据复制完成后,才完成写入。但性能急剧下降。

  如何保证数据一致性,又不影响系统运行的性能,是每个分布式系统需要重点考虑和权衡的。于是,一致性级别由此诞生:

    1、强一致性:要求系统写入什么,读取出来也会是什么,用户体验好,但性能影响较大。

    2、弱一致性:约束系统在写入成功后,不承诺立即读到写入的值,也不承诺多久之后数据达到一致,但会尽可能地保证到某个时间级别(如秒级)后,数据能够达到一致状态,弱一致性还可以再分: 

      会话一致性:该一致性级别只保证对于写入的值,在同一个客户端会话中可以读取到一致的值,但其他会话不能保证。

      用户一致性:该一致性只保证对于写入的值,在同一个用户可以读到一致的值,其他用户不能保证。

    3、最终一致性:弱一致性的特例,系统会保证在一定时间内,能够达到一个数据一致性的状态。

  分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

  特征:

    分布性

    对等性,数据副本和服务副本

    并发性

    缺乏全局时钟

    故障总是会发生

  分布式环境的问题:

    通信异常

    网络分区

    三态,成功、失败、超时

    节点故障

  ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

  原子性:事务的原子性是指事务必须是一个原子的操作单元,要么全部执行成功,要么全部不执行。

  一致性:数据库执行前后,数据库必须处于一致性状态

  隔离性:一个事务的执行,不能被其他的事务干扰。

  

4、事务级别:

  未授权读取(未提交但被读到)、授权读取(读已提交),可重复读取和串行化。

  可重复读:保证事务在处理过程中,多次读取到同一个数据时,其值和事务开始时刻是一致的,因此该事务级别禁止了不可重复读和脏读,但是可能出现幻影数据,如事务B在第一次操作时读取到1,但是在下一次事务操作中,即使事务B采用同样方式,可能会读取到10或20。

  串行化:最严格的事务隔离级别。它要求所有事务都被串行执行,即事务只能一个接一个地进行处理,不能并发执行。

  幻读:例如事务 T1 对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务 T2 又对这个表中插入了一行数据项为“1”的数据,并且提交给数据库。而操作事务 T1 的用户如果再查看刚刚修改的数据,会发现数据怎么还是 1?其实这行是从事务 T2 中添加的,就好像产生幻觉一样,这就是发生了幻读。比如,小编准备提取你打赏的一分钱,提取完了,这时又有其他热心网友打赏了一分钱,小编一看,明明已经取出了,怎么又有一分钱!?小编此时以为像做梦一样,我觉得也可以叫「梦读」,哈哈。幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

5、分布式事务

概念:分布式事务是指事务的参与者,支持事务的服务器,资源服务器以及事务管理器分别位于分布式系统的不同节点之上。通常一个分布式事务会涉及对多个数据源或业务系统的操作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!