核心论点:客服 Agent 的分布式难题长得和 Web 服务不一样——LLM 调用秒级起步让并发模型彻底变形、多 Agent 并行让"部分失败"成为常态而非异常、锁保护的从"一行数据"变成"一段跨多次 LLM 调用的业务流程"。本系列讲的是这些老问题的新形态

分布式的老问题,在 Agent 里变了样

并发一高、单进程撑不住、得水平扩展,这是普通分布式常识。真正值得讲的是分布式的老问题在 Agent 里换了形态

  1. 锁保护的对象不再是一行数据,而是一次具体的纠纷协调实例——用 dispute:{conversation_id}:{order_id} 这个业务语义 key,互斥的是"某会话里某笔订单的那次协调"(事实收集→买方/卖方并行→仲裁,跨 3 次 LLM、秒级),防的是同一纠纷被并发触发两遍、烧两遍 LLM 还出两份矛盾裁决。这把细锁只活在纠纷协调器里——普通聊天路径只读幂等,无需此类去重锁;持有期=一次协调的执行时长(秒级),TTL 仅作进程崩溃兜底,跑完立即释放。
  2. 部分失败不是某个 HTTP 返回 500,而是"买方分析成功、卖方分析成功、仲裁却挂了"这种语义半成品
  3. 故障传播不是简单的服务不可达,而是共享的 LLM/向量库一抖动,所有 Agent 角色一起变慢或超时。

连"撑不住"的破法都不一样:Web 请求毫秒级返回、先顶不住 CPU;而 LLM 调用秒级起步,单进程的并发槽位被长耗时等待占死——先耗尽的是连接/线程池,CPU 可能才 20%。这些"老问题的新形态",才是本系列要拆的。

客服 Agent 的三重压力

压力 表现 分布式映射 和传统 Web 服务的区别
高并发 大促咨询峰值 水平扩展 → 状态如何在节点间一致 单次请求秒级而非毫秒级,并发槽位被长耗时 LLM 等待占死,先耗尽的是连接/线程池而非 CPU;更致命的是 LLM 响应时间方差极大(正常 2 秒、异常可能数十秒),一旦变慢,堆积请求反堵本可正常响应的调用,形成传统毫秒服务少见的超时雪崩
低延迟 用户等不得 并行调用 → 部分失败如何兜底 部分失败是"三个角色成功俩、仲裁挂了"的语义半成品,不是一个干净的 HTTP 500
多依赖 LLM/向量库/Redis/外部 API 依赖故障如何隔离、不雪崩 LLM/向量库是跨角色共享的单点热点,一抖则买方/卖方/仲裁全体变慢,故障沿角色链而非服务调用链传播

这三重压力叠加,正是传统分布式系统经典难题在 Agent 场景的投影——但每一项的破法和形态都和 Web 服务不同,这正是后续各章要拆的。

Shop-Agent 的分布式架构全景

本章只画支撑"三个新形态"的分布式机制:并行协调、分布式锁、依赖扇出。完整拓扑(含常规推理链路)留到对应章节展开。

纠纷场景

分布式锁

用户消息

编排层

纠纷协调

BuyerAgent

SellerAgent

MediatorAgent

Redis

LLM / 向量库 / 外部 API

对应三个新形态:纠纷协调并行调动 Buyer/Seller 再由 Mediator 裁决(低延迟→部分失败的"语义半成品")、协调前抢一把分布式锁防重复执行(高并发→"会话+订单"粒度的锁争抢,见《分布式锁——纠纷协调中的原子性保障》)、所有 Agent 共享 LLM/向量库/外部 API(多依赖→沿角色链的故障传播)。

关键指标:QPS、p99 延迟、可用性目标

  • QPS:决定要扩几个节点——但 Agent 扩容的触发器不是 CPU 水位,而是被长耗时 LLM 等待占死的并发槽位/连接池水位(呼应上文"破的位置不同");节点一多,"会话+订单"粒度的状态一致立刻成为问题。
  • p99 延迟:用户感知的"慢"由最慢那次依赖决定;并行调用把 p99 从"串行之和"压到"最慢之一",但越多并行依赖 = 越大故障面,必须处理"三个角色成功俩"的语义半成品式部分失败。
  • 可用性目标:比如 99.9%。要容忍的不只是节点随时挂掉,还有 LLM/向量库这类共享依赖的整体抖动(属故障隔离范畴,见多依赖与第 15 篇);而一旦网络分区发生,该保一致还是保可用,才是 CAP 要回答的——见下节。

CAP 在客服场景的实践:偏向 AP

客服对话不能"等一致"。Shop-Agent 在纠纷协调前会抢一把 Redis 分布式锁(key = dispute:{conversation_id}:{order_id},TTL 5 分钟——仅作进程崩溃兜底,正常流程跑完即释放,不会真持有那么久):

  • 抢到锁 → 正常协调;
  • 没抢到(锁已被同会话占用)→ 直接返回"处理中",而不是阻塞或重复执行。

这本质是一个 AP 选择:宁可暂时放弃强一致(同一时刻只允许一个协调流程),也要保住可用性与正确性。CP 系统在这种情况会宁可拒绝服务,对客服体验更糟。注意这把锁正是开头说的新形态①的落地——它保护的不是某行数据,而是一段持续数秒、跨 3 次 LLM 调用的协调流程,CAP 的取舍也因此发生在业务流程级而非存储级。

核心要点

  • 客服 Agent 的分布式难题不是"要不要上",而是老问题(锁 / 部分失败 / 故障传播)换了新形态。
  • 锁保护的是"一次具体的纠纷协调实例"而非"一行数据"、部分失败是"语义半成品"、故障沿角色链传播——都和 Web 服务不同。
  • 连"撑不住"的破法都不同:先耗尽的是被长耗时 LLM 等待占死的连接/线程池,而非 CPU。
  • 架构上编排层之下,以并行协调(纠纷)为主链路(见图),常规推理链路留待后续章节。
  • 客服场景在 CAP 上偏 AP:用分布式锁换可用性,宁可返回"处理中"也不阻塞。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐