跳到正文

分布式系统

Distributed System

高级通用

分布式系统(Distributed System)是多个通过网络通信的独立计算节点协同完成任务的系统。它能让网站跨机器分担流量、提高可用性,同时带来网络延迟、局部故障和数据协调问题。

你可能会说:「我想让网站用多台机器一起处理请求,一台出故障时其他机器还能接着工作。」

读之前建议先了解(这是一个高级概念)

动手看看

查订单客户端流量入口服务器A服务器B
1

用户打开订单页,查询请求先到流量入口。入口负责决定由哪台服务器处理。

要点

  1. 1

    节点靠网络交换信息

    你可以把节点理解成独立运行的服务进程或机器。比如两台应用服务器一起接收请求,它们之间、以及它们与数据库之间都靠网络通信;网络比进程内调用更慢,也可能中断。

  2. 2

    一处故障不等于全部停机

    一台服务器可能停了,另一台还在运行,所以你会遇到“部分可用”的状态。但多放一台机器不等于自动容错:请求能否转到健康节点,还取决于流量分配和故障检测。

  3. 3

    共享状态需要约定规则

    如果两台服务器都能修改同一笔订单,就要考虑同时写入、重复请求和读取旧数据。我们通常会借助数据库约束、事务或幂等设计,让结果符合产品预期,而不是指望请求只发生一次。

容易混淆的地方

分布式系统讲的是多个独立节点如何通过网络协作,不等于微服务:一个应用部署成多个实例,也会遇到分布式问题。它也不等于多实例部署;后者只是部署方式,是否能正确协作,还要看状态存放、故障处理和数据协调。

什么时候用

适合用

  • 网站访问量超过单台服务器的处理能力,你想让多个应用实例分担请求,并安排故障时的流量切换。
  • 做订单与通知功能时,订单服务把任务交给消息队列,由另一台机器上的消费者异步处理。
  • AI 工具需要多个工作进程处理生成任务,你要协调任务领取、重试和结果保存。

不适合用

  • 个人作品站点访问量很小、允许短时停机,先用单实例部署和定期备份,排查与维护都更直接。
  • 只是想让一个页面同时执行几项互不阻塞的操作,用单机异步任务或多个进程即可,不必为此拆成跨机器系统。

练一练

你的订单网站从一台应用服务器扩到两台,两台都接收创建订单请求。用户因超时重试,出现重复订单。哪种处理最贴近分布式系统要解决的问题?

让 AI 帮你做

请按分布式系统的场景设计订单创建流程:应用会部署多个实例,共用数据库,客户端可能因超时重试。请说明请求如何分配、如何用幂等标识避免重复订单,以及单个实例故障时请求如何继续处理;先给方案和风险,再写代码。

接下来学什么