五厂面经真题集字节跳动面经高频字节真题分布式系统并发控制速答 · 约 5 分钟更新 2026-09-29

多 Agent 并行调同一个数据库,事务、锁、幂等和资源竞争怎么处理?

一句话结论

这是分布式系统老问题穿上Agent外衣。事务用Saga模式带补偿,锁用带过期的资源级租约,幂等靠操作带去重键,资源竞争通过按Agent分组的连接池配额解决。

先这样答

这是分布式系统老问题穿上 Agent 外衣。处理这些问题的核心是隔离单个 Agent 的影响。你需要针对四个维度分别给出处理方案。

针对事务问题,跨工具的多步操作采用 Saga 模式。Agent 执行的每一步操作都要携带补偿逻辑。系统不要指望依赖数据库的长事务。长事务会长时间占用资源。这会严重阻塞其他 Agent。针对锁的问题,系统采用带过期的资源级租约。Agent 获取并持有锁必须设定时间上限。租约超时后系统会自动释放锁。这种设计能防止 Agent 异常崩溃导致死锁。

针对幂等问题,Agent 发起的所有操作必须携带去重键。系统底层根据去重键校验当前请求的处理状态。Agent 发生重试时不会产生重复的副作用。针对资源竞争问题,系统通过连接池配额机制来解决。数据库连接严格按照 Agent 进行分组分配。每个 Agent 只能消耗属于自己的连接配额。这能有效防止单个 Agent 吃光全局连接。

面试官会怎么追问

  • 「为什么不要指望数据库长事务?」 Agent 的操作通常涉及跨工具调用。多步操作的整体耗时较长。长事务会长时间占用数据库底层资源。其他 Agent 的并发操作会被阻塞。

  • 「Agent 崩溃后持有的锁怎么处理?」 系统采用带过期的资源级租约机制。Agent 持有锁的时间具有明确上限。租约到期后系统会自动回收资源。其他 Agent 随后可以正常申请该锁。

  • 「怎么防止异常 Agent 耗尽数据库连接?」 系统按 Agent 分组配置连接池配额。每个 Agent 只能在自身配额范围内获取连接。单个 Agent 达到配额上限后无法获取新连接。这能保护其他 Agent 的正常连接请求。

回答的坑

  • 试图为 Agent 引入复杂的数据库长事务机制。
  • 忘记提连接池按 Agent 分组隔离,把资源竞争等同于数据行锁冲突。
—— 本题完 ——