租约Lease
你可能会说
两个调度实例不能同时跑同一份汇总;让一个实例限时持有,失联后过期,再由另一个接管。
带有明确有效期的临时持有权;持有者需定期续约,超时失效后其他节点方可安全接管。例如两个调度实例都能运行每日汇总任务,系统让其中一个先取得租约并在执行期间续租,另一个只能等待;持有者宕机后,租约过期,等待中的实例可以接管。租约只能决定谁有资格接管。旧持有者恢复后仍可能写入,因此每次接管还要得到更大的持有代次,也叫 fencing token(隔离令牌)。数据库或目标服务在真正写入时,用原子操作拒绝较小的旧代次。
也常被叫作租约机制
两个调度实例怎样避免同时执行同一任务
实例 A准备生成账单
实例 B也准备执行
重复任务风险可能执行两次
可观察证据两个实例都能看见同一计划
没有协调时,定时任务会重复执行。
租约用时间限制持有权
用续租和到期控制接管:没有协调时,两个调度实例都可能开始每日汇总。取得租约后只有当前持有者执行并持续续租;它宕机或失联后,等待中的实例必须等租约过期才能取得新租约接管。
改善要验证旧持有者风险:每次成功接管都取得更大的持有代次,数据库或目标服务在写入时原子比较并拒绝旧代次。暂停 A 至租约过期,让 B 接管后再恢复 A,确认 A 的旧写入被拒绝。
另一个场景:控制器选主:多个控制器都能更新同一批资源状态时,可以用租约选出当前领导者并持续续租;领导者失联后由新实例接管,同时用新的持有代次阻止旧领导者继续提交变更。
你可以这样告诉 AI Agent
让每日汇总任务使用租约:实例先取得限时持有权并在执行期间续租。租约过期后,接管者取得一个更大的持有代次,也叫 fencing token(隔离令牌)。数据库或目标服务在写入汇总结果时,用同一个原子操作拒绝小于当前代次的请求。暂停实例 A 至租约过期,让 B 接管并写入,再恢复 A;验收 A 的旧代次写入被拒绝,最终只接受 B 的结果。
延伸阅读 · 权威出处
快速练习