L13·10^23 – 10^26

分布式架构

Distributed Systems

核心抽象共识 / 容错

多台机器协同工作,在不可靠的网络上构建可靠的系统。

学习进度:
What

分布式系统是一组独立计算机通过网络协作,对外呈现为单一连贯系统。核心挑战来自三大不确定性:节点可能故障(crash、Byzantine)、网络可能延迟或分区、时钟可能不同步。核心概念包括:CAP 定理(一致性 Consistency、可用性 Availability、分区容忍 Partition tolerance 三者最多满足其二)、共识算法(Paxos、Raft,在故障节点间达成一致)、复制策略(同步复制保证一致性,异步复制保证可用性)、分布式事务(2PC、3PC、Saga)、向量时钟(检测并发写入冲突)、一致性哈希(数据分片和负载均衡)。典型系统:ZooKeeper/etcd(协调服务)、Kafka(分布式消息)、Cassandra/DynamoDB(宽列存储)。

Why

单机有容量和可用性上限。当数据量或请求量超过单机能力,或需要跨地域部署以降低延迟,必须使用分布式架构。分布式系统通过冗余实现容错(一个节点故障不影响整体服务),通过分区实现水平扩展(增加节点提升容量)。但分布式引入了新问题:网络不可靠导致消息可能丢失或延迟;时钟不同步导致无法确定事件顺序;部分故障导致系统处于不一致状态。CAP 定理指出:在网络分区发生时,必须在一致性和可用性之间做出选择。

How

程序员通过分布式系统框架和中间件使用这些抽象。RPC 框架(gRPC、Dubbo)使远程调用像本地调用一样;服务发现(Consul、Nacos)帮助服务找到彼此;负载均衡(Nginx、Envoy)分散请求;熔断器(Hystrix、Sentinel)防止级联故障。理解分布式有助于理解:为什么微服务需要服务注册和发现(服务实例动态变化);为什么分布式锁如此复杂(网络分区时可能失效);为什么'精确一次'语义几乎不可能实现(至少一次 + 幂等是更务实的选择)。

Bottom-up:由下层如何构建

本层建立在以下层级之上:

Top-down:向上暴露什么接口

共识算法容错CAP 定理

Programmer View:程序员视角

我能操作吗?

通过 RPC 框架(gRPC/Dubbo)、消息队列(Kafka/RabbitMQ)、分布式协调服务(ZooKeeper/etcd)间接操作。云服务商提供托管的分布式服务(AWS DynamoDB、Google Spanner)。

成本模型

指标量级备注
同数据中心 RPC~0.5-2 ms千兆/万兆网络
跨数据中心 RPC~50-200 ms受光速约束
Raft 共识延迟~10-50 ms取决于节点数和网络延迟
分布式锁获取~5-20 msRedis/ZooKeeper 实现
数据同步复制取最慢节点延迟强一致的代价

常见陷阱

  • !网络分区处理:当网络分区发生时,系统必须在一致性和可用性间做出选择。盲目追求强一致会导致服务不可用
  • !时钟依赖:分布式系统中不能假设时钟同步。使用逻辑时钟(Lamport 时钟、向量时钟)替代物理时钟进行因果排序
  • !级联故障:一个服务的故障可能导致依赖它的服务也故障,最终雪崩。应使用熔断器、限流、降级策略防止级联故障