题目
多个 Worker 如何领取任务、共享状态并避免重复执行?
答案
任务领取需要原子操作,例如数据库条件更新或队列的可见性机制。领取后记录 Worker、租约到期时间和状态版本,并定期续租。

租约过期后可以重新分配,但旧 Worker 可能仍在运行。使用单调递增的 fencing token 或所有权版本,要求状态存储和受控下游拒绝旧执行者提交;并非只加一个分布式锁就足够。
队列通常可能重复投递,业务动作仍需稳定幂等键。提交结果时校验任务状态与版本,成功后再按队列语义确认消费;中途崩溃则通过记录和业务查询恢复。
共享状态放在持久化存储中,避免只存在某台 Worker 内存。外部系统不支持 fencing 时,仍要依靠其幂等、条件更新或人工核对处理重复风险。
