先这样答
这是分布式系统老问题穿上 Agent 外衣。处理这些问题的核心是隔离单个 Agent 的影响。你需要针对四个维度分别给出处理方案。
针对事务问题,跨工具的多步操作采用 Saga 模式。Agent 执行的每一步操作都要携带补偿逻辑。系统不要指望依赖数据库的长事务。长事务会长时间占用资源。这会严重阻塞其他 Agent。针对锁的问题,系统采用带过期的资源级租约。Agent 获取并持有锁必须设定时间上限。租约超时后系统会自动释放锁。这种设计能防止 Agent 异常崩溃导致死锁。
针对幂等问题,Agent 发起的所有操作必须携带去重键。系统底层根据去重键校验当前请求的处理状态。Agent 发生重试时不会产生重复的副作用。针对资源竞争问题,系统通过连接池配额机制来解决。数据库连接严格按照 Agent 进行分组分配。每个 Agent 只能消耗属于自己的连接配额。这能有效防止单个 Agent 吃光全局连接。
面试官会怎么追问
-
「为什么不要指望数据库长事务?」 Agent 的操作通常涉及跨工具调用。多步操作的整体耗时较长。长事务会长时间占用数据库底层资源。其他 Agent 的并发操作会被阻塞。
-
「Agent 崩溃后持有的锁怎么处理?」 系统采用带过期的资源级租约机制。Agent 持有锁的时间具有明确上限。租约到期后系统会自动回收资源。其他 Agent 随后可以正常申请该锁。
-
「怎么防止异常 Agent 耗尽数据库连接?」 系统按 Agent 分组配置连接池配额。每个 Agent 只能在自身配额范围内获取连接。单个 Agent 达到配额上限后无法获取新连接。这能保护其他 Agent 的正常连接请求。
回答的坑
- 试图为 Agent 引入复杂的数据库长事务机制。
- 忘记提连接池按 Agent 分组隔离,把资源竞争等同于数据行锁冲突。
同系列的题