/grpclb

gRPC Client Side Load Balancer Resolver based on Etcd v3

Primary LanguageGoMIT LicenseMIT

grpclb

注册结构

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

服务注册

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

服务访问

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

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

测试

# 默认端口 2379
$ ./etcd

$ make test

$ ETCDCTL_API=3 ./etcdctl get --prefix=true ""

备注

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