面试题答案
一键面试轮询(Round Robin)
- 原理:轮询策略按顺序依次将请求分配到各个服务实例上。维护一个服务实例列表,每次接收到请求,就从列表的当前位置取出一个实例处理请求,处理完后指针移动到下一个实例位置。当到达列表末尾时,指针又回到列表开头。例如有服务实例A、B、C,第一个请求分配给A,第二个给B,第三个给C,第四个又给A,以此类推。这种策略简单且公平,不会出现某个实例一直被调用,而其他实例闲置的情况。
随机(Random)
- 原理:随机策略从服务实例列表中随机选择一个实例来处理请求。每次请求到来时,通过随机数生成器生成一个在服务实例列表索引范围内的随机数,然后根据这个随机数从列表中选择对应的实例。比如有三个服务实例,随机数生成0就选择第一个实例,生成1就选择第二个实例,生成2就选择第三个实例。此策略实现简单,能在一定程度上分散请求,但从概率角度看,可能会出现某个实例被连续多次选中,而部分实例长时间不被调用的情况。
加权轮询(Weighted Round Robin)
- 原理:加权轮询是在轮询基础上,为每个服务实例分配一个权重值。权重反映了该实例处理请求的能力,权重越高,被分配到请求的概率越大。同样维护一个服务实例列表,列表中的每个实例有对应的权重。例如实例A权重为3,实例B权重为2,实例C权重为1。开始时,按权重比例分配请求,先分配3次给A,2次给B,1次给C,一轮下来共6次请求。处理完一轮请求后,指针回到列表开头,继续按权重比例分配。这样可以根据实例的性能差异来合理分配请求,性能好的实例处理更多请求。
加权随机(Weighted Random)
- 原理:加权随机结合了随机和加权的思想。为每个服务实例分配权重,根据权重构建一个加权的概率空间。例如有三个实例,A权重3,B权重2,C权重1,总权重为6。每次请求到来时,生成一个0到5(总权重 - 1)之间的随机数,若随机数为0、1、2,则选择A实例;若为3、4,则选择B实例;若为5,则选择C实例。这样每个实例被选中的概率与其权重成正比,既具备随机分配的灵活性,又能按权重分配请求。
最少连接(Least Connections)
- 原理:最少连接策略会跟踪每个服务实例当前正在处理的连接数,将新的请求分配给当前连接数最少的实例。当有新请求到达时,负载均衡器遍历服务实例列表,获取每个实例的当前连接数,然后选择连接数最少的实例来处理该请求。这种策略适用于处理每个请求耗时差异较大的场景,能保证负载更均匀地分布在各个实例上,避免某个实例因处理大量长连接请求而负载过重,其他实例却处于空闲状态。