Ribbon提供了软件负载均衡器来与服务器集群通信。负载均衡器提供以下基本功能:
某些负载平衡器还可以提供以下高级特性:
利用这些高级特性需要使用Ribbon中提供的一个客户端,因为它与负载均衡器集成,并向负载均衡器统计信息提供输入。
这些组件可以通过编程方式设置,也可以作为客户端配置属性的一部分,并通过反射创建。这些是相关的属性名:
NFLoadBalancerClassName
NFLoadBalancerRuleClassName
NFLoadBalancerPingClassName
NIWSServerListClassName
NIWSServerListFilterClassName
通过通过Archaius更改属性,这些组件的行为通常在运行时是可更改的。
这个规则只是通过轮询来选择服务器。它通常用作更高级规则的默认规则或回退。
此规则将跳过那些被认为是“电路跳闸”或具有高并发连接计数的服务器。
默认情况下,如果RestClient在过去三次都没有连接到实例,那么实例就会发生电路跳闸。一旦一个实例电路跳闸,它将保持这个状态30秒,然后再认为电路是关闭的。然而,如果它继续连接失败,它将再次成为“电路跳闸”,它成为“电路关闭”的等待时间将成倍地增加到连续故障的数量。
可以通过Archaius ConfigurationManager设置以下属性:
# 连续连接失败阈值,使服务器处于电路跳闸状态,默认3
niws.loadbalancer.
# 实例可以保持在“不可用”状态的最大周期,无论指数增加多少,缺省值为30
niws.loadbalancer.
# 要跳过服务器的并发连接计数阈值,默认是Integer.MAX_INT
对于这个规则,每个服务器都根据其平均响应时间获得一个权重。响应时间越长,得到的权重就越小。该规则随机选择一个服务器,其中的可能性由服务器的权重决定。
要启用WeightedResponseTimeRule,可以通过API用负载均衡器设置它,或者设置以下属性:
..NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule
临时静态服务器列表
您总是可以使用BaseLoadBalancer或它的子类使用API baseloadbalker . setserverslist()以编程方式设置服务器的静态列表。
这是负载均衡器的默认ServerList实现。
您可以使用Archaius ConfigurationManager将服务器列表设置为属性。例如:
sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80
如果属性是动态更改的,负载均衡器的服务器列表也会更改。
这个ServerList实现从Eureka客户机获取服务器列表。必须通过属性中的VipAddress标识服务器集群。例如:
myClient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
# 服务器必须使用VipAddress“myservice”在Eureka服务器注册
myClient.ribbon.DeploymentContextBasedVipAddresses=myservice
ServerListFilter是DynamicServerListLoadBalancer用来过滤从ServerList实现返回的服务器的组件。在Ribbon中有两个ServerListFilter实现:
过滤掉与客户机不在同一区域的服务器,除非客户机区域中没有可用的服务器。该过滤器可以通过指定以下属性来启用(假设客户端名称为“myclient”,客户端属性名称空间为“ribbon”):
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