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