IRule 是算法的接口。AbstractLoadBalancerRule 是实现了 IRule 接口的抽象类,所有内置的算法都是继承 AbstractLoadBalancerRule 来实现的。
RoundRobinRule 是轮询的算法,如果有 A、B 两个实例,那么该算法的逻辑是选择 A,再选择B,再选择A,轮询下去。
RandomRule 是随机算法,这个就比较简单了,在服务列表中随机选取。
BestAvailableRule 选择一个最小的并发请求 server,如果有 A、B 两个实例,当 A 有 4 个请求正在处理中,B 有 2 个请求正在处理中,下次选择的时候会选择 B,因为 B 处理的数量是最少的,认为它压力最小,这种场景适合于服务所在机器的配置都相同的情况下,否则不太适用。
在某些场景下,服务器的性能不一致,如果采用轮询算法或随机算法的话,无法充分的利用服务器的资源,某些服务器处理的快,应该多分配一些请求,某些服务器处理的慢,就可以少分配一些请求,WeightedResponseTimeRule 就是做这件事情的,原理是根据请求的响应时间计算权重,如果响应时间越长,那么对应的权重越低,权重越低的服务器,被选择的可能性就越低。