从零理解分布式系统的核心概念、架构设计与挑战
所有计算在一个"超级计算机"中完成
多台普通计算机协同工作
CAP 定理指出:分布式系统不可能同时满足以下三个特性:
优先保证一致性
案例:ZooKeeper、HBase
优先保证可用性
案例:Cassandra、Eureka
负载均衡分发
找到目标节点
发送请求数据
可能出现丢包/延迟
某台机器宕机
多节点状态不同
自动重试请求
切换到备用节点
返回处理结果
如何唯一标识每个节点?
如何找到系统中的其他节点?
谁来协调大家的行动?
节点之间如何通信?
如何知道某个节点挂了?
节点恢复后如何同步状态?
所有操作按全局时钟顺序执行,读一定能读到最新写入的值。开销最大,但最安全。
所有节点看到的操作顺序一致,但不要求与全局时钟一致。性能较好。
只保证有因果关系的操作顺序一致,没有因果关系的可以乱序。平衡了一致性和性能。
允许暂时不一致,但经过一段时间后最终会达到一致。Redis、Cassandra 等采用此模型。
一个主节点写,多个从节点读
数据分散到多个节点
分布式事务的经典方案
分布式事务的补偿方案
多节点协同
对外呈现单一系统
CAP 权衡
一致性 vs 可用性
网络不可靠
节点会故障
冗余 + 重试
+ 选举 + 共识
记住这句话:"分布式系统的艺术,就是在不可靠的组件上构建可靠的系统。"