解决方案
Lease,正是基于主动型上报模式,提供的一种活性检测机制;
Lease,租约,顾名思义,是 client 和 etcd server 之间存在一个约定,内容是 etcd server 保证在约定的 TTL(有效期内),不会删除 Client 关联到此 Lease 上的 key-value;
若未在 TTL 内续租,那么 etcd server 就会删除 Lease 及其关联的 key-value;
原理简述
所示如图,是 Lease 模块的整体架构:
Lessor
etcd 在启动的时候,创建 Lessor 模块的时候,它会启动两个常驻 goroutine:
1)RevokeExpiredLease,定时检查 Lease 是否过期,并发起撤销过期的 Lease 操作;
2)CheckpointScheduledLease,定时触发更新 Lease 的剩余到期时间的操作;
Lessor 模块向 Client 提供如下接口:
1)Grant,表示创建一个 TTL 为指定秒数的 Lease,Lessor 会将 Lease 信息持久化存储在 boltdb 中;
2)Revoke,表示撤销 Lease 并删除其关联的数据;
3)LeaseTimeToLive,表示获取一个 Lease 的有效期、剩余时间;
4)LeaseKeepAlive,表示为 Lease 续期;
特性特征
TTL 为时间点,而非分钟或毫秒值;
应用场景
基于 Lease 的 TTL 特性,解决类似 Leader 选举、Kubernetes Event 自动淘汰、服务发现场景中故障节点自动剔除等问题;