zero-contrib
zero-contrib copied to clipboard
Support service governance by polaris

对接策略
服务注册
提供注册函数,实现go-zero的函数接口,自动将服务和节点注册到北极星 type ( // RegisterFn defines the method to register a server. RegisterFn func(*grpc.Server) )
服务发现
提供resovler的实现,对接北极星polaris-go的getallinstances,获取服务下全部实例信息
路由、负载均衡、故障熔断
提供balancer的实现,新增picker,根据请求参数走路由和负载均衡,分别调用polaris-go的processRouter和processloadbalancer 同时增加pickResult的Done回调,进行调用结果上报,对接故障熔断
限流
限流能力的对接比较麻烦,主要存在以下2个问题:
- gozero当前封装了interceptor,无法传入外部的interceptor,所以没法再服务端进行拦截
- gozero提供了Breaker接口,但是Breaker并没有开放定制能力,没法通过外部定制来插入
对于 Breaker 的接入,go-zero 这里是不是可以考将 Breaker 的创建动作也作为一个 Option 入参,
func NewBreaker(supplier func() Breaker, opts ...Option) Breaker {
b := supplier()
for _, opt := range opts {
opt(b)
}
// if len(b.name) == 0 {
// b.name = stringx.Rand()
// }
// b.throttle = newLoggedThrottle(b.name, newGoogleBreaker())
return &b
}
我们可以约个时间沟通一下?
对接策略
服务注册
提供注册函数,实现go-zero的函数接口,自动将服务和节点注册到北极星 type ( // RegisterFn defines the method to register a server. RegisterFn func(*grpc.Server) )
服务发现
提供resovler的实现,对接北极星polaris-go的getallinstances,获取服务下全部实例信息
路由、负载均衡、故障熔断
提供balancer的实现,新增picker,根据请求参数走路由和负载均衡,分别调用polaris-go的processRouter和processloadbalancer 同时增加pickResult的Done回调,进行调用结果上报,对接故障熔断
注册发现应该是比较容易的,注册直接可以提供一个模块就好了,发现可以通过提供一个类似于现有 p2c 的方式注册进去就好了。
限流
限流能力的对接比较麻烦,主要存在以下2个问题:
- gozero当前封装了interceptor,无法传入外部的interceptor,所以没法再服务端进行拦截
- gozero提供了Breaker接口,但是Breaker并没有开放定制能力,没法通过外部定制来插入
我是有计划暴露中间件定制能力的,但是polaris的限流有何优势呢?
限流
限流能力的对接比较麻烦,主要存在以下2个问题:
- gozero当前封装了interceptor,无法传入外部的interceptor,所以没法再服务端进行拦截
- gozero提供了Breaker接口,但是Breaker并没有开放定制能力,没法通过外部定制来插入
我是有计划暴露中间件定制能力的,但是polaris的限流有何优势呢?
1、首先polaris的限流规则是动态的,可以从控制面下发最新的限流规则 2、限流可以按照流量标签进行控制 3、限流可以区分为单机限流、分布式限流 4、限流的效果具有快速失败以及匀速排队
现在的breaker只是自适应根据后面调用返回来熔断的,其实我觉得可以直接添加interceptor就好了,因为内置breaker可以充当外层保护,只有有问题时才会触发。
我们可以讨论讨论。
是的,我也觉得直接添加interceptor比较好,breaker语义更多还是做熔断降级
@kevwan 这边大概什么时候可以开放interceptor的注入?
已经啊
This issue is stale because it has been open for 30 days with no activity.
This issue was closed because it has been inactive for 14 days since being marked as stale.