面试题答案
一键面试常见负载均衡策略
- 轮询(Round Robin)
- 原理:依次将请求分配到每个后端服务实例,不考虑实例的当前负载或性能差异。
- 优点:实现简单,确保每个实例都有机会处理请求,较为公平。
- 缺点:没有考虑实例的处理能力和当前负载,可能导致某些性能差或负载高的实例压力过大。
- 加权轮询(Weighted Round Robin)
- 原理:为每个后端服务实例分配一个权重,权重越高,被分配到请求的概率越大。权重通常根据实例的性能(如CPU、内存等资源情况)来设定。
- 优点:能根据实例的处理能力分配请求,性能好的实例处理更多请求,提高整体系统性能。
- 缺点:如果权重设置不合理,可能仍然无法准确反映实例实际负载情况。
- 随机(Random)
- 原理:从可用的后端服务实例列表中随机选择一个来处理请求。
- 优点:实现简单,在一定程度上能分散请求。
- 缺点:可能会出现某些实例被频繁选中,而某些实例长时间不被使用的情况,无法保证均衡。
- 加权随机(Weighted Random)
- 原理:与加权轮询类似,为每个实例分配权重,然后按照权重比例随机选择实例。
- 优点:结合了随机和加权的优点,既能随机分配请求,又能根据实例性能分配请求。
- 缺点:如果权重计算不准确,可能影响负载均衡效果。
- 最少连接(Least Connections)
- 原理:将请求分配给当前连接数最少的后端服务实例。认为连接数少的实例负载相对较轻,能更好地处理新请求。
- 优点:能动态反映实例的负载情况,有效避免实例过载。
- 缺点:对于短连接应用效果较好,但对于长连接应用,可能导致新请求长时间等待连接数少的实例。
- 源IP哈希(Source IP Hashing)
- 原理:根据请求的源IP地址,通过哈希算法计算出一个值,然后根据这个值选择对应的后端服务实例。保证相同源IP的请求始终被路由到同一个实例。
- 优点:对于有状态的应用,如需要保持用户会话的场景,能确保同一用户的请求都由同一实例处理,维持会话一致性。
- 缺点:如果源IP分布不均匀,可能导致某些实例负载过高,某些实例负载过低。
根据事件特性选择合适策略
- 事件流量均匀且无状态场景
- 适用策略:轮询或随机策略。例如,简单的日志收集微服务,每个实例处理日志数据的能力相当,且日志处理不涉及状态维护,轮询或随机策略可简单有效地分配请求。
- 实例性能差异较大场景
- 适用策略:加权轮询或加权随机策略。如某些微服务实例部署在性能不同的服务器上,性能高的服务器权重可设高些,这样能让性能好的实例处理更多请求,提升整体处理效率。
- 高并发且需动态平衡负载场景
- 适用策略:最少连接策略。在电商抢购等并发量极高的场景,各实例处理能力相近时,使用最少连接策略可动态地将请求分配到负载轻的实例,避免部分实例过载。
- 有状态事件场景
- 适用策略:源IP哈希策略。例如在线游戏微服务,玩家的游戏状态需要在同一实例上持续维护,通过源IP哈希策略能保证同一玩家的请求始终被发送到同一实例,维持游戏状态的连贯性。
高并发场景下应用举例
以电商秒杀活动为例,这是典型的高并发场景。在基于事件驱动的微服务弹性伸缩设计中,假设订单处理微服务由多个实例组成。
- 初始阶段:可采用随机策略,快速将大量请求分散到各个实例,避免单个实例在瞬间接收过多请求。但随着活动进行,各实例负载情况开始出现差异。
- 持续阶段:切换到最少连接策略,动态监测每个实例的连接数,将新的订单请求分配到连接数最少的实例,确保负载均衡,保证系统的稳定性和性能,有效处理高并发订单请求。