我一向相信 “横竖一颠倒,拨云见日”,这几乎成了必胜法宝。
先说个往事,再说传输质量评价体系是如何来的以及有什么用。
当年处理海量 iptables 规则为避免 O(mn) 损耗,我对规则的 match 做了排序预处理,又基于规则序号做区间排序,如此便转换为多维二分查找,损耗变为 O(mlogn)。这是一个令人自豪的陈年往事。
端到端传输算法领域,基于历史数据预测未来方面,传统做法一向是对指标数据直接做自回归建模,直接移动指数平均,试图通过这类数据轨迹预测场景走向,可想而知,效果非常不佳,原因不难分析:
- 指标太多,错综复杂,虽生成图表,仍要人工分析(曾打印出来在团建大巴上分析);
- 指标单位不同,无法综合运算;
- 指标动态范围不同,相互之间会压制,对冲,关键信息不突出;
- 指标作用力不统一,噪声无法无法从有效数据中分离;
- …
按必胜方法论,对指标先进行预处理,再做回归分析,而不是先对裸数据回归拟合,再分析。预处理的目标很明确:
- 消除量纲,统一参与运算;
- 同向作用,避免相互对冲;
- 统一范围,统一作用力度;
- 规范结果,只看高和低。
主要需要两类数学函数完成上述目标:
- sigmoid 函数: f ( x ) = a 1 + e b ⋅ x + c f(x)=\dfrac{a}{1+e^{b\cdot x}}+c f(x)=1+eb⋅xa+c,控制 b 可同向作用力,控制 a,c 可统一作用力范围;
- 凸显函数:所有 f(x) 均高时才高,类似方差用平方凸显差异,该函数可用 v = ( ∏ f ( x i ) ) 2 v=(\prod {f(x_i)})^2 v=(∏f(xi))2 简单模拟。
噪声作用力被同向信号的加强而减弱,单独的噪声不再污染结果。
完成这种预处理后,还需抽出固定画像指数类型的显式特征,比如持续拥塞,逐渐拥塞,随机高丢包,随机低丢包,良好等,分别对应这些指数中,显式特征只要凸显阳性(偏高),就意味着指数描述的事情一定正在发生。
现在看这个评价体系有什么用。先看离线画像指数的用处。
做过系统 oncall 值班的都面临过 “帮我看一下这个抓包文件 x 点 x 分有个重传,是什么原因”,虽然这人可能对 TCP 一无所知,但也不能总抱怨,偶尔他们的上报确实意味着那段时间系统出了问题。拿出那个时间段的各类画像指数,如果突发拥塞凸显阳性,就要去查一下哪个业务故障引发了突发,如果随机高丢包凸显阳性,就要查一下交换机网口,光纤,如果只是一两个随机丢包,良好画像凸显阳性,这个时候就有必要给咨询者好好讲讲 TCP 重传原理了,彼此都有时间的话。
再看实时在线画像指数的用处。
2016 年以来,传输算法包括拥塞控制在内越来越多基于机器学习建模,大量 AI 手段被引入,但似乎都是雷声大雨点小,独有 appex 效果不错但却并未公开算法。越来越多的公司有模有样地学着这种做法,但效果一般。有了我这个评价体系,事情就不再这样了,虽仍是大数据,自回归那一套,但效果完全不同。
本着先确定画像指数类型,再抽取显式特征,最后预处理生成指数的三步走原则,画像指数种类越全,链路实时特征的刻画就越准确,对正在传输的流量实时指导意义就越大。可以为每一个 peer 创建一系列画像指数,需要做传输算法的决策时,查看对应 peer 的所有画像指数,方可获得建议。
这思想也可用在主机端,为主机生成画像指数,比如 TCP 建连时间,建连错误率,RST 率,CPU 利用率,队列长度均可作为原始指标被 sigmoid 函数预处理后生成某些事件的画像指数,用来判定 “某个时间段发生了什么” 以及 “现在正在发生什么,所以未来一段时间很可能它会持续”。
所谓评价体系,它不解决问题,但它诊断并路由问题,这就是价值,但它恰由于不解决问题而被忽视,甚至在很多人眼里成为笑话。和评价体系类似的是稳定性治理,用到它的时候一定是出问题的时候,而出问题总是不好的。
浙江温州皮鞋湿,下雨进水不会胖。