分布式系统的定义
分布式系统是由多个通过网络互联的独立计算机(节点)组成的集合,这些节点通过协调和通信共同完成一项或一组任,在用户看来就像一个统一的系统。
分布式系统模型
同步模型:假设网络延迟、进程执行时间都有一个已知的上限。这简化了算法设计,但现实系统很少能够满足
异步模型:不对时间做任何假设。消息延迟可能无限长,进程执行可能无限慢。这是最苛刻的模型,在此模型下能实现的算法最具鲁棒性
部分同步模型:现实中最常见的模型。系统大部分时间是同步的,但是偶尔会变得异步。大多数实际算法(例如:Paxos,Raft)都基于此模型
核心理论与定理
CAP定理
分布式系统领域最著名的,由Eric Brewer提出。
C-一致性:所有节点在同一时刻看到的数据都是相同的。
A-可用性:每个请求都能收到一个(非错误)响应,但不保证数据是最新的。
P-分区容错性:系统在遭遇网络分区时仍能继续运行。
CAP定理指出:存在网络分区的情况下,一个系统无法同时保证一致性和可用性。这意味着你必须在C和A之间做出权衡:
CP系统:当发生网络分区时,为了保证数据一致性,系统会拒绝部分请求,从而牺牲可用性。
AP系统:当发生网络分区时,为了保证可用性,系统会返回可能过期的数据,从而系统一致性。
CA系统:通常指单点数据库或通过特殊硬件/网络避免分区的系统,在分布式场景中很难实现。
综上:“三选二”是CAP的简化。在现实中,P总是存在的,所以你的选择其实是在P发生时的策略(保C还是保A)。
BASE理论
BASE是对CAP定理中AP方案的实践补充,它描述了大多数现代互联网系统所追求的状态。
BA-基本可用:系统出现故障时,允许损失部分功能或相应时间变长,但核心功能仍然可用。
S-软状态:允许系统中的数据存在中间状态,并且这个状态不会立即可用于其他节点,即允许数据存在短暂的不一致。
E-最终一致性:经过一段时间(通常很短)的无更新操作后,系统最终所有副本的数据会达成一致。
BASE与ACID形成鲜明对比,是NoSQL运行的重要理论基础。
FLP不可能原理
这是一个更深奥但根本性的结论。
结论:在异步模型的分布式系统中,即使只有一个进程可能崩溃,也没有任何确定性算法能够总是达成共识。
含义:这是一个“不可能”的结果。它告诉我们,在最坏情况下,我们无法设计出一个总能达成共识的完美算法。
现实意义:实际的共识算法(如:Paxos,Raft)通过增加一些假设(如领导者选举、随机超时)来绕开FLP,从而在现实中“几乎总是”能达成共识。
共识算法
这是解决分布式系统核心“协调”问题的关键技术。
Paxos
Raft
ZAB
关键技术与概念
复制:将数据拷贝到多个节点,以提高可用性和可靠性。分为主从复制、多主复制、无主复制
分区/分片:将大数据拆分成小块,分不到不同节点上,以解决单机存储瓶颈问题
一致性模型:
强一致性:线性一致性、顺序一致性
弱一致性:不保证立即可见
最终一致性:弱一致性的特例,保证在没有新更新时最终一致。
容错与故障检测:如何发现节点故障并快速恢复
租约与锁:分布式环境中实现互斥访问的机制
分布式事务:如何保证跨多个节点的操作具有ACID特性。常用方案有2PC、3PC、TCC、Saga等。