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。
由此,验证了心中的疑惑。

你可能感兴趣的:(etcd client keepalive方法的作用)