1. Ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者列表后,Ribbon就可以基于某种负载均衡算法,自动地帮助服务消费者去请求。
只需给RestTemplate添加@loadBalanced注解,就可为RestTemplate整合Ribbon,使其具备负载均衡的能力。
2. Ribbon配置自定义
Spring Cloud Edgware允许使用Java代码或属性自定义Ribbon的配置,两种方式是等价的。同时,可以将配置作用于指定的Ribbon Client,也可以全局配置。
2.1 IRule
功能:根据特定算法中从服务列表中选取一个要访问的服务。
常用IRule实现有以下几种:
RoundRobinRule :轮询规则,默认规则。
AvailabilityFilteringRule:这个负载均衡器规则,会先过滤掉以下服务:
a. 由于多次访问故障而处于断路器跳闸状态;
b. 并发的连接数量超过阈值;
然后对剩余的服务列表按照RoundRobinRule策略进行访问。
WeightedResponseTimeRule
根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越重、被选中的概率越高。刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule。
RetryRule
先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务。
BestAvailableRule
该负载均衡器会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。
RandomRule:随机获取一个服务。
2.2 ServerList
功能:存储服务列表。
1. ConfigurationBasedServerList:通过配置文件参数listOfServers来实现ServerList。
2. DiscoveryEnabledNIWSServerList:通过Eureka的服务发现,实现ServerList。
2.3 IPing
功能:在后台运行的一个组件,用于检查服务列表是否都存活。
1. NIWSDiscoveryPing:通过Eureka来判定服务实例是否存活。
2. PingUrl:通过访问服务返回的状态码来判定服务是否存活。
3. NoOpPing:永远返回true,即认为服务永远存活。
4. DummyPing:默认实现,永远返回true,即认为服务永远存活。
2.4 ServerListFilter
功能:过滤配置或动态获取的服务列表。
ZoneAffinityServerListFilter:过滤掉所有不和客户端在相同zone的服务,如果和客户端相同zone的服务不存在,才不过滤不同zone的服务。
2.5 ILoadBalancer
功能:动态更新一组服务列表及根据指定算法从现有服务列表中选择一个服务。
1. BaseLoadBalancer:最基本的ILoadBalancer接口实现。
2. DynamicServerListLoadBalancer:在BaseLoadBalancer之上,主要是实现动态服务列表特性。
3. ZoneAwareLoadBalancer:在DynamicServerListLoadBalancer之上,分zone的形式来配置多个loadBalancer。
2.6 IClientConfig
功能:定义各种配置信息,用来初始化ribbon客户端和负载均衡器。
DefaultClientConfigImpl:IClientConfig的默认实现。
NFLoadBalancerClassName:配置ILoadBalancer的实现类。
NFLoadBalancerRuleClassName:配置IRule的实现类。
NFLoadBalancerPingClassName:配置IPing的实现类。
NIWSServerListClassName:配置ServerList的实现类。
NIWSServerListFilterClassName:配置ServerListFilter的实现类。
Ribbon介绍
网友评论