Ribbon

北慕城南 提交于 2019-12-02 15:04:05

一:常见的负载均衡方式

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进行服务调用

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!