一、简介

根据key从lb.allServers或lb.upServers中选择一个可用Server

1、核心实现

WeightedResponseTimeRule.png


二、设计要点

从大的分类来说就两类:Random、RoundRobin。

1、RandomRule

image.png

2、RoundRobinRule

image.png

3、BestAvailableRule

过滤熔断、高并发实例。
image.png

备注:组合使用 image.png

4、PredicateBasedRule

先过滤,后轮询。
image.png

4.1、AbstractServerPredicate

4.1.1、简介

作为基础组件,为RuleServerList提供服务过滤能力。
image.png
image.png

4.1.2、核心实现

AvailabilityPredicate.png
A、AvailabilityPredicate
image.png
B、ZoneAffinityPredicate
image.png
C、ZoneAvoidancePredicate
基于聚合指标,过滤掉最差Zone,得到所有可用的Zone。然后判断当前Zone是否在可用Zone之内。
image.png
image.png
D、CompositePredicate
image.png

4.2、AvailabilityFilteringRule

考虑到正常情况下,大部分实例都处于可用状态,因此10次内足够选出可用实例。
image.png
image.png

4.3、ZoneAvoidanceRule

image.png