什么是服务注册发现?
对于搞微服务的同学来说,服务注册、服务发现的概念应该不会太陌生。
简单来说,当服务A需要依赖服务B时,我们就需要告诉服务A,哪里可以调用到服务B,这就是服务注册发现要解决的问题。
Service B
把自己注册到Service Registry
叫做 服务注册Service A
从Service Registry
发现Service B
的节点信息叫做 服务发现
服务注册
服务注册是针对服务端的,服务启动后需要注册,分为几个部分:
- 启动注册
- 定时续期
- 退出撤销
启动注册
当一个服务节点起来之后,需要把自己注册到 Service Registry
上,便于其它节点来发现自己。注册需要在服务启动完成并可以接受请求时才会去注册自己,并且会设置有效期,防止进程异常退出后依然被访问。
定时续期
定时续期相当于 keep alive
,定期告诉 Service Registry
自己还在,能够继续服务。
退出撤销
当进程退出时,我们应该主动去撤销注册信息,便于调用方及时将请求分发到别的节点。同时,go-zero 通过自适应的负载均衡来保证即使节点退出没有主动注销,也能及时摘除该节点。
服务发现
服务发现是针对调用端的,一般分为两类问题:
- 存量获取
- 增量侦听
还有一个常见的工程问题是
- 应对服务发现故障
当服务发现服务(比如 etcd, consul, nacos等)出现问题的时候,我们不要去修改已经获取到的 endpoints 列表,从而可以更好的确保 etcd 等宕机后所依赖的服务依然可以正常交互。