端口负载均衡方案
一句话版:身份端口像"工位号",端口号天生有数量上限(约 6w)。端口负载均衡就是开更多"入口"来共用这些工位,让同一套工位能接待更多客人、也更不容易被挤爆。
一、先理解"身份端口"是怎么回事
每条隧道接入集群,都要落在某个服务端实例上,而一个实例 = 一个端口号。这个端口号就是隧道在集群里的身份:
- 端口号从 2022 左右开始编号,但端口总数天然有上限(0–65535),去掉系统占用后,单集群大约能容纳 6w 个身份端口;
- 每个身份端口(实例)内部还能同时承载多条隧道并发("× N 条隧道");
- 所以单集群的理论容量是:约 6w 个身份端口 × 每个端口内 N 条隧道。
换句话说:限制集群容量的第一道墙,不是机器性能,而是"端口号不够用了"。
二、为什么还要做"端口负载均衡"
理论上 6w 个身份端口很多,但实际使用中还会碰到:
- 单入口压力:所有访问挤在一个公共入口上,入口端口本身也会饱和;
- 单点风险:入口就一个,挂了全断;
- 不够用:业务大了,6w 身份端口 × N 条隧道仍然会触顶。
三、方案:把容量摊到多个入口上
思路是别让所有身份端口挤在一个入口后面,而是把它们分摊到多个入口、多台服务器:
入口 1 ──> L4 负载均衡 ──> 一批身份端口(服务端实例)
入口 2 ──> L4 负载均衡 ──> 另一批身份端口
入口 3 ──> ……
- 统一对外:用户看到的还是"一个产品",实际由多个入口共同服务;
- 按表分流:谁连哪个入口,由数据端的映射表和负载均衡的动态发现共同决定,保证找得到人;
- 坏了自动换:某入口或某批端口出问题,流量自动切到其它入口。
于是容量从"一个入口扛 6w × N"变成 "多个入口加起来扛 6w × N",入口数量可继续加,整体承载与可用性同步提升。