ETCD服务注册与发现原理

服务注册原理

在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry),三者的交互关系请看下面这张图。

  • RPC Server 提供服务,在启动时,根据服务的编译和配置信息,向 Registry 注册服务,并向 Registry 定期发送心跳汇报存活状态。
  • RPC Client 调用服务,在启动时,根据配置文件的信息,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。
  • 当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地内存中缓存的服务节点列表。
  • RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

img_4.png

服务注册数据

名称英文示例类型
环境envdev环境变量
地区regionbeijing环境变量
可用区zonezone1环境变量
地址ip192.168.1.1环境变量
端口port8080环境变量
协议schemegRPC配置变量
权重weight100配置变量
部署组deploymentred配置变量
框架版本号frameVersion2.0编译变量
应用版本号appVersionahkfasgasdf编译变量
编译时间buildTime2020-10-14 10:00:00编译变量
启动时间startTime2020-10-14 11:00:00编译变量

通过这些信息,我们能够很方便的获得Provider的基本情况,并对他进行改变。例如可以调节流量比例、调度流量区域、灰度版本、排查应用的版本、编译时间、启动时间。

启动一个服务例子

example:

编译

  1. ~ etcdctl get "/ego" --prefix
  2. /ego/hello/providers/grpc://127.0.0.1:9003
  3. {
  4. "name":"hello",
  5. "scheme":"grpc",
  6. "address":"127.0.0.1:9003",
  7. "weight":100,
  8. "enable":true,
  9. "healthy":true,
  10. "region":"huabei",
  11. "zone":"ali-3",
  12. "kind":1,
  13. "deployment":"",
  14. "group":"",
  15. "metadata":{
  16. "appHost":"127.0.0.1",
  17. "appMode":"dev",
  18. "appVersion":"5c569c3a7427d3266cfd15f23b37f924f083b785-dirty",
  19. "buildTime":"2021-06-23 22:58:43",
  20. "egoVersion":"v0.5.8",
  21. "startTime":"2021-06-23 22:58:54"
  22. },
  23. }