etcd client keepalive方法的作用

etcd的lease是一个非常有用的机制,主要作用是给特定的key附加一个过期时间。既然调用client.Put方法已经可以把key和lease进行关联,为什么有个keepalive方法呢?
仔细阅读该方法的文档,以及进行实验,明白了keepalive的作用是自动续期租约,即当前context没有被cacel或者timeout,这个lease会一直被续租。
实验代码

func main() {
    cli, err := etcd.GetCli()
    if err != nil {
        panic(err)
    }
    key := "/test/leader/hostname"
    ctx := context.TODO()
    lease, err := cli.Grant(ctx, 30)
    if err != nil {
        panic(err)
    }
    _, err = cli.Put(ctx, key, "abcd", clientv3.WithLease(lease.ID))
    if err != nil {
        panic(err)
    }
    _, err = cli.KeepAlive(ctx, lease.ID)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%x\n", lease.ID)
    select {}
}

在启动该程序之后,打开另一个窗口持续观察lease的过期时间

etcdctl lease timetolive 66d77fb9c1003ec0

会发现这个lease的ttl基本每隔几秒就会变为30s。
由此,验证了心中的疑惑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。