You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
kratos/doc/wiki-cn/warden.md

1.8 KiB

背景

我们需要统一的rpc服务,经过选型讨论决定直接使用成熟的跨语言的gRPC。

概览

  • 不改gRPC源码,基于接口进行包装集成trace、log、prom等组件
  • 打通自有服务注册发现系统discovery
  • 实现更平滑可靠的负载均衡算法

拦截器

gRPC暴露了两个拦截器接口,分别是:

  • grpc.UnaryServerInterceptor服务端拦截器
  • grpc.UnaryClientInterceptor客户端拦截器

基于两个拦截器可以针对性的定制公共模块的封装代码,比如warden/logging.go是通用日志逻辑。

warden拦截器

服务发现

gRPC暴露了服务发现的接口resolver.Resolverwarden/resolver/resolver.go实现了该接口,并基于了pkg/naming/naming.go内的Resolver接口进行Fetch``Watch等操作。

pkg/naming/discovery/discovery.go内实现了pkg/naming/naming.go内的Resolver接口,使用discovery来进行服务发现。

注意:pkg/naming/naming.go内的Resolver接口是kratos的一层封装,暴露的接口主要:

  • 相对原生resolver.ResolverResolveNow更友好的方法Fetch``Watch
  • 统一应用的实例信息结构体naming.Instance

想要用非discovery的请参考下面文档进行开发。

warden服务发现

负载均衡

实现了wrrp2c两种算法,默认使用p2c

warden负载均衡

扩展阅读

warden快速开始 warden拦截器 warden负载均衡 warden基于pb生成 warden服务发现


文档目录树