路由与负载均衡
CreateYourVPN 中路由是什么,如何在一分钟内创建一条路由,为什么空路由也有用,以及系统如何在服务器之间分配用户。
路由是你的基础设施与用户所看到的内容之间的桥梁。你管理的是服务器和入站,而用户在应用里看到的只是一份简短的"服务器"列表——列表里的每一项其实都是一条路由。
一条路由 = 用户应用里的一行
路由是客户端订阅里,归在同一个名字下的一组入站。 规则很简单:
一条非空路由 = 用户服务器列表中的一项。
一条路由可以只包含一个入站——也可以包含分布在不同服务器上的十个入站。用户完全看不到这些:他们选择"🇺🇸 美国",具体落在哪台服务器上,是由负载均衡器决定的——详见下文。
与此同时,用户看到的名字,其实是被选中的那个入站的名字:把你的入站命名清楚一点("🇺🇸 纽约""🇺🇸 达拉斯"),用户看到的就正是这个名字。
当你连接第一台服务器时,系统会自动创建一条默认路由,并把第一个入站放进去——这就是为什么不用做任何设置,一切开箱即用。当你想要更多东西时——多个国家、专门的"streaming"路由等等——路由就派上用场了。
创建一条路由
在集群页面的**"路由"区域,点击"新建路由"**。向导分为三个部分:
- 客户端如何看到这条路由——名称(例如
🇺🇸 美国)和一个国旗。这是这条路由的"招牌"。 - 负载均衡算法——"按流量最少分配"(默认)或"轮询"。两者的区别见下文。
- 池中入站——哪些入站属于这条路由。这一部分是可选的:你可以先创建一条空路由,之后再通过拖放的方式填充它。
一个入站只能属于一条路由。 如果你选择了一个已经被另一条路由占用的入站,它就会转移到新的这条路由。这正是系统用来保证每个入口点的流量只受一套规则管辖的方式。
拓扑图:一眼看清所有路由
在集群页面上,路由会显示在一张实时图上:左边是带着各自入站的服务器,右边是路由的方框。入站可以用鼠标拖动:抓住一个入站,拖放到另一条路由里——完成。图上还有一个**"未分配"**区域——把入站拖到那里,就能把它从所有路由中解绑。
路由方框本身也可以重新排序(用拖动手柄或箭头)——这纯粹是为了方便你查看的视觉排序。
空路由
一条没有任何入站的路由会用虚线边框绘制,也不会有连到分发节点的"管道"——这是在提示用户看不到它。空路由是很好用的占位符:提前创建一条"🇯🇵 日本",等真的有一台日本服务器出现时,把入站拖进去——这条路由就活过来了。
反过来的情况也会被高亮提示:如果你有入站不属于任何路由,面板会提醒你——"有入站不在任何路由中——客户端暂时看不到它们"。
负载均衡:谁会落到哪台服务器上
当用户请求连接时,系统会针对每条路由,从池中实时挑选出一个入站——依据的是最新的服务器指标(就是第 3 课里那些)。有两种算法:
"按流量最少分配"(默认)
系统会看每台服务器还剩下多少人均可用带宽:拿信道容量,减去当前流量,再除以已连接用户数。剩余空间最大的服务器胜出。这是一种按"真实负载"公平分配的方式:一台已经饱和的弱服务器不会得到新用户,哪怕它形式上人数更少。
系统会自己估算信道容量——依据的是观测到的真实流量峰值(如果服务器一段时间内负载不高,峰值会逐渐"降温")。
"轮询"
一条简单的规则:新用户会被分配到当前人数最少的服务器——并按服务器的系数做调整。系数是一个权重:系数为 2.0 的服务器会被当作"容量是邻居的两倍",大致会接收邻居(系数 1.0)两倍的用户量。这让你可以公平地给不同规格的机器分配负载。
如果池中某台服务器还没有容量估算值(比如这台服务器是全新的,还没经历过流量峰值),这条路由会优雅地回退到轮询模式——这样一来,决策始终建立在真实存在的数据之上。
什么时候会重新分配
一直在发生——而且是自动的。每次请求都会用最新指标重新计算服务器的选择:如果负载发生变化,新用户就会开始落到更空闲的服务器上。与此同时,只要条件相同,系统会尽量为同一个用户保持相同的选择,避免他们的"服务器"来回跳动。
还有一道安全保障:监控系统认为不可用的服务器会被排除在选择之外——详见第 7 课。
关键要点
- 路由是一组入站的"招牌";一条非空路由 = 用户应用里的一行。
- 一个入站只属于一条路由。不属于任何路由的入站对客户端不可见。
- 空路由完全正常,是很好的占位符:一个虚线方框,对用户隐藏。
- 两种算法:按剩余带宽(智能,默认)和带权重的轮询。
- 均衡是实时的:每次连接都会用最新指标重新计算。