本篇推文小编将向大家介绍我们THU NetMan小组的研究成果:FUNNEL。FUNNEL是一种快速、准确评估大型Web服务中软件变更影响的框架。当服务性能出现未曾预料的下降时,它能够让软件变更及时回滚以减少损失。
在大型Web服务如搜索引擎、社交网络中,运维人员需要频繁地部署软件变更以引入新的特征,解决之前软件版本的程序错误,或提高服务性能。软件变更包括软件升级和配置变更。但是,并非每一次的软件变更都能够达到预期的效果。相反,一些软件变更在部署之后,出现了服务性能下降的情况,进而影响用户体验,甚至导致服务收入下降。国际大型互联网公司均出现过由软件变更导致Web服务受损甚至中断的事例:
Case 1: 2012年10月,Google的一次负载均衡软件升级失败,导致全球Gmail业务受损,且持续时间长达18分钟。
一般的,当Web服务性能出现变化时,Web服务及其部署的服务器的关键性能指标(Key Performance Indicator, KPI) 曲线会出现剧变。KPI涵盖了广泛的性能指标,包括Web用户感知的问题(如用户点击时延)、服务性能(如用户点击量)、服务器硬件健康状况(如CPU使用率、内存使用率)等。因此,检测KPI曲线的剧变可以检测Web服务性能的变化。
通常情况下,运维人员会通过灰度发布的方式部署软件变更。在灰度发布方式下,运维人员首先将软件部署在一个服务器子集上,并持续观察KPI曲线,以确定软件变更的影响。如果该服务器子集上的KPI表现与预期相同,则进一步将软件变更部署到全部服务器上,否则回滚此次软件变更。下图展示的是一次软件变更后发生KPI曲线陡降的例子。由于软件变更关联的KPI曲线数量巨大、类型多样、KPI曲线剧变原因复杂,传统的人工检测和判断KPI曲线剧变以评估软件变更影响的方式,存在易出错、不易扩展、消耗大量人力物力资源的缺点。
自动化评估软件变更影响的挑战
-
同时满足低检测时延和高准确性要求。检测时延指的是一条KPI曲线发生剧变的时间与该剧变被检测到的时间的时间差。由于错误的软件变更会导致用户体验下降和/或收入下降,因此软件变更影响评估机制对KPI曲线剧变的检测时延必须要尽可能短。而较低的检测时延往往导致检测KPI曲线剧变的准确性下降。因此,同时满足低检测时延和高准确性要求,对于自动化的软件变更影响评估是一个巨大的挑战。
-
KPI数量巨大。一次软件变更往往关联了数百个甚至数万个Web服务和服务器的KPI曲线。由于在任一KPI曲线上都有可能检测到软件变更的影响,因此,需要检测软件变更关联的所有KPI曲线是否发生剧变,以评估软件变更的影响。同时,在大型互联网公司中,每天会部署大量的软件变更。例如,在我们课题组研究的互联网公司中,每天发生几千次软件变更。这就导致自动化的软件变更影响评估机制需要同时检测百万级的KPI曲线。
-
KPI类型多样。KPI曲线的种类非常多,它们的表现形式也是不一样的。如下图所示,有的KPI曲线非常稳定,有的KPI曲线是多变的,有的KPI曲线存在周期性。这就要求自动化的软件变更影响评估机制对各种类型的KPI曲线具有良好的鲁棒性。
-
KPI曲线剧变可能由其他因素导致。除了软件变更,其他因素包括周期性、网络硬件故障、恶意攻击等也可能导致KPI曲线的剧变。因此,自动化的软件变更影响评估机制需要排除掉由其他因素导致的KPI剧变。
FUNNEL设计思想
针对上述挑战,我们课题组提出了一种自动化的软件变更影响评估机制——FUNNEL。FUNNEL能够在软件变更发生之后快速、准确地检测大量KPI曲线中的行为变化,并且准确地确定这些行为变化是否由此次软件变更导致。下图是FUNNEL的设计框架。
FUNNEL主要分为三部分:
-
确定影响集合: 由于运维人员会基于服务层次来命名服务,所以FUNNEL可以自动化地确定影响集合。影响集合指的是可能受影响的服务器、实例和服务的集合。
-
检测性能变化:FUNNEL使用一种基于奇异谱变换的性能变化检测方法,以准确快速地检测KPI曲线剧变。
-
排除其他因素导致的KPI曲线剧变:FUNNEL使用分流测试的思想确定这些KPI曲线剧变是否由软件变更导致。
确定影响集合
不同软件变更的影响范围是不同的。一些软件变更的影响是局部的,而另一些软件变更的影响是全局的。例如,广告服务中的软件升级可能对几乎所有的Web服务产生影响。如果错误的判断影响范围,可能会导致Web服务性能下降后检测时延增大,并产生误报警。
-
变更服务:模块A。
-
关联服务:模块B、模块C、模块D。
-
测试实例:服务器1到服务器l以及进程1到进程l。
检测性能变化
排除其他因素导致的KPI曲线剧变
-
针对灰度发布中非关联服务的场景
-
FUNNEL采用分流测试的思想,对比测试组和对照组。这一对比的原理是,除了软件变更以外的其他因素既会影响测试组,也会影响对照组。测试服务器的KPI曲线构成测试组,而对照服务器的KPI曲线构成对照组。
-
FUNNEL使用DiD方法来确定KPI剧变是否由软件变更导致。DiD用以评估在特定时间点实施的干预措施的效果。具体的,DiD 比较测试组与对照组随时间的变化,并将差异归因于软件变更的影响。DiD 基于以下假设:在没有软件变更的情况下,测试组 KPI 曲线的平均测量值与对照组 KPI 曲线的平均测量值之间的差异不会随时间的变化而变化。
-
针对关联服务和非灰度发布的场景
-
因为关联服务中没有对照服务器或对照实例,所以对照组为空。此外,如果运维人员一次性在所有服务器上部署软件变更,而不是以灰度发布的方式部署软件变更,此时对照组也为空。
-
在本场景中,测试组由软件变更前后的 KPI 曲线测量值构成,而对照组由 KPI 曲线的历史测量值构成。如果 Web 服务或服务器的性能变化是由周期性导致的,那么对照组和测试组之间应该没有相对的性能变化。
结论
本文介绍了一种新型的机制——FUNNEL,用于快速、准确地评估大型Web服务中软件变更的影响。对于每个软件变更,FUNNEL 分析可能受影响的所有服务、进程和服务器,并自动构建影响集合,然后快速、准确地检测影响集合中的 KPI剧变。随后,FUNNEL 使用 DiD 方法确定由软件变更引起的性能变化。