项目作者: DavadDi

项目描述 :
gRPC Client Side Load Balancer Resolver based on Etcd v3
高级语言: Go
项目地址: git://github.com/DavadDi/grpclb.git
创建时间: 2018-09-05T02:25:57Z
项目社区:https://github.com/DavadDi/grpclb

开源协议:MIT License

下载


grpclb

注册结构

  1. // ServerNodeInfo regiested to etcd
  2. type ServerNodeInfo struct {
  3. Name string // 服务名称
  4. Version string // 服务版本号,用于服务升级过程中,配置兼容问题
  5. HostName string // 主机名称
  6. Addr string // 服务的地址, 格式为 ip:port,参见 https://github.com/grpc/grpc/blob/master/doc/naming.md
  7. Weight uint16 // 服务权重
  8. LastUpdateTime time.Time // 更新时间使用租约机制
  9. MetaData string // 后续考虑替换成 interface{} 推荐 json 格式,服务端与客户端可以约定相关格式
  10. }

服务注册

gRPC Server 启动的时候调用 Register 函数进行服务相关信息注册。注册过程需要使用 TLL 机制,保证服务信息因异常情况下失效。

服务访问

gRPC 使用 LoadBanlance 中的 resover 使用注册的服务信息。首次连接的时候进行全量拉取,后续采用 Watcher 的方式来进行增删,为保证可靠性,设置定期拉取 Sync 的过程。

通过自定义 gRPC esover 的方式,保证对于 gRPC 服务端访问时的透明性。

测试

  1. # 默认端口 2379
  2. $ ./etcd
  3. $ make test
  4. $ ETCDCTL_API=3 ./etcdctl get --prefix=true ""

备注

由于 glide 管理包依赖过程中存在问题, vendor 目录部分代码经过了手工调整。