分布式系统
Distributed System
高级通用分布式系统(Distributed System)是多个通过网络通信的独立计算节点协同完成任务的系统。它能让网站跨机器分担流量、提高可用性,同时带来网络延迟、局部故障和数据协调问题。
你可能会说:「我想让网站用多台机器一起处理请求,一台出故障时其他机器还能接着工作。」
动手看看查订单时一台服务器掉线
1
用户打开订单页,查询请求先到流量入口。入口负责决定由哪台服务器处理。
要点分布式系统里会发生什么?
- 1
节点靠网络交换信息
你可以把节点理解成独立运行的服务进程或机器。比如两台应用服务器一起接收请求,它们之间、以及它们与数据库之间都靠网络通信;网络比进程内调用更慢,也可能中断。
- 2
一处故障不等于全部停机
一台服务器可能停了,另一台还在运行,所以你会遇到“部分可用”的状态。但多放一台机器不等于自动容错:请求能否转到健康节点,还取决于流量分配和故障检测。
- 3
共享状态需要约定规则
如果两台服务器都能修改同一笔订单,就要考虑同时写入、重复请求和读取旧数据。我们通常会借助数据库约束、事务或幂等设计,让结果符合产品预期,而不是指望请求只发生一次。
容易混淆的地方
分布式系统讲的是多个独立节点如何通过网络协作,不等于微服务:一个应用部署成多个实例,也会遇到分布式问题。它也不等于多实例部署;后者只是部署方式,是否能正确协作,还要看状态存放、故障处理和数据协调。
什么时候用
适合用
- 网站访问量超过单台服务器的处理能力,你想让多个应用实例分担请求,并安排故障时的流量切换。
- 做订单与通知功能时,订单服务把任务交给消息队列,由另一台机器上的消费者异步处理。
- AI 工具需要多个工作进程处理生成任务,你要协调任务领取、重试和结果保存。
不适合用
- 个人作品站点访问量很小、允许短时停机,先用单实例部署和定期备份,排查与维护都更直接。
- 只是想让一个页面同时执行几项互不阻塞的操作,用单机异步任务或多个进程即可,不必为此拆成跨机器系统。
练一练选一个答案,看看解释
你的订单网站从一台应用服务器扩到两台,两台都接收创建订单请求。用户因超时重试,出现重复订单。哪种处理最贴近分布式系统要解决的问题?
让 AI 帮你做复制给 AI Agent 直接用
请按分布式系统的场景设计订单创建流程:应用会部署多个实例,共用数据库,客户端可能因超时重试。请说明请求如何分配、如何用幂等标识避免重复订单,以及单个实例故障时请求如何继续处理;先给方案和风险,再写代码。