摘要: 本文通过 IBM SPSS Statistics 中的 Python
编程模块对原始 AT&T 网络数据进行预处理,然后结合线性模型和蒙特卡洛仿真分析,可以在原始少量数据的基础上大量仿真模拟企业的真实网络带宽使用情况,从而为企业的带
...
现状和意义
越来越多的企业,开始关注其广域网带宽的使用状况。对广域网带宽的使用分析,不仅可以确保企业关键业务得到充分的带宽保障,而且也可以发现带宽使用中最大的威胁来自哪里。由于大部分的企业都已经部署了基于
SNMP 或者 Netflow 的网管平台,因此对企业而言,带宽当前的使用状况是了解的。然而,为了解决业务发展对带宽增长的需求,就需要及时预测未来带宽的需求状况,从而为升级带宽提供依据。
由于广域网带宽非常昂贵,因此,当企业决定升级广域网带宽时,对升级后的带宽会有严格的要求。既要保证企业业务对带宽增长的需求,又不能升级过多,出现投资浪费的情况。
问题描述
目前,对带宽的预测主要有以下几种方法。第一种方法,通过计算得到。该方法通过累加关键业务所占用带宽,然后乘以同时在线的概率。第二种方法,通过企业现有网管数据做简单推演。第三种方法,通过企业现有网管数据建立数学模型,从而预测未来带宽需求。
上述前两种方法误差较大,无法满足企业升级带宽时,对准确性的要求。而本文所要讨论的,正是从企业网管数据着手建立数学模型,准确地预测未来带宽需求。
带宽分析方法
数据生成方法
企业网管工具介绍
目前,面向大中型企业的网管产品主要是基于 SNMP 协议或者思科的 Netflow 技术。基于 SNMP
协议的网管产品,优势在于捕获链路的利用率,用来生成利用率基线以及捕获网络设备的性能参数,比如 CUP、MEM
等。非常著名的 Orion NPM 就是这类网管产品;另外一类是基于 Netflow 的网管产品。它的优势在于对
IP 地址和流量协议的分析,如 Orion NTA。近年来,网管产品也出现对两种技术融合的趋势。
实例:AT&T 工具获取数据
本文所使用的网管平台,来自基于 Netflow 的网管产品 Application Traffic Analyzer,如下图
1 所示。生成报表时,可以定义的主要字段主要有:
Function:该字段用来定义报表的功能,比如,可以生成以协议、会话、目的 IP、服务分类为主要内容的报表;
Report Type:该字段用来定义生成报表的类型,比如图表、柱状图、饼状图等;
Granularity:该字段用来定义生成报表的颗粒度,比如 5 分钟、10 分钟、1 小时、1 天、1
星期等;
Traffic Direction:该字段定义流量的方向,是入流量还是出流量;
Statistic:该字段定义了统计方法,比如:求和、求平均值、求最大值、求 95% 等;
Scaling:该字段定义了流量单位,比如:Mbps、Megabytes、Kilobytes 等。
图 1. Application Traffic Analyzer
本文所使用的报表,以 5 分钟为采样单位,每天生成一张单独的报表。定义的主要字段如下:
Time range:9:00 am – 19:00 pm Scaling:Mbps Statistic:Sum Traffic direction:inbound(由于 Inbound 流量远大于 Outbound 流量,所以在这里我们选取较大方向的流量) Function:destinations(在这里,我们以目的地 IP 来排序所有的 inbound 流量) |
数据预处理
并不是所有的原始数据都能直接用来构建预测模型。通过对待解决的问题进行一个明确清晰的定义,来确定原始数据是否能直接支持解决方案的构建。如果不能,则需要对一些字段进行处理,生成间接数据建模。这样既可以提供足够的信息支持,也能保证预测结果是可衡量、可理解的,从而便于评估解决方案的结果。
数据分析和定义
从 IT 部门拿到的原始数据,在预处理前首先要进行数据分析。根据解决方案的目标定义表之间的关系、表的结构(目标变量和因变量)。
本文中,IT 部门提供了从 2012 年 11 月到 2013 年 1 月的网络流量数据。这些数据按照每天的网络流量独立制表,半年共计
92 张表(EXCEL 格式),每张表格式统一。现在以 2012 年 11 月 17 日为例,介绍原始表的结构。
图 2. 原始表结构
如图 2 所示:原始表的行变量是日网络流量进入前 100 名的 IP 集合,其中包括网络环境下的服务器(Server)和
PC 终端机器(Client)。表的列变量是每个 IP 每隔 5 分钟(时间点)记录的网络流量值。从早
9 点到晚 7 点共计 119 列。
本文的目标是要找到影响某企业网络总流量的因素。原始数据提供的信息有记录时间、Server 流量和 Client
流量。根据数据分析结果,我们定义了用于建模的终表结构,如图 3 所示。
图 3. 终表结构
我们定义的目标变量是网络总流量 COS_Total,因变量有记录日期 Date,前 10~70 个服务器网络流量总和从
Top10Server_sum 到 Top70Server_sum,前 10~70 个终端机器网络流量总和从
Top10Client_sum 到 Top70Client_sum。每一张原始表的信息作为终表的一个行记录存在。
Python 编程接口,数据预处理自动化
从终表和原始表的结构可以看出,原始表的变量不能直接作为终表的变量。这就需要把每张原始表的时间点流量信息转换为日流量信息。我们认为能够满
95%用户网络流量需求的流量值可以作为企业当天的网络流量总和值。
转换的思路是:1)每个 IP 每天的网络流量值 total_per_IP,等于升序排列该 IP 当天所有时间点网络流量值后,取第
95%的值。根据 total_per_IP 值选取排名前 10~70 的服务器和终端。2)每天前 10~70
个服务器/终端产生的网络总流量 topNClient/Server_sum,取前 10~70 个服务器/终端产生的网络流量均值。3)网络总流量值
COS_Total,等于将所有 IP 在每个时间点产生的网络流量总和升序排列后,取第 95%的值。定义如下:
total_per_IP=Percentage(Sort(Time1,Time2,Time3,…,Time119)ascending)95% topNClient/Server_sum=Mean(SumTime1,SumTime2,SumTime3,…,SumTime119) COS_Total= Percentage(Sort(SumTime1,SumTime2,SumTime3,…,SumTime119)ascending)95% |
统计分析软件 IBM SPSS Statistics 在拥有的强大的数据处理能力的同时,也提供了丰富的编程接口(Python、R、.Net)。本文运用
Statistics 的 Compute、Aggregate、Transpose、OMS、Merge 等功能对原始数据进行操作并整合,最后通过编写
Python 脚本批处理大量数据表,实现数据预处理自动化。关于如何在 Statistics 中运行 Python
脚本,请参见 Statistics 产品帮助文档。
这里需要提到的是,原始表中的没有区分服务器和 PC 终端的 IP 地址,Python 封装的 Netaddr
包能够根据客户设定的规则对 IP 分类。处理过程如下图 4 所示。
图 4. IP 分类脚本
建模及分析
线性模型的建立
通过 IBM SPSS Statistics 提供的线性回归分析模块,设置界面如下图 5 所示,可以针对
3 个月的数据,寻找 COS_Total 与各个输入变量之间的关系。
图 5. 线性回归分析
通过表 1 和表 2 可以看出可以利用 Top40Server_sum、Top50Client_sum
建立线性模型来预测 COS_Total,预测准确度达到 86.2%,说明 COS_Total 与 Top40Server_sum、Top50Client_sum
的关系最为紧密,并可以建立线性模型的方程来预测 COS_Total。
COS_Total = 2.264+ 2.774 * Top40Server_sum + 2.976
* Top50Client_sum
表 1. 模型概要
表 2. 系数
蒙特卡洛仿真分析
蒙特卡洛仿真分析是 IBM SPSS Statistics 21 版本后新增加的功能,其原理是当问题或对象本身具有概率特征时,可以用计算机模拟的方法产生抽样结果,根据抽样计算统计量或者参数的值。随着模拟次数的增多,可以通过对各次统计量或参数的估计值求平均的方法得到稳定结论,蒙特卡洛分析在金融、医药等多个行业有着广泛的应用。
因为在这里只有 3 个月的网络流量数据,并且有预测 COS_Total 线性模型方程,因此我们可以根据三个个月数据的分布特征,用模拟功能生成大量模拟数据,并根据模拟数据分析出
COS_Total 的分布特征,从而对公司的合理带宽使用提供依据。
在 IBM SPSS Statistics 22 中选择分析菜单下的模拟模块,打开如下图 6 界面,选择“输入方程”。
图 6. 模拟模块
在“方程编辑器”对话框中(图 7),将前面用来预测 COS_Total 的线性方程输入到下面的“数字表达式”中,单击“继续”按钮确认。
图 7. 方程编辑器
在“模拟”页面,单击“拟合全部”按钮,Statistics 软件就会根据已有的 3 个月数据中的 Top40Server_sum
和 Top50Client_sum 变量自动的计算其相应的分布,可以发现 Top40Server_sum
符合 Weibull 分布,而 Top50Client_sum 符合正态分布。单击“运行”按钮,就会根据这个两个变量的分布和已有的线性方程,对
COS_Total 的概率分布进行仿真计算。
图 8. 模拟构建器
蒙特卡洛仿真分析得到的 COS_Total 的概率分布如下图 9 所示。图中的横轴表示 COS_Total
的取值范围从-100M 到 500M,纵轴表示了在每一个 COS_Total 值上的概率密度,相应的表中分别给出了覆盖
5% 的 COS_Total 值,5%-95% 的 COS_Total 值和 95% 的 COS_Total
值。因此说明,公司采购带宽如果设定为 332.95M 时,可以满足 95% 的情况下的使用,如果采购带宽设定为
54.52%,则只能满足 5% 的情况使用。
图 9. 概率密度
业务决策
企业带宽现状评估
图 10. 网管报告
从上述网管报告(图 10)可以看到,企业带宽的实际使用情况已用不同颜色区分。绿色表示链路占用率小于 50%,说明链路处于健康状态。黄色表示链路占用率处于
50%-70%,当处于这种状态时,说明网络处于拥塞状态,丢包时有发生,需要做带宽的升级准备了。红色表示链路占用率大于
70%,当处于这种状态时,业务性能会严重下降,无法保障业务的正常使用。我们可以得出结论,企业需要尽快升级带宽了。那么,升级到多少合适呢?
企业带宽升级决策
根据我们前面预测分析的结果,在 95%的情况下,企业带宽位于 332.95Mbps 以内,这和网管报告中的带宽实际使用情况是一致的。合理的带宽升级方式,是既要保证良好的用户体验(带宽使用率<70%),又能够尽量节省成本。因此我们建议带宽升级的升级范围是
475.6Mbps(332.95/0.7)~665.9Mbps(332.95/0.5)。将带宽升级到 475.6Mbps
是一个合理的方案,它可以满足企业绝大多数情况下对网络的使用要求(绿色),即使全网资源被占用也不会出现性能严重下降(红色)的问题。当然,如果企业对网络性能要求很高并且愿意投入成本,选择升级到
665.9Mbps 后,企业的网络处于会长期处于健康状态(绿色),从而对关键业务性能有更可靠的保证。 |