亚马逊AWS官方博客
互联网性能观测系列之二 – 时序直方图的使用
引言
有效的观测可以帮助我们定位影响用户感受的主导因素,进行有针对性的优化。在上一篇博客中,我们一起探讨了互联网性能观测过程中非常重要,但经常会被忽视的 2 个指标——Trim 指标和 PR 指标,我们也谈到了直方图的使用——帮助我们找到需要优化性能的局部群体,这 1% 的群体拉低了整体的网络性能。
直方图是否就可以概括全貌?我们先来看一下这一组直方图:
这一组直方图展示了一个客户端群体的在某一天某 2 个时刻的首包时延分布,横坐标是首包时延(ms 毫秒),纵坐标是数量。这 2 个时刻的数据分布都集中在<500ms 的区域,但在细节上还是有一些不同,如第 2 小时直方图 500ms-600ms 区间的数据量明显低于第 1 小时直方图。仅从某几个时刻直方图来进行性能观测并不能给到我们确信的结论;互联网也有潮起潮落的规律,客户端和服务端也会经历配置变化和软件升级,这 2 个时刻的直方图是否恰巧落在了这个时间区域内?
什么是时序直方图
如果我们要了解 1 天或者更长时间跨度的数据分布变化趋势,我们需要绘制很多直方图,并且观察起来十分不方便。所以直方图缺失了一个关键维度——时间。通过时间维度的加入,我们可以了解互联网性能数据在时间维度上的分布变化,更加确信地锁定优化目标,甚至可以找到性能变化的关键时间点。时序直方图可以来帮助我们实现这个目标。
让我们来看一下时序直方图是如何来展现一个 48 小时内首包时延的分布变化的:
时序直方图和直方图感觉不是一类展现图表?其实他们都来自于同一组数据。时序直方图将某个时刻的直方图做了一个压缩,通过染色来表示这个指标区间数据点密度,然后将每个时刻的直方图合并起来形成时序直方图,具体变换演示如下:
时序直方图带来的新洞察
我们再来看一下这张记录了 48 小时约 1 千万次访问的首包时延分布的时序直方图,有哪些新的洞察?
首先,访问量低谷发生在每天的 21 点,访问量峰值发生在每天的 14 点;首包时延在 60ms 以上的区间和 5ms-20ms 的区间波动比较明显。是否和 CDN 系统的命中率有关?
其次,60ms-70ms 区间和 20ms-30ms 有 2 条黄带(通过红色虚线框标注)贯穿整个时间轴。这是一个优化点,如果可以消除这 2 条黄带,可以提升整体的首包时延。
最后,第 2 天的 17:00 点左右,访问量有一次陡降。是不是有一次系统故障发生?
时序直方图实现代码
和直方图一样,我们使用了 Amazon Athena 服务对 CloudFront 日志文件进行了 ETL 的工作:对 CloudFront 日志信息进行了标准化和裁剪。SageMaker Notebook 服务为本代码提供了 IDE 环境,可以方便地引用 Amazon boto3 SDK 通过 Python 来调用 Athena 服务。在此基础上,引入了 numpy 模块,调用 histogram2d 函数来实现时序直方图。
代码请参见 GitHub/2D-Histogram。
总结
时序直方图通过在直方图基础上加入时间维度,展现了性能指标数据分布在时间上的变化,让观察者可以获取到新的洞察。紧接而来的下一个问题是:如何将这些洞察转变为优化措施?我将在下一篇博客中介绍——如何基于 CloudFront 日志进行性能指标→ 可调整参数的相关性分析,来进行针对性的性能优化。