分布式理论|青训营笔记

122 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第8天

概述

分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同目标

优势

  • 去中心化
  • 低成本
  • 弹性
  • 资源共享
  • 可靠性高

劣势

  • 普遍的节点故障
  • 不可靠的网络
  • 异构的机器与硬件环境
  • 安全

系统模型

故障模型

uTools_1675434039854

uTools_1675434079653

拜占庭将军问题

拜占庭帝国在攻击敌方城堡时,在地方城堡外驻扎了多个军队,每个军队都有各自的将军指挥,将军们只能通过信使进行沟通。在观察敌情之后,他们必须制定一个共同的计划,如进攻或者撤退,只有当半数以上的军队都发起进攻才能取得胜利。然而这其中的一些将军可能是叛徒,就会阻止将军们达成一致的行动计划;另外,传递消息的信使也可能是叛徒,他们可以进行篡改和伪造消息或者不进行消息的传递。

共识和一致性

uTools_1675434275002

理论基础

CAP理论

CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

C:Consistency一致性

一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

A: Availability可用性

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。

P: Partition tolerance分区容错性

分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

ACID理论

ACID 理论是对事务特性的抽象和总结,方便我们实现事务。可以理解成:如果实现了操作的 ACID 特性,那么就实现了事务。

事务

事务可以看成是一个或者多个操作的组合操作,并且它对这个组合操作提供一个保证,如果这个组合操作之前的数据是一致的(即正确的),那么操作之后的数据也应该是一致的。不论这个组合操作执行的过程中,是否发生系统故障,还是在这个组合操作执行的过程中,是否与其他事务一起执行

四个特性:

  • A:Atomicity,原子性。
  • C:Consistency,一致性。
  • I:Isolation,隔离性。
  • D:Durability,持久性。

事务主要是通过ACID四个特性来实现的:

  • 一致性(C):一个事务能够正确地将数据从一个一致性的状态,变换到另一个一致性的状态。
  • 原子性(A):一个事务所有的操作,要么全部执行,要么就一个都不执行,即 all-or nothing。它可以让事务在出现故障等原因,导致不能全部执行成功时,将已经执行的部分操作,回滚到事务前的状态。
  • 隔离性(I):如果多个事务并发执行,那么执行结果和一个一个串行执行是一样的。它可以使事务在执行时,不会受到其他事务的影响。不过在实践中,由于考虑到性能的问题,一般都使用较弱一点的保证,我们在后续的课程中会专门讨论。
  • 持久性(D):如果一个事务已经提交,不论什么原因,它产生的结果都是永久存在的,它保证了事务的结果不会丢失。

  在四个特性中,一致性是对事务执行最终结果正确性的保证,它需要依赖事务的其他特性来协助完成。

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。