-
Notifications
You must be signed in to change notification settings - Fork 786
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal: 对接 etcd 配置中心 | etcd As Config Center #1140
Comments
Using |
这里我是想实现一个长期的配置监听, |
应该要有一个退出时的一个处理,可以考虑增加一些细节 |
那就监听停止信号,用 |
配置项的 Key 值可以加点描述,还有默认的 prefix 是不是使用 kitexConfig 更好 |
已将默认值设置为 |
这个还是有点模糊。举个具体的例子,我有2个服务 A、B,A要请求B的Echo方法,那么对应的超时、重试配置在 etcd 里存储的路径是什么呢? |
好的,我觉得可以参考 nacos,存储在"rpc_timeout", "retry", "circuit_break", "limit"下,用于指定配置类型,超时、重试、熔断、限流 |
和 nacos 还是不一样,建议你在本机实际搭一个单机版 etcd,用 etcdctl 命令写一个超时配置进去,你才能理解我上面的问题:「完整的路径是什么」,前缀,服务(client, server)名称,类型,还要考虑允许用户自定义(参考 nacos 的 template) |
目标
基于本文描述的配置存储参考规范:
配置存储参考规范
根据 [etcd官方提供的Go语言客户端库clientv3],配置以键值对的形式存储,每个配置项都有一个对应的键(Key)和值(Value)。配置数据存储在etcd的分布式键值存储空间中。
## 客户端配置
超时:Category=rpc_timeout
配置信息格式为 JSON,其 Schema 为
说明:
例如:Echo 方法链接超时 50ms、请求超时 1s,其他方法连接超时 100ms、请求超时 2s
注:Kitex 只区分连接超时和读写超时,因此只需要指定两个字段即可。
重试:Category=retry
配置信息格式为 JSON,其 Schema 为
说明:
例如:Echo 方法启用备用请求(200ms后未返回则发出),其他请求都默认失败重试3次
注:retry.Container 内置支持用 * 通配符指定默认配置(详见 [getRetryer](https://github.com/cloudwego/kitex/blob/v0.5.1/pkg/retry/retryer.go#L240) 方法)
熔断:Category=circuit_break
配置信息格式为 JSON,其 Schema 为
注:
例如:Echo 方法使用下面的配置(0.3、100),其他方法使用全局默认配置(0.5、200)
注:kitex 的熔断实现目前不支持修改全局默认配置(详见 [initServiceCB](https://github.com/cloudwego/kitex/blob/v0.5.1/pkg/circuitbreak/cbsuite.go#L195))
服务端
限流:Category=limit
配置信息格式为 JSON,其 Schema 为 [limiter.LimiterConfig](https://github.com/cloudwego/kitex/blob/develop/pkg/limiter/item_limiter.go#L33)
例如:最大100并发 && 每 100ms 内最大 2000QPS
注:
动态配置
在这个 demo 中我们启动了一个循环,通过
client.Watch()
方法来监听指定键的变化。当配置发生变化时,我们会收到相应的事件通知,我们可以根据事件的类型进行相应的处理。参考
The text was updated successfully, but these errors were encountered: