动态 RWA 算法:在线波长分配、负载均衡与碎片整理
动态 RWA,说白了就是光网络里的「实时交通调度」。
静态规划做完,网络一跑起来,业务请求是随机来的。今天 A 到 B 要 100G,明天可能就变成 400G。你不能每次都停机重配吧?
所以,我们需要一套能在线决策的算法。我做了这么多年光网络,最深的体会就是:动态 RWA 做得好不好,直接决定了网络的承载效率。下面我把核心的三个模块拆开讲。
4.1 在线波长分配:来一个业务,算一条路
在线分配的核心逻辑很简单:业务到达时,找一条可用路径,再分配一个可用波长。但难点在于「快」和「准」。
关键指标:阻塞率
阻塞率 = 被拒绝的业务数 / 总业务请求数。我见过不少团队,算法跑得慢,业务一多就堵死。在线分配必须控制在毫秒级。
常用的在线分配策略有几种,我列个表对比一下:
| 策略 | 核心思路 | 优点 | 缺点 |
|---|---|---|---|
| 首次命中(FF) | 按波长编号从小到大,选第一个可用的 | 实现简单,速度快 | 容易造成低编号波长拥堵 |
| 随机命中(RF) | 从可用波长中随机选一个 | 负载分散,实现简单 | 性能不稳定,波动大 |
| 最常用(MU) | 选全网使用次数最多的波长 | 波长利用率高 | 计算开销大,需要全局统计 |
| 最少使用(LU) | 选全网使用次数最少的波长 | 负载均衡效果好 | 同样需要全局信息 |
我个人习惯在中小型网络里用 首次命中(FF)。为什么?因为它快。你想想看,在线分配每慢 1 毫秒,高峰期可能就多堵几个业务。我曾经在一个城域网项目里,把 FF 换成 MU,结果阻塞率没降多少,CPU 先爆了。
我的建议:如果网络规模不大(节点数 < 50),优先用 FF。如果网络很大且业务模式固定,可以考虑 MU 或 LU,但一定要做好缓存。
4.2 负载均衡策略:别让一条链路累死
在线分配如果只考虑「有路就走」,很容易出现这种情况:某条链路负载 90%,隔壁链路才 20%。
这就是负载不均衡。后果是什么?瓶颈链路先堵,全网性能被一条链路拖垮。
负载均衡的核心目标:让所有链路的资源占用率尽量接近。我常用的方法有这几种:
- 最小负载路径优先:选当前负载最轻的路径。实现简单,但可能绕远路。
- 阈值触发重路由:当某条链路负载超过 70% 时,自动把新业务分配到其他路径。嗯,这里要注意阈值设得太低会频繁触发,太高又没效果。
- 基于代价的权重调整:给每条链路一个动态权重,负载越高权重越大,路径计算时自动避开。
我曾经在一个骨干网项目里遇到过这种情况:两条物理路径,一条走光纤直连,一条走中继。直连路径延迟低,大家都抢着用,负载冲到 85%。中继路径才 30%。后来我加了权重调整,把直连路径的代价系数从 1 调到 1.5,业务自动分流了。效果立竿见影。
避坑指南:我曾经试过纯基于阈值的重路由,结果业务频繁切换路径,导致光层频繁重配置,反而增加了丢包。后来我加了「冷却时间」——切换后 30 秒内不再触发该链路的负载均衡。这个经验分享给你。
4.3 碎片整理:把散落的波长拼起来
动态分配时间长了,波长资源会变得支离破碎。就像硬盘碎片一样。
举个例子:一条链路上有 80 个波长。业务来来走走,最后可能 1、3、5、7 号波长被占用,2、4、6、8 空闲。这时候来了一个需要 4 个连续波长的 400G 业务,明明总空闲波长够,但就是分配不了。
这就是波长碎片。
碎片整理的思路很简单:把零散的空闲波长合并成连续的大块。但操作起来有讲究。
| 整理策略 | 触发条件 | 操作方式 | 对业务的影响 |
|---|---|---|---|
| 被动整理 | 新业务分配失败时触发 | 只整理受影响的那段频谱 | 影响小,但可能来不及 |
| 主动整理 | 定时触发(如每 10 分钟) | 全局重排波长 | 影响大,可能中断业务 |
| 增量整理 | 业务释放时触发 | 只移动相邻的波长 | 影响最小,但效果慢 |
我个人推荐增量整理 + 被动整理的组合。平时业务释放时顺手整理一下,遇到大业务分配失败再触发一次深度整理。这样既不影响在线业务,又能保持频谱健康。
一个小技巧:碎片整理时,尽量选择业务量最低的时段操作。我一般在凌晨 2-4 点做主动整理,白天只用增量整理。这样用户基本无感知。
4.4 动态 RWA 的整体流程
把上面三个模块串起来,就是一套完整的动态 RWA 流程。我画了一张图,你看一眼就明白了:
流程其实不复杂。业务来了,先算路径(考虑负载均衡),再分配波长。如果分配失败,触发碎片整理,整理完再试一次。还不行?那就阻塞吧,总比硬塞进去导致全网抖动强。
4.5 实战中的取舍
讲完理论,说点实际的。动态 RWA 在工程落地时,有几个取舍你必须想清楚:
- 性能 vs. 最优:在线分配必须快。有时候 90 分的方案比 100 分的方案更实用,因为后者可能多花 5 倍时间。
- 全局 vs. 局部:负载均衡需要全局信息,但全局信息收集有延迟。我见过用「本地负载 + 邻居交换」的折中方案,效果不错。
- 整理频率 vs. 业务影响:碎片整理做多了,业务频繁重配,反而增加故障风险。我的经验是:宁可让频谱稍微碎一点,也别让业务频繁中断。
一句话总结:动态 RWA 不是追求理论最优,而是在「快、准、稳」之间找到平衡点。在线分配要快,负载均衡要准,碎片整理要稳。三者配合好了,网络才能跑得又顺又久。