为什么需要服务注册与发现
- 如下图,当 A用户服务调用B订单服务时,一般情况下会使用 httputils 请求 B服务的 IP:port (http://192.168.0.200:8080/xxx) 即可。但是当 B订单服务的网络信息(IP等)发生改变则A对应服务的代码配置也要做对应的修改,增加服务间的耦合性和运维部署的复杂性。
- 如下图, 当A用户服务调用B订单服务时,为了保证B服务(服务提供方)的高可用,我们会对B服务部署多份,然后通过NGINX 反向代理,提供统一的服务地址 。 我们需要根据每个B服务节点的信息,实时维护nginx stream config 非常的繁琐。
解决方案
如下图 当服务调用方调用某个服务的时候,可以通过服务名字去服务注册发现中心获取可用的服务,服务发现中心会从内存的服务列表获取所有可用的服务,然后负载均衡根据既定的规则选择一个服务将 HTTP 服务 ip port 返回给调用方。