服务发现
Table of Contents
1. client-side 服务发现
当向服务端发起请求时,客户端向服务注册中心查询后端服务的地址列表(注册中心知道所有服务的实例地址)。
- 服务启动时向注册中心注册实例地址;
- 客户端向服务端发起请求时,向注册中心查询后端服务地址列表;
- 客户端做 Load balance(选择一个后端实例);
2. server-side 服务发现
- 服务启动时向注册中心注册实例地址;
- 客户端向服务器发起请求时,向路由器(或者负载均衡器)发出请求
- 路由器(router)向注册中心查询后端实例地址;
- 路由器(基于某种策略)选择一个后端地址发出请求;
AWS 的 ELB 就是一个 router,在一些集群方案中,Kubernetes 是通过在集群中的每个机器中都运行一个代理(kube-proxy)来负责服务发现和触达。
路由器必须支持必要通信协议(HTTP、gRPC、Thrift等),除非他是基于 TCP 的 router。
3. 服务注册中心(registry)
registry 是一个服务的数据库,包括实例和位置。服务实例在启动时注册(register),关闭时注销(deregister)。服务的客户端和 路由器从这里查询可用的服务地址。注册中心可能会调用服务实例健康检测来验证是否能够处理请求。