ribbon说明
对于ribbon详细说明大家可以参考官网, 是一个软负载均衡的组件,它能够对服务集群实现负载均衡,主要有一下几个功能:
1.为通讯的客户端提供服务的DNS或者ip
2. 根据某些算法,循环访问某些服务
某些负载均衡器能提供下面的高级功能:
1.通过将客户端与服务器端划分几个区(zone),来建立他们之间的关系,使他们在相同的区,来减小延迟
2. 保存服务的统计信息,避免高延迟或者频繁请求失败的服务
3. 保存区(zone)的统计信息,避免可能停止的区
负载均衡组件
Rule: 一个算法组件,决定在服务列表中使用哪一个
Ping: 一个后台运行的组件,确定服务是否可用
ServerList: 服务列表,可以是动态的也可以是静态的,如果是动态的(
DynamicServerListLoadBalancer
),一个后台线程会定时刷新和过滤这个服务列表
这些组件可以用程序设置,也可以在配置文件中设置
-
: Should implement<clientName>.ribbon.NFLoadBalancerClassName
ILoadBalancer
-
: Should implement<clientName>.ribbon.NFLoadBalancerRuleClassName
IRule
-
: Should implement<clientName>.ribbon.NFLoadBalancerPingClassName
IPing
-
: Should implement<clientName>.ribbon.NIWSServerListClassName
ServerList
-
: Should implement<clientName>.ribbon.NIWSServerListFilterClassName
ServerListFilter
IRule
根据某个算法,从服务列表中选择一个服务进行访问
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9kkaOBTWq1keJRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM2kTN0MDN0ETNwkDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
a. RoundRobinRule
默认的,轮询规则,也是很多高级规则中退避的一种策略
b. AvailabilityFilteringRule
会过滤掉打开熔断的服务或者是高并发连接数量的服务
c. WeightedResponseTimeRule
通过服务的平均响应时间,给每一个服务一个权重,响应时间越长,权重越小,开始统计信息不足,应用轮询策略
d. RetryRule
先按照轮询策略,如果请求服务失败,会在指定时间内进行重试
e. BestAvailableRule
先过滤掉断路器的服务,然后选择一个并发量最小的
f. RandomRule
随机获取一个服务
IPing
a. DummyPing
默认返回true,即认为服务永远活着
b. NIWSDiscoveryPing
如果Discovery Client认为服务在线,即认为服务活着
c. NoOpPing
永远返回true,认为服务或者,DummyPing源码里面多了一个配置
d. PingUrl
会使用HttpClient调用服务的一个url,如果成功,则认为服务活着
ServerList
static server list
在程序中设置一系列静态服务
BaseLoadBalancer.setServersList()
ConfigurationBasedServerList
在配置文件中设置,如果属性时动态改变的,服务列表也会改变
sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80
DiscoveryEnabledNIWSServerList
从eureka服务获取服务列表,服务集群必须由VipAddress标识
ServerListFilter
被用在
DynamicServerListLoadBalancer
中,用来过去过滤服务列表中的服务。
ZoneAffinityServerListFilter
过滤出与客户端不在同一个zone的服务,除非客户端的zone没有可用的服务。通过下面方式开启
myclient.ribbon.EnableZoneAffinity=true
ServerListSubsetFilter
此过滤器确保客户端仅看到ServerList实现返回的整个服务器的固定子集。它还可以定期用新服务器替换可用性较差的子集中的服务器。要启用此过滤器,请指定以下属性
myClient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
# the server must register itself with Eureka server with VipAddress "myservice"
myClient.ribbon.DeploymentContextBasedVipAddresses=myservice
myClient.ribbon.NIWSServerListFilterClassName=com.netflix.loadbalancer.ServerListSubsetFilter
# only show client 5 servers. default is 20.
myClient.ribbon.ServerListSubsetFilter.size=5
ServerListUpdater
DynamicServerListLoadBalancer状态下,更新服务器列表
PollingServerListUpdater
默认,定时更新
EurekaNotificationServerListUpdater
收到通知时,更新服务器列表
IClientConfig
定义各种配置信息,用来初始化ribbon客户端与负载均衡器
ILoadBalancer
定义软负载均衡的操作接口,动态更新服务列表并且根据指定策略算法,从服务列表中选择一个服务
配置文件格式
<clientName>.<nameSpace>.<propertyName>=<value>
<clientName>:这是ribbon的客户端名称,如果此值为没有配置,则此条属性会作用到所有的客户端。
<nameSpace>:默认值为 ribbon
<propertyName>:所有的可用的属性都在com.netflix.client.conf.CommonClientConfigKey。
如果你没有配置任何属性,则ribbon会使用com.netflix.client.config.DefaultClientConfigImpl里的值。
实时内容请关注微信公众号,公众号与博客同时更新:程序员星星