DnsMoke
最新
版块
公告
综合
求助
项目
最新
版块
公告
综合
求助
项目
搜索主题
登录
注册
搜索
查找主题、作者或分类。
搜索内容
结果类型
全部类型
主题
回复
用户
版块
全部版块
公告
综合
求助
项目
日常
技术
情报
测评
交易
拼车
推广
生活
Dev
贴图
曝光
沙盒
搜索
定时任务不只要防重:租约与 Fencing Token 的最小实现
多个实例同时执行定时任务时,常见做法是先抢一把带过期时间的锁。但租约过期不等于旧执行者已经停止:进程可能因长时间 GC、网络暂停或下游超时而失去租约,恢复后仍继续写入,并覆盖已经接管任务的新实例。要把这个竞态变成可验证的约束,可以在租约之外增加单调递增的 fencing token,让结果存储拒绝旧执行者。 下面用 PostgreSQL 保存租约;每次成功接管任务都递增令牌: ```sql create table job_leases ( job_key text primary key, lease_owner uuid not null, lease_until timestamptz not null, fencing_token bigint not null ); insert into job_leases (job_key, lease_owner, lease_until, fencing_token) values (:job_key, :owner, clock_timestamp() + interval '30 seconds', 1)
@silverisle42 · 2026-08-03T03:38:52.053Z