Etcd租约续期的问题
---------------
最近在用Etcd做服务注册和发现的时候发现了一些问题,一直没有头绪,希望各位大佬给点建议,下面直接上代码(逻辑代码已删除)
```golang
resp, err := sdk.client.Grant(context.TODO(), 60)
if err != nil {
log4.Info(" createServerInfo %s Grant error [%v]", pull_path, err)
return err
}
_, err = sdk.client.Put(context.TODO(), pull_path, string(data), etcd.WithLease(resp.ID))
if err != nil {
log4.Info("createServerInfo %s Put error [%v]", pull_path, err)
return err
}
ctx, cancelFunc := context.WithCancel(context.TODO())
ch, err := sdk.client.KeepAlive(context.TODO(), resp.ID)
if err != nil {
log4.Info(" createServerInfo %s KeepAlive error [%v]", pull_path, err)
return err
}
```
我对`KeepAlive`返回的channel做了监听,如果channel关闭会重新注册该路径,但是做压测是时候发现,在服务注册量很大的时候(>1W+),这个channel会一直频繁被关闭,导致服务一直重新注册~ 请问大家有什么解决办法嘛
最近在用Etcd做服务注册和发现的时候发现了一些问题,一直没有头绪,希望各位大佬给点建议,下面直接上代码(逻辑代码已删除)
```golang
resp, err := sdk.client.Grant(context.TODO(), 60)
if err != nil {
log4.Info(" createServerInfo %s Grant error [%v]", pull_path, err)
return err
}
_, err = sdk.client.Put(context.TODO(), pull_path, string(data), etcd.WithLease(resp.ID))
if err != nil {
log4.Info("createServerInfo %s Put error [%v]", pull_path, err)
return err
}
ctx, cancelFunc := context.WithCancel(context.TODO())
ch, err := sdk.client.KeepAlive(context.TODO(), resp.ID)
if err != nil {
log4.Info(" createServerInfo %s KeepAlive error [%v]", pull_path, err)
return err
}
```
我对`KeepAlive`返回的channel做了监听,如果channel关闭会重新注册该路径,但是做压测是时候发现,在服务注册量很大的时候(>1W+),这个channel会一直频繁被关闭,导致服务一直重新注册~ 请问大家有什么解决办法嘛
...全文
相关推荐
rust-etcd:Rust的etcd客户端库
**租约管理**:etcd中的租约(Lease)机制可以为键值设置生存时间(TTL),rust-etcd提供了创建、续租和撤销租约的接口。4.
etcd实战及其原理分析.pdf
- 功能丰富:etcd提供了租约(Lease)、稳定的watch、多版本并发控制(MVCC)等功能,弥补了ZooKeeper的一些不足。
etcd中文文档
这个部分通常会涵盖API的使用、错误处理、最佳实践和常见问题解答。**搭建本地集群**在本地搭建 etcd 集群是学习和测试 etcd 功能的关键步骤。
etcd v3.0.14
**租约(Leases)**:在 v3.0.14 中,引入了租约机制,允许为键设置过期时间。这可以用于实现心跳检查,服务自动注销,以及提高数据的动态性。5.
ETCD V3 java 完整例子
提供了一个租约(Lease)系统,可以为键值对设置过期时间。


其他技术讨论专区
