负载均衡实现的算法

48 阅读2分钟

Nacos 本身不直接“实现”负载均衡算法,它是服务注册与发现中心,真正的负载均衡由客户端(如 Spring Cloud LoadBalancer / Ribbon / Dubbo / gRPC / Nginx 等)完成。但在微服务体系中,和 Nacos 搭配使用时,常见的负载均衡算法主要有以下几种:


一、轮询(Round Robin)

原理:
按顺序依次调用每个实例。

特点:

  • 简单公平
  • 不考虑实例性能差异

适用场景:
实例配置一致、请求耗时相近。


二、随机(Random)

原理:
从实例列表中随机选一个。

特点:

  • 实现简单
  • 在实例数量大时分布较均匀

三、加权轮询(Weighted Round Robin)

原理:
按权重比例轮询,性能高的机器分配更多请求。

示例:
A权重5,B权重1 → 6次请求中A拿5次,B拿1次。

适用:
不同配置机器混用(如4核和16核)。


四、加权随机(Weighted Random)

原理:
按权重概率随机选择。


五、最少连接数(Least Connections)

原理:
优先选择当前连接数最少的实例。

适用:
长连接、请求耗时差异大的场景。


六、一致性 Hash(Consistent Hash)

原理:
根据请求参数(如 userId)Hash 到固定实例。

特点:

  • 同一用户总是打到同一台机器
  • 扩容时影响面小

常见用途:

  • 会话粘性
  • 缓存命中率优化

七、基于响应时间的负载均衡

原理:
优先选择平均响应时间最短的实例。


八、Nacos 权重感知 + 健康度感知

Nacos 会给每个实例维护:

  • 权重(weight)
  • 健康状态(healthy)
  • 临时实例 / 持久实例
  • 心跳状态

客户端负载均衡器通常会:

  1. 过滤掉不健康实例
  2. 按权重参与算法(轮询 / 随机)
  3. 支持动态权重调整(运维可在线改)

Spring Cloud Alibaba 中的对应关系

算法实现类
轮询RoundRobinLoadBalancer
随机RandomLoadBalancer
权重NacosWeightedRule(Ribbon 时代)
最少连接LeastConnections
一致性HashConsistentHashRule