网络性能评价的实现
网络的优劣会影响网络交互的延迟时间、稳定性和速度,从用户体验上集中表现为打开页面的速度缓慢。比方在较差的网络并发的请求数会被降低,以避免网络性能由于堵塞而进一步恶化。
针对不同网络品质的优化的前提就是要有一种方法来度量网络的品质。
眼下度量网络的品质的方法假设仅以网络连接类型来区分,比方2G, 3G, Wifi等。无法有效感知到当时的网络状态。在同一网络连接类型下,网络的品质仍有大幅波动。可能会由于堵塞以及线路上问题导致延迟上抖动(jitter)、丢失数据包、数据包损坏等情况。
在现实场景中,比方繁忙时段,或者处在信号不好的区域时(如交通工具上),使用网络类型来推断当时的网络品质会有非常大偏差。
本文基于对一段时间的网络数据的记录。进行算法处理,能够測出一个衡量当时网络状态的指标(MI: Measurement Index)。详细应用到移动设备上时,考虑到计算量的问题,能够使用近似算法减小计算的复杂度。
眼下的使用的算法是结合历史数据进行统计,即执行指数平滑算法。这样理论上由于同一时候使用了本次及之前的历史的数据进行计算。能够将单次统计的数据量降低。
网络数据的定义是通过模拟測试环境录制得来。当中包括两个主要内容:
1. 定义网络评測的參数
2. 定义网络状态区间范围
在实际应用时,还须要考虑数据採集的区间和数据量。以及数据的平滑处理。
网络评測的參数
经过对照评估下面六个參数相应于latency和bandwidth的设定。得到数据例如以下:
1. Speed, 传输速率:由收完数据的时间除去所收取的数据大小。
2. Header Received: 收到响应头的时间 (即TTFB)。
3. Connected: 连接到主机的时间。
4. Sent: 在Java层完毕调用完毕发送请求的时间。
5. DNS Resolved: DNS解析的时间。
6. Finished: 整个请求完毕的时间。
对照分析各參数中位数与网络状态(rate)后,发现下面參数与网络状态的关联关系,当中Header Received的关联关系为正相关。
所以定义由Header Received时间定为网络衡量指标
定义网络状态区间范围
关于网络状态范围,由于网络的波动性。不能限定在详细的一个值的区分。
这里使用K中值分类法(R Script: compareData.R)。
将数据分为四个簇。依次取出其设定范围。再以眼下測试发现最大值分布在12000左右(约为6000延迟)。 所以使用13000,即最大延迟数。进行归一化处理。
下图表示的为分为四个簇的情况(每一项数据为一个URL測试5次所得结果):
当中cluster 4最佳,cluster 1为最差的区间, 为保守起见,在眼下的实现将cluster 1与cluster 2合并来看。
定义数据分析的时间段
依次採集分析2x1URL, 5x1URL,5x2URLs, 5x4URLs及3x1URL数据。对照各种情况下数据聚合的情况。
当中2x1URL 表现数据不足,四个簇不能非常好的分隔:
这时的每一项值的数据量为50条左右。
当3x1URL时。每一项值的数据量为80条上下,四个簇重合部分已经有非常好的改善:
由上面可知。假设使用独立样本进行计算。50笔数据较难获得有效的样本数据。至少须要80笔数据,才干得出较合适的统计。而移动网络下,特别是2G网络下,80个请求会耗时太久,不利于及时体现当前网络数据。
眼下的使用的算法是结合历史数据进行统计,即执行指数平滑算法。这样理论上由于同一时候使用了本次及之前的历史的数据进行计算,能够将单次统计的数据量降低。
定义数据的样本大小及採集周期
眼下选定最小採集样本为15笔请求,包括失败的请求,当中失败的请求视为一次最大延迟记录(取值见上面的讨论)。 最小採集周期为30秒,最大採集周期为4分钟。
考虑到网络的变化特性,一是不能太快跳变,二是及时逼近。另外在移动网络下。数据量可能达不到採集的要求,必须有效地利用历史数据。所以系数的选择须要考虑到两个方面:一是收敛速度,二是兼顾历史数据(利用历史数据进行计算。并避免数据不准导致的误判。)。
这里存在三个变量: 採集的周期(t)。採集的样本数(n)及平滑系数(a)。
採集样本数是指最小能够用于统计运算的数据数量。依据模拟測试(R脚本为simulatorPhase.R), 推断数据集的大小的波动性能够在平滑系数的辅助下达到一定的稳定性(平滑系数越小,数据分布越稳定。但收敛速度越慢.)。 比方下图中使用样本数15、平滑系数0.3的组合能够达到样本数20、平滑系数0.4组合的标准差范围。
(平滑系数越大标准差越大!)
採集样本为20。平滑系数为0.4(总数据量4000)。结果的标准差为579.87(非定值):
採集样本为15,平滑系数为0.4(总数据量4000),结果的标准差为589.16(非定值):
採集样本为15,平滑系数为0.3(总数据量4000)。结果的标准差为576.41(非定值):
採集样本为15,平滑系数为0.6(总数据量4000),结果的标准差为872.23(非定值):
採集周期是指最小的数据採集时间,在此时间内仅仅负责收集数据,不进行计算。在採集周期内可能并不会收集到足够的数据。就会延长到一个最大採集周期。
採集的周期的大小取决于最小採集样本的大小。眼下设定为30秒。
最大採集周期的选定,取值于移动网络下,以无图模式一分钟浏览一个新浪新闻页面。达到採集样本数量的时间。即4分钟。
下图为上述參数在实际測试过程中观察到的Measurement Index分布的情况, 在数据演化将近6次(约3分钟)后维持到6385上下。
定义数据的平滑系数
不同的平滑系数会一个处理波动时的浮动范围,表示无法明白判别的区域,归为较好的网络处理。由此定义了实现时使用的模糊区间。
測试对照了多个候选的系数。以0.3及0.65为例说明例如以下。
平滑系数:0.3
指数0.3是假设网络环境相对稳定,但受网络抖动的影响会有波动。
在计算时选择经过多样本获得的历史数据的比重大于新取得的单样本数据。缺点是会造成逼近速度变缓, 近8次逼近到目标值(相差200以内)。
再模拟两次数据统计的波动。
单次统计数据约为2000。若分成两次统计,可能会遇到一次3500,后一次500的大幅波动。应用系数0.3后统计结果保持在平均值2000的上下200的范围, 相应于指数上下浮动0.03。
下面为其示意图:
8次逼近所需时间视最小採集周期而定,普通情况下约为4分钟时间。
考虑大幅波动时的标准差,以3000~1500的波动为例。其标准差为:447.56。
系数0.3最大的优势在于适应小样本数据的情况。详细之前的讨论。为了弥补基本的缺点,将在一个网络下第一次计算时。先使用系数0.5, 再调整为0.3。效果例如以下:
下面为实际測试结果(latency:2000,bandwidth 80kbps, standard MI:~2500):
平滑系数:0.65
当选取0.65作为系数时,当前值所占的比重更高。须要3次运算逼近到设定值(130以内,占比小于1%)。
如上模拟两次数据统计的波动。这时统计结果保持在平均值2000的上下约800(逼近于777)的范围。即设定的界定值前后800相应于性能指数上下浮动0.06。
考虑大幅波动时的标准差,以3000~1500的波动为例,其标准差为:381.9。较系数取0.5时并没引入太多的误差,却将收敛所用的次数降低了2次。
与实际场景的相应
与现实场景的相应关系例如以下(收集的现场数据):
Scenario | Latency | Index |
包括地铁繁忙时间的数据(2G) | 500~6000 | 19~100 |
地铁一般场景(2G) | 100~400 | 5~64 |
公司座位 |
200~500 | 32~52 |
3G&Wifi | 50~80 | 0~4 |
下面为其分布示意图(横轴依次代表上表中的五项,请忽略第3项数据):