一.什么是服务发现
在微服务中,服务的消费方需要调用服务的生产方,这样服务的消费方就需要知道服务的消费方的网络地址(ip+端口号)。
二、流程
上图中服务实例本身并不记录服务生产方的网络地址,所有服务实例内部都会包含服务发现客户端(例如spring cloud中的ribbon)。
(1)在每个服务启动时会向服务发现中心上报自己的网络位置。这样,在服务发现中心内部会形成一个服务注册
表,服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库。
(2)服务发现客户端会定期从服务发现中心同步服务注册表 ,并缓存在客户端。
(3)当需要对某服务进行请求时,服务实例通过该注册表,定位目标服务网络地址。若目标服务存在多个网络地
址,则使用负载均衡算法从多个服务实例中选择出一个,然后发出请求。
三、相关概念
负载均衡:将用户请求(流量)通过一定的策略,分摊在多个服务实例上执行,分为服务端负载均衡和客户端负载均衡。
服务器端负载均衡:
在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡服务器按照某种配置好的规则(负
载均衡算法)从可用服务实例清单中选取其一去处理客户端的请求。这就是服务端负载均衡。
例如Nginx,通过Nginx进行负载均衡,客户端发送请求至Nginx,Nginx通过负载均衡算法,在多个服务器
之间选择一个进行访问。即在服务器端再进行负载均衡算法分配。
客户端服务负载均衡:
在客户端负载均衡器(例如ribbon)中维护一个可用的服务实例清单,在客户端请求发出之前,客户端负载均衡器(例如ribbon)按照某种配置好的规则(负
载均衡算法)从可用服务实例清单中选取其一去请求,这就是客户端负载均衡。