一:常见的负载均衡方式
1:服务端负载均衡:独立进程单元,通过负载均衡策略,将请求转发到不同的执行的单元,比如Ngnix
2:客户端负载均衡:将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护一个服务提供者的信息列表,有了信息列表通过负载均衡策略将请求分摊到多个服务提供者,从而实现负载均衡。比如Ribbon。
二:Ribbon有两种使用方式,一是和RestTemplate结合(没仔细看),一是和Feign结合,feign默认继承了ribbon,因此开发的时候推荐使用这种方式)
主要包含的组件:
ServerList,负载均衡使用的服务器列表。这个列表会缓存在负载均衡器中,并定期更新。它会保存Eureka Server中注册的服务实例表。
ServerListFilter,服务器列表过滤器。这是一个接口,主要用于对Service Consumer获取到的服务器列表进行预过滤,过滤的结果也是ServerList。Ribbon提供了多种过滤器的实现。
IPing,探测服务实例是否存活的策略。
IRule,负载均衡策略,其实现类表述的策略包括:轮询、随机、根据响应时间加权等
ILoadBalancer,负载均衡器。Ribbon的负载均衡由LoadBalanceClient实现,而LoadBalanceClient具体交给ILoadBalancer处理,ILoadBalancer也是一个接口,Ribbon 为其提供了多个实现,比如默认采用的 ZoneAwareLoadBalancer。而上层代码通过调用其 API 进行服务调用的负载均衡选择。一般ILoadBalancer 的实现类中会引用一个IRule。
RestClient,服务调用器。顾名思义,这就是负载均衡后,Ribbon向Service Provider 发起REST请求的工具。
三:Ribbon 工作时会做四件事情
优先选择在同一个Zone且负载较少的Eureka Server;
定期从Eureka server更新并过滤服务实例列表;
根据用户指定的策略,在从Server取到的服务注册列表中选择一个实例的地址;
通过RestClient进行服务调用
来源:https://blog.csdn.net/weixin_42331540/article/details/102777792