Spring Cloud Netflix Ribbon官方WIKI翻译之 使用负载平衡器

概述

Ribbon提供了软件负载均衡器来与服务器集群通信。负载均衡器提供以下基本功能:

  • 向通信客户端提供单个服务器的公共DNS名称或IP
  • 根据特定逻辑在服务器列表之间进行轮换

某些负载平衡器还可以提供以下高级特性:

  • 通过将客户端和服务器划分为多个区域(如数据中心中的机架)来建立它们之间的亲缘关系,并支持位于同一区域的服务器,以减少延迟
  • 保持服务器的统计数据,避免服务器出现高延迟或频繁故障
  • 对区域进行统计,并避免可能处于停机状态的区域

利用这些高级特性需要使用Ribbon中提供的一个客户端,因为它与负载均衡器集成,并向负载均衡器统计信息提供输入。

负载均衡器组件

  • Rule - 用于确定从列表中返回哪个服务器的逻辑组件
  • Ping - 在后台运行的组件,以确保服务器的活性
  • ServerList - 这可以是静态的,也可以是动态的。如果它是动态的(正如DynamicServerListLoadBalancer所使用的那样),后台线程将在特定的时间间隔刷新和筛选列表

 这些组件可以通过编程方式设置,也可以作为客户端配置属性的一部分,并通过反射创建。这些是相关的属性名:

NFLoadBalancerClassName
NFLoadBalancerRuleClassName
NFLoadBalancerPingClassName
NIWSServerListClassName
NIWSServerListFilterClassName

 通过通过Archaius更改属性,这些组件的行为通常在运行时是可更改的。

通常的规则

RoundRobinRule

这个规则只是通过轮询来选择服务器。它通常用作更高级规则的默认规则或回退。

AvailabilityFilteringRule

此规则将跳过那些被认为是“电路跳闸”或具有高并发连接计数的服务器。

默认情况下,如果RestClient在过去三次都没有连接到实例,那么实例就会发生电路跳闸。一旦一个实例电路跳闸,它将保持这个状态30秒,然后再认为电路是关闭的。然而,如果它继续连接失败,它将再次成为“电路跳闸”,它成为“电路关闭”的等待时间将成倍地增加到连续故障的数量。

可以通过Archaius ConfigurationManager设置以下属性:

# 连续连接失败阈值,使服务器处于电路跳闸状态,默认3
niws.loadbalancer..connectionFailureCountThreshold

# 实例可以保持在“不可用”状态的最大周期,无论指数增加多少,缺省值为30
niws.loadbalancer..circuitTripMaxTimeoutSeconds

# 要跳过服务器的并发连接计数阈值,默认是Integer.MAX_INT
..ActiveConnectionsLimit

WeightedResponseTimeRule

对于这个规则,每个服务器都根据其平均响应时间获得一个权重。响应时间越长,得到的权重就越小。该规则随机选择一个服务器,其中的可能性由服务器的权重决定。

要启用WeightedResponseTimeRule,可以通过API用负载均衡器设置它,或者设置以下属性:

..NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule

 服务列表

临时静态服务器列表

您总是可以使用BaseLoadBalancer或它的子类使用API baseloadbalker . setserverslist()以编程方式设置服务器的静态列表。

ConfigurationBasedServerList

这是负载均衡器的默认ServerList实现。

您可以使用Archaius ConfigurationManager将服务器列表设置为属性。例如:

sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80

 如果属性是动态更改的,负载均衡器的服务器列表也会更改。

DiscoveryEnabledNIWSServerList

这个ServerList实现从Eureka客户机获取服务器列表。必须通过属性中的VipAddress标识服务器集群。例如:

myClient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList 
# 服务器必须使用VipAddress“myservice”在Eureka服务器注册
myClient.ribbon.DeploymentContextBasedVipAddresses=myservice

ServerListFilter

ServerListFilter是DynamicServerListLoadBalancer用来过滤从ServerList实现返回的服务器的组件。在Ribbon中有两个ServerListFilter实现:

ZoneAffinityServerListFilter

过滤掉与客户机不在同一区域的服务器,除非客户机区域中没有可用的服务器。该过滤器可以通过指定以下属性来启用(假设客户端名称为“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

你可能感兴趣的:(Spring,Cloud,Netflix)