分布式架构学习(二)-分布式一致性,CAP,BASE理论介绍

Scroll Down

分布式架构学习(二)-分布式一致性,CAP,BASE理论介绍

分布式一致性

什么是分布式一致性?

分布式数据一致性,指的是数据在多份副本中存储时,各副本中的数据是一致的。

副本一致性

分布式系统当中,数据往往会有多个副本。如果是一台数据库处理所有的数据请求,那么通过ACID四原则,基本可以保证数据的一致性。而多个副本就需要保证数据会有多份拷贝。这就带来了同步的问题,因为我们几乎没有办法保证可以同时更新所有机器当中的包括备份所有数据。 网络延迟,即使我在同一时间给所有机器发送了更新数据的请求,也不能保证这些请求被响应的时间保持一致存在时间差,就会存在某些机器之间的数据不一致的情况。

image-20200630190532772

总得来说,我们无法找到一种能够满足分布式系统所有系统属性的分布式一致性解决方案。因此,如何既保证数据
的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。于是,一致性级别由此
诞生

一致性分类

1.强一致性

这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大,并且强一致性实现难度大

2.弱一致性

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

3.读写一致性

用户读取自己写入结果的一致性,保证用户永远能够第一时间看到自己更新的内容,不保证其他用户能看到该更新内容

解决方案:
方案1:一种方案是对于一些特定的内容我们每次都去主库读取。 (问题主库压力大)
方案2:我们设置一个更新时间窗口,在刚刚更新的一段时间内,我们默认都从主库读取,过了这个窗口之后,我们会挑
选最近有过更新的从库进行读取
方案3:我们直接记录用户更新的时间戳,在请求的时候把这个时间戳带上,凡是最后更新时间小于这个时间戳的从库都
不予以响应。

4.单调读一致性

本次读到的数据不能比上次读到的旧,因为在从库复制数据的时候,用户可能这次请求分发到已经复制完成的数据库上,下次请求又分发到了未完成复制的数据库上,导致数据时有时无

5.因果一致性

指的是:如果节点 A 在更新完某个数据后通知了节点 B,那么节点 B 之后对该数据的访问和修改都是基于 A 更新后的值。于此同时,和节点 A 无因果关系的节点 C 的数据访问则没有这样的限制。

6.最终一致性

最终一致性是所有分布式一致性模型当中最弱的。可以认为是没有任何优化的“最”弱一致性,它的意思是说,我不考虑所有的中间状态的影响,只保证当没有新的更新之后,经过一段时间之后,最终系统内所有副本的数据是正确的。它最大程度上保证了系统的并发能力,也因此,在高并发的场景下,它也是使用最广的一致性模型。

分布式理论-CAP理论

CAP理论的核心是:一个分布式系统不能同时满足一致性(C:consistency),可用性(A:availability)和分区容错性(P:partition tolerance)这三个需求,最多只能满足其中两项。

一致性

在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。

可用性

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果

我们必须在是在用户可接受的时间内,返回用户可接受的结果,而不是查询几分钟或者是过了返回一个error异常,这样的都可以认为是系统暂时不可用

分区容错性

系统在遇到一些节点或者网络分区故障的时候,仍然能够提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

image-20200701025346273

放弃CAP中的某一项结论
放弃P(分区容错性)分区容错性是分布式系统的基本要求,如果需要放弃分区容错性,一种简单的做法就是将数据都放置在一个分布式节点上,这样可以避免绝大多数的网络分区导致的负面影响
放弃A(可用性)一旦发生网络故障或者其他故障时,用户访问时则需要等待一定的时间,此段时间内系统无法对外提供正常的服务
放弃C(一致性)这里放弃一致性并非是完全舍弃数据一致性,否则数据就没有意义了,而是放弃数据的强一致性,保留数据的最终一致性,承诺数据最终都会达到一个一致的状态。

分布式理论-BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent (最终一致性)三个短语的简写

BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)

基本可用

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用。

  • 响应时间上的损失:正常情况下,一个在线搜索引擎需要在 0.5 秒之内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。

  • 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

弱状态

弱状态也称为软状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

最终一致性

最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

总结

BASE 理论面向的是大型高可用可扩展的分布式系统,和传统事务的 ACID特性是相反的,它完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。