背景
我们需要统一的rpc服务,经过选型讨论决定直接使用成熟的、跨语言的gRPC。
概览
- 不改gRPC源码,基于接口进行包装集成trace、log、prom等组件
- 打通自有服务注册发现系统discovery
- 实现更平滑可靠的负载均衡算法
拦截器
gRPC暴露了两个拦截器接口,分别是:
grpc.UnaryServerInterceptor
服务端拦截器grpc.UnaryClientInterceptor
客户端拦截器
基于两个拦截器可以针对性的定制公共模块的封装代码,比如warden/logging.go
是通用日志逻辑。
服务发现
warden
默认使用direct
方式直连,正常线上都会使用第三方服务注册与发现中间件,warden
内包含了discovery的逻辑实现,想使用如etcd
、zookeeper
等也可以,都请看下面文档。
负载均衡
实现了wrr
和p2c
两种算法,默认使用p2c
。