➤ Nginx(7层反向代理)提供的几种负载均衡算法实现:
- 随机 :
- 轮询 :
- 加权轮询 :
- 源ip哈希
ip_hash
: 使用Client端的IP进行Hash - 通用哈希
hash $key
: 使用自定义的key进行Hash, 也支持一致性哈希hash $key consistent
, 一致性哈希一般用于后端服务器是缓存时, 例如使用请求URL进行一致性Hash:hash $request_uri consistent
, - 最小连接
least_conn
: 请求将被发送给 活动连接数最小的后端服务器 - 最小耗时
least_time
: 请求将被发送给 平均耗时最小的后端服务器, 平均耗时有两种计算方式: 从后端服务器收到第一个字节least_time header
, 或从后端服务器收到完整请求least_time last_byte
➤ Nginx 平滑基于权重的轮询算法实现
- 初始化: 每个节点当前权重 = 初始权重;
- 第一轮选择节点, 选择当前权重最大的, 被选择的节点的”当前权重”发生变化 = 当前权重-权重总和, 未选中节点的”当前权重”不变;
- 第二轮选择节点, 每个节点的权重 = 每个节点初始权重+ 上一轮的最终权重;
- 综上, 每次节点被选中, 它的当前权重会减少(-总权重), 进入下一轮后, 每个节点都把上轮权重+自己的初始权重, 然后开始选择;