在大规模数据中心,网络速度会突然变慢。来自分布式系统、微服务或 AI 训练任务的突发流量可能在几秒钟内就压垮交换机缓冲区。问题不仅在于何时出错,还在于能否在问题发生之前预见到它的到来。
遥测系统被广泛用于监控网络健康状况,但大多数系统都是以被动模式运行的。只有在性能下降后,它们才会标记出拥塞情况。一旦链路饱和或队列满了,就已经过了早期诊断的阶段,要追踪最初的原因就变得难上加难。
带内网络遥测(INT)试图通过在实时数据包通过网络时为其标记元数据来解决这一问题。它可以让您实时查看流量的流动情况、队列的累积位置、延迟的产生位置以及每台交换机的转发处理情况。如果谨慎使用,它将是一个强大的工具。但它也需要付出代价。在每个数据包上启用 INT 可能会带来严重的开销,并将大量遥测数据推送到控制平面,而其中很多数据您可能根本不需要。
如果我们能更有选择性地监控会怎样?与其追踪所有细节,不如预测哪些地方可能出现问题,并只针对这些区域启用情报收集 (INT),并且只在短时间内启用。这样,我们就能在关键时刻获得详细的可视性,而无需支付全天候监控的全部费用。

始终在线遥测的问题
INT 为您提供了一个强大、详细的网络内部情况视图。您可以直接从数据包路径跟踪队列长度、逐跳延迟和时间戳。但代价是:这些遥测数据会增加每个数据包的权重,如果将其应用于所有流量,就会占用大量带宽和处理能力。
为了解决这个问题,许多系统都会走捷径:
- 采样:只对部分数据包(如 1%)标记遥测数据。
- 事件触发遥测:仅当某些不好的事情已经发生时才打开 INT,例如队列超过阈值。
这些技术有助于控制开销,但它们会错过流量激增的早期关键时刻,而这正是您试图防止速度变慢时最想了解的部分。
引入预测方法
我们设计了一个系统,它能够在拥堵发生之前预测拥堵情况,并主动激活详细的遥测数据,而不是等到情况出现后才采取行动。这个想法很简单:如果我们能够预测流量高峰的时间和地点,就可以选择性地针对该热点启用 INT,并且只在合适的时间段内启用。
这样可以降低开销,但在真正重要的时候为您提供深入的可视性。
系统设计
我们提出了一种简单的方法,使网络监控更加智能。它可以预测何时何地确实需要监控。我们的想法是不对每个数据包进行采样,也不等待拥塞发生。相反,我们希望系统能及早捕捉到故障迹象,并在需要时才有选择性地启用高保真监控。
那么,如何做到这一点的呢?我们创建了以下四个关键组件,每个组件都有不同的任务。

数据收集器(Data Collector)
首先要收集网络数据,监控在任何特定时刻有多少数据通过不同的网络端口。我们使用 sFlow 进行数据收集,因为它有助于在不影响网络性能的情况下收集重要指标。我们会定期采集这些指标,以便随时了解网络的实时情况。
预测引擎(Forecasting Engine)
预测引擎是我们系统最重要的组成部分。它使用长短期记忆(LSTM)模型构建。我们之所以使用 LSTM,是因为它可以学习模式如何随时间演变,因此适用于网络流量。我们并不追求完美。重要的是发现不寻常的流量峰值,这些峰值通常会在拥堵开始前出现。
遥测控制器(Telemetry Controller)
控制器听取这些预测并做出决策。当预测的峰值超过警报阈值时,系统就会做出反应。它会向交换机发送命令,切换到详细监控模式,但只针对重要的流量或端口。它还知道何时退出,一旦情况恢复正常,就会关闭额外的遥测功能。
可编程数据平面(Programmable Data Plane)
最后一块是交换机本身。在我们的设置中,我们使用 P4 可编程 BMv2 交换机,它可以让我们即时调整数据包行为。大多数情况下,交换机只需转发流量,无需做任何更改。但当控制器开启 INT 时,交换机就会开始在符合特定规则的数据包中嵌入遥测元数据。这些规则由控制器推送,让我们只针对我们关心的流量。
这就避免了持续监控和盲目采样之间的权衡。相反,我们可以在需要的时候获得详细的可见性,而不会在其余时间向系统灌输不必要的数据。
实验设置
我们使用以下方法构建了该系统的完整模拟:
- Mininet 用于模拟叶脊网络
- BMv2(P4 软件交换机) ,用于可编程数据平面行为
- sFlow-RT 用于实时流量统计
- TensorFlow + Keras 用于 LSTM 预测模型
- Python + gRPC + P4Runtime 用于控制器逻辑
使用 iperf 在 Mininet 中生成的合成流量轨迹训练 LSTM。训练完成后,该模型将循环运行,每 30 秒进行一次预测,并存储预测结果以供控制器采取行动。
这是预测循环的简化版本:
For every 30 seconds:
latest_sample = data_collector.current_traffic()
slinding_window += latest_sample
if sliding_window size >= window size:
forecast = forecast_engine.predict_upcoming_traffic()
if forecast > alert_threshold:
telem_controller.trigger_INT()
交换机通过切换特定流的遥测模式立即做出响应。
为什么选择 LSTM?
我们之所以选择 LSTM 模型,是因为网络流量往往具有结构性,并非完全随机。它包含与时间、后台负载或批处理作业相关的模式,而 LSTM 尤其擅长捕捉这些时间关系。与那些单独处理每个数据点的简单模型不同,LSTM 可以记住之前发生的情况,并利用这些记忆做出更准确的短期预测。就我们的用例而言,这意味着只需观察过去几分钟的数据表现,就能发现即将到来的流量激增的早期迹象。我们不需要它来预测确切的数字,只需要在异常情况即将发生时发出警报即可。LSTM 为我们提供了足够的精度,可以触发主动遥测,而不会因噪声而过拟合。
评估
我们没有运行大规模性能基准测试,但通过我们的原型和系统在测试条件下的行为,我们可以概述这种设计方法的实际优势。
提前时间优势
此类预测系统的主要优势之一是能够及早发现问题。反应式遥测解决方案通常要等到队列阈值被越过或性能下降时才能使用,这意味着你已经落后于曲线。相比之下,我们的设计会根据交通趋势预测拥堵情况,并提前启动详细的监控,让操作员更清楚地了解问题的起因,而不仅仅是出现问题后的症状。
监控效率
该项目的一个关键目标是在不影响可见性的情况下保持较低的开销。我们的系统并非对所有流量应用完整的 INT 或依赖粗粒度采样,而是选择性地在短时间突发流量下启用高保真遥测,并且仅在预测表明存在潜在问题时启用。虽然我们尚未量化确切的成本节省,但该设计通过保持 INT 的专注性和短暂性,自然地限制了开销,这是静态采样或被动触发无法比拟的。
遥测策略的概念比较
虽然我们没有记录开销指标,但设计的目的是找到一个折中方案,提供比采样或反应式系统更深的可视性,但成本却仅为始终在线遥测的一小部分。以下是该方法的总体比较:

结论
我们致力于找到一种更优的网络流量监控方法。通过结合机器学习和可编程交换机,我们构建了一个系统,能够在拥塞发生之前预测拥塞,并在恰当的时间和地点激活详细的遥测功能。
预测而非被动应对看似微不足道,但它却将可观察性提升到了一个全新的高度。随着遥测在人工智能规模数据中心和低延迟服务中的重要性日益提升,这种智能监控将成为一种基本预期,而非锦上添花。
参考
- https://www.researchgate.net/publication/340034106_Adaptive_Telemetry_for_Software-Defined_Mobile_Networks
- https://liyuliang001.github.io/publications/hpcc.pdf
作者:Shireesh Kumar Singh
译自:https://towardsdatascience.com/from-reactive-to-predictive-forecasting-network-congestion-with-machine-learning-and-int/
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/59922.html