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)
- 临时实例 / 持久实例
- 心跳状态
客户端负载均衡器通常会:
- 过滤掉不健康实例
- 按权重参与算法(轮询 / 随机)
- 支持动态权重调整(运维可在线改)
Spring Cloud Alibaba 中的对应关系
| 算法 | 实现类 |
|---|---|
| 轮询 | RoundRobinLoadBalancer |
| 随机 | RandomLoadBalancer |
| 权重 | NacosWeightedRule(Ribbon 时代) |
| 最少连接 | LeastConnections |
| 一致性Hash | ConsistentHashRule |