我对Ribbon选择服务器的方式有一个简单的问题。
假设我有两个可以由Ribbon选择的服务。
Ribbon如何知道要选择哪个服务?它是否检查两个服务以便知道哪个服务重载较少?如果是,是否会调用/metrics
并考虑哪个指标?
非常感谢您的回答
答案 0 :(得分:3)
查看Github功能区存储库中的doc wiki:
在Common rules
部分解释了一些规则,即Ribbon如何确定服务器可用性,权重等。
有三种可配置的负载平衡规则RoundRobinRule
,AvailabilityFilteringRule
和WeightedResponseTimeRule
。
RoundRobinRule
此规则只是通过循环选择服务器。它经常被用作 默认规则或更高级规则的后备。
循环法是一种方法,以公平和合理的顺序选择组中的所有摘要,通常从列表的第一个元素开始,直到它到达最后一个元素并从第一个元素开始。
看看RoundRobin类中的方法choose:。
AvailabilityFilteringRule
此规则将跳过被视为"电路跳闸的服务器"或者 高并发连接数。
默认情况下,如果RestClient失败,则实例会跳闸 最后三次连接它。一旦有实例 电路跳闸后,它将保持这种状态30秒 该电路再次被视为关闭。但是,如果继续下去 失败的连接,它将成为"电路跳闸"再次和等待 时间成为"电路关闭"将成倍增加 连续失败的数量。
可以通过Archaius设置,这是一个用于配置管理的Netflix库。
WeightedResponseTimeRule
对于此规则,每个服务器根据其平均值给出权重 响应时间。响应时间越长,重量就越小 得到。规则随机选择可能的服务器 由服务器的权重决定。
要启用WeightedResponseTimeRule,请使用负载均衡器进行设置 API或设置以下属性
<clientName>.<clientConfigNameSpace>.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule
此规则随机选择服务器,但考虑其权重。