分布式理论

时间:2024-02-21 18:12:05
  • CAP理论:c指一致性是指“所有节点同时看到相同的数据”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,等同于所有节点拥有数据的最新版本。a指可用性是指“任何时候,读写都是成功的”,即服务一直可用,而且是正常响应时间。p指分区容忍性具体是指“当部分节点出现消息丢失或者分区故障的时候,分布式系统仍然能够继续运行”,即系统容忍网络出现分区,并且在遇到某节点或网络分区之间网络不可达的情况下,仍然能够对外提供满足一致性和可用性的服务。CAP 理论提醒我们不要把精力浪费在如何设计能满足三者的完美分布式系统上,而要合理进行取舍

    • 分布式系统所关注的,就是在 Partition Tolerance 的前提下,如何实现更好的 A 和更稳定的 C。CAP 理论中是忽略网络延迟的,也就是当事务提交时,节点间的数据复制一定是需要花费时间的。
    • cap证明:由于允许 P 的存在,则一定存在 Server 之间的丢包,如此则不能保证 C。
    • Consistency,一致性被称为原子对象,任何的读写都应该看起来是“原子”的,或串行的,写后面的读一定能读到前面写的内容,所有的读写请求都好像被全局排序;
    • Availability,对任何非失败节点都应该在有限时间内给出请求的回应(请求的可终止性);
    • Partition Tolerance,允许节点之间丢失任意多的消息,当网络分区发生时,节点之间的消息可能会完全丢失。
    • CP 架构:对于 CP 来说,放弃可用性,追求一致性和分区容错性。
    • AP 架构:对于 AP 来说,放弃强一致性,追求分区容错性和可用性,这是很多分布式系统设计时的选择最终一致性
  • Base 理论:即基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。Base 理论是在 CAP 上发展的

    • 基本可用:就是不追求 CAP 中的「任何时候,读写都是成功的」,而是系统能够基本运行,一直提供服务。
    • 软状态对应 ACID 事务中的原子性,在 ACID 的事务中,实现的是强制一致性,要么全做要么不做,所有用户看到的数据一致。原子性可以理解为一种“硬状态”,软状态则是允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
    • 最终一致性:在期限过后,应当保证所有副本保持数据一致性,也就是达到数据的最终一致性。
  • 时钟问题:分布式系统解决了传统单体架构的单点问题和性能容量问题,另一方面也带来了很多新的问题,其中一个问题就是多节点的时间同步问题: 没有全局时钟,绝对的内部一致性是没有意义的。逻辑时钟描绘了分布式系统中事件发生的时序,是为了区分现实中的物理时钟提出来的概念。节点间的交互要在事件的发生顺序上达成一致,而不是对于时间达成一致

  • 不同数据一致性模型:数据一致性模型可以分为强一致性和弱一致性,强一致性也叫做线性一致性,除此以外,所有其他的一致性都是弱一致性的特殊情况。在互联网领域的绝大多数场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。

  • 用户读到某一操作对系统数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。 最终一致性模型根据其提供的不同保证可以划分为更多的模型,包括因果一致性和会话一致性等。

  • 因果一致性:因果一致性要求有因果关系的操作顺序得到保证,非因果关系的操作顺序则无所谓。

  • 会话一致性:会话一致性将对系统数据的访问过程框定在了一个会话当中,约定了系统能保证在同一个有效的会话中实现“读己之所写”的一致性