动态 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%。

这就是负载不均衡。后果是什么?瓶颈链路先堵,全网性能被一条链路拖垮。

负载均衡的核心目标:让所有链路的资源占用率尽量接近。我常用的方法有这几种:

  1. 最小负载路径优先:选当前负载最轻的路径。实现简单,但可能绕远路。
  2. 阈值触发重路由:当某条链路负载超过 70% 时,自动把新业务分配到其他路径。嗯,这里要注意阈值设得太低会频繁触发,太高又没效果。
  3. 基于代价的权重调整:给每条链路一个动态权重,负载越高权重越大,路径计算时自动避开。

我曾经在一个骨干网项目里遇到过这种情况:两条物理路径,一条走光纤直连,一条走中继。直连路径延迟低,大家都抢着用,负载冲到 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 流程。我画了一张图,你看一眼就明白了:

动态 RWA 整体流程 动态 RWA 整体流程 业务到达 路径计算(负载均衡) 波长分配(在线分配) 分配成功? 是 建立连接 否 触发碎片整理 重试分配 说明:碎片整理后重试,若仍失败则阻塞该业务

流程其实不复杂。业务来了,先算路径(考虑负载均衡),再分配波长。如果分配失败,触发碎片整理,整理完再试一次。还不行?那就阻塞吧,总比硬塞进去导致全网抖动强。

4.5 实战中的取舍

讲完理论,说点实际的。动态 RWA 在工程落地时,有几个取舍你必须想清楚:

  • 性能 vs. 最优:在线分配必须快。有时候 90 分的方案比 100 分的方案更实用,因为后者可能多花 5 倍时间。
  • 全局 vs. 局部:负载均衡需要全局信息,但全局信息收集有延迟。我见过用「本地负载 + 邻居交换」的折中方案,效果不错。
  • 整理频率 vs. 业务影响:碎片整理做多了,业务频繁重配,反而增加故障风险。我的经验是:宁可让频谱稍微碎一点,也别让业务频繁中断。

一句话总结:动态 RWA 不是追求理论最优,而是在「快、准、稳」之间找到平衡点。在线分配要快,负载均衡要准,碎片整理要稳。三者配合好了,网络才能跑得又顺又久。