Skip to content

分布式系统

更新: 7/23/2025 字数: 0 字 时长: 0 分钟

1. 什么是分布式系统

1.1. 定义

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。从外部看,这组计算机就像一个单一的、统一的系统。

1.2. 特点

  • 分布性:计算机节点在地理上是分散的。
  • 对等性:节点之间没有主从之分,都是对等的。
  • 并发性:多个节点上的程序可以并发执行。
  • 缺乏全局时钟:节点之间的时间同步存在误差。
  • 故障总是会发生:必须假设任何节点、网络都可能随时出现故障。

1.3. 优缺点

  • 优点
    • 高可用性:部分节点宕机,系统仍能提供服务。
    • 可扩展性:可以通过增加节点来线性地提升系统性能(水平扩展)。
    • 高性能:将任务分解到多个节点上,并行处理。
  • 缺点
    • 高复杂性:系统设计、开发、测试、运维都非常复杂。
    • 一致性问题:由于网络延迟和节点故障,维护数据在多个节点间的一致性非常困难。
    • 网络问题:严重依赖网络,网络分区或延迟会严重影响系统。

2. 核心分布式理论

2.1. CAP 定理

一个分布式系统最多只能同时满足以下三个特性中的两个。

  • 一致性 (Consistency):所有节点在同一时间具有相同的数据。
  • 可用性 (Availability):在任何时候,客户端的每个请求都能收到响应(不保证是最新数据)。
  • 分区容错性 (Partition Tolerance):系统在遇到任何网络分区故障时,仍然能够继续对外提供服务。

对于分布式系统而言,网络分区是必然会发生的,因此 P 是必须保证的。所以,设计分布式系统时,主要是在 CP (一致性/分区容错性)AP (可用性/分区容错性) 之间做权衡。

  • CP:放弃可用性,保证一致性。例如,当网络分区发生时,为了保证数据一致,节点会拒绝写操作,返回错误。
  • AP:放弃一致性,保证可用性。例如,当网络分区发生时,节点仍然可以处理请求,但可能返回旧数据,接受最终一致性。

2.2. BASE 理论

BASE 理论是 CAP 理论中 AP 方案的延伸,核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用 (Basically Available):系统在出现不可预知故障的时候,允许损失部分可用性。例如,响应时间上的损失,或功能上的损失(服务降级)。
  • 软状态 (Soft State):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性。
  • 最终一致性 (Eventually Consistent):系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

3. 核心技术

3.1. RPC (远程过程调用)

RPC 允许一台计算机上的程序调用另一台计算机上的程序,而程序员无需额外地为这个交互作用编程。

  • 常见框架:gRPC, Apache Dubbo, Apache Thrift。

3.2. 消息队列

消息队列是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。

  • 作用
    • 解耦:服务之间通过消息队列通信,无需直接调用。
    • 异步:将耗时的操作放入消息队列,由消费者异步处理,提高主流程响应速度。
    • 削峰:将瞬时的高并发请求放入消息队列,由消费者按照自己的处理能力平滑处理,防止系统被冲垮。
  • 常见产品:Kafka, RabbitMQ, RocketMQ。

3.3. 分布式事务

保证跨多个节点的操作要么全部成功,要么全部失败。

  • 常见方案
    • 2PC (两阶段提交):协议简单,但存在同步阻塞、单点故障、数据不一致等问题。
    • TCC (Try-Confirm-Cancel):业务侵入性强,需要手动实现 try, confirm, cancel 三个操作。
    • Saga 模式:长事务解决方案,将一个大事务拆分为多个本地事务,每个本地事务都有对应的补偿操作。
    • 本地消息表:基于消息队列实现的最终一致性方案。

3.4. 分布式锁

在分布式环境下,控制多个进程对共享资源的访问。

  • 实现方式
    • 基于数据库:利用数据库的唯一索引或排他锁。
    • 基于 Redis:使用 SETNX 命令或 Redisson 等成熟的客户端。
    • 基于 ZooKeeper:利用其临时有序节点特性。

3.5. 服务注册与发现

在微服务架构中,动态地管理服务的地址列表。

  • 流程
    1. 服务提供者启动时,将自己的地址注册到服务注册中心。
    2. 服务消费者查询服务注册中心,获取服务提供者的地址列表。
    3. 服务注册中心通过心跳机制检测服务提供者的健康状态,动态更新地址列表。
  • 常见组件:ZooKeeper, Eureka, Consul, Nacos。

贡献者

The avatar of contributor named as LI SIR LI SIR

页面历史