负载均衡相关的几点思考

滚动上线导致的不均衡,以及 TCP 长连接负载均衡的几种思路

Posted by BY on April 25, 2026

原始笔记是几条零散的思考,这里把”上线方式”和”TCP 负载均衡”分成两节,并保留原文中的疑问。

当前保留内容

1. 重复上线 / 滚动上线带来的不均衡

常用的策略是 round robin(rr)或者 random:

重复上线或者滚动上线,有可能导致负载不均衡。
滚动的过程中,存在掉线的情况,然后轮询就会导致每台机器上的用户数不一致。

核心原因是:滚动期间不断有实例被摘除并重新上线,连接 / 用户的”重新分布”是单向的——已经迁走的连接不会自动回流,最终就会形成长尾的不均衡。

2. TCP 长连接的负载均衡思路

TCP 长连接和无状态 HTTP 不同,简单的四层 LB 不一定够用,原始笔记中列了几个仍然待思考的方向:

  • client 与 server 建立多个连接:通过多连接打散流量,降低单连接长尾的影响。
  • 后端额外的 router / 路由模块:用一个独立模块记录 client 与 server 的连接关系,便于做迁移、亲和性调度等。
  • TCP 会话保持:保证同一个 client 始终路由到同一台 server,简化状态管理,但牺牲了部分均衡性。
  • 基于 hash 的分配:例如 hash(client_id) % N,实现简单,但实例数量变化时需要考虑一致性 hash 等手段。

后续可补的方向

这篇后续如果继续整理,建议至少补下面几类内容:

  • 滚动上线时常见的”再均衡”手段:主动断连、按比例 drain、慢启动等
  • 一致性 hash / rendezvous hash 的对比与适用场景
  • 连接级别 vs 请求级别负载均衡的取舍
  • 真实业务里测过的指标(QPS / 连接数 / 延迟)和踩过的坑

当前这篇先当作一个”负载均衡思考”的待扩充占位条目。