SystemDesign | 负载均衡 | Nginx

➤ 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

@ref NGINX Docs | HTTP Load Balancing

➤ Nginx 平滑基于权重的轮询算法实现

  • 初始化: 每个节点当前权重 = 初始权重;
  • 第一轮选择节点, 选择当前权重最大的, 被选择的节点的”当前权重”发生变化 = 当前权重-权重总和, 未选中节点的”当前权重”不变;
  • 第二轮选择节点, 每个节点的权重 = 每个节点初始权重+ 上一轮的最终权重;
  • 综上, 每次节点被选中, 它的当前权重会减少(-总权重), 进入下一轮后, 每个节点都把上轮权重+自己的初始权重, 然后开始选择;

@ref nginx平滑的基于权重轮询算法分析 | tenfy’ blog