在优步,工程团队每天在全球多个城市、多个时区同时为我们的各种移动应用程序发布功能。为了确保这些功能安全着陆,我们利用我们的实验平台,这个工具可以让我们监控每个新特性如何通过阶段性的推出过程影响我们的软件和系统。
除了在部署之前对我们的代码进行彻底测试外,我们还希望了解新功能是否可能以意想不到的方式无意中与我们的应用上的现有功能无意中互动。传统上,修复这些问题需要开发人员宣传大量时间调查正在进行的回归或错误,并将其映射回导致它们的功能。此过程通常会减慢特征开发,并且可以对用户体验产生负面影响。
因此,我们构建了一个新系统,让我们能够快速且轻松地确定哪些特性可能导致问题。除了用户友好的分析仪表板,该系统还支持预定的自主功能推出,因为我们可以检测和回滚显示任何问题的功能。由于工程师可以更快地检测出回归的原因,我们可以通过在问题广泛传播之前修复问题来减轻对客户的影响。
增强归因和回归检测
我们的现有阶段的卷展栏过程使用从科学实验中借来的方法:随着我们向客户推出一个新功能,那些收到它的最终用户被认为是治疗小组,剩下的最终用户是控制团体。我们从治疗和对照组中收集事件,将它们与不同的健康指标相关联,以检查回归。如果我们检测到回归,我们可以快速回滚部署并解决问题。
我们的工程师同事冯小姐(Eva Feng)和赵振宇(Zhenyu Zhao)在去年的文章中详细介绍了这个分阶段推出的过程,建立具有Uber Engineering的智能实验平台.
为了启用我们的Auto rollts系统,我们通过增强其监控功能和添加分析仪表板来构建现有的框架,这可以让开发人员轻松地查看导致回归的原因。现在,如果我们检测到回归,我们可以将其归因于导致它的功能,创建该功能的所有者,以及应用程序中引入回归的部分。
在部署期间,系统在不断倒入我们的生产平台上的度量标准中查找应用程序状态事件,崩溃事件和应用程序 - 不响应(ANR)事件。系统将这些度量与部署的功能与事件相关联,然后通过统计处理器和决策引擎传递结果以确定是否存在回归。决策引擎的输出确定了自动卷展系统所采用的操作,无论是恢复回归的情况,也都与特征部署进行了求助。
我们增强的监视使我们能够进一步深入这些指标,以识别正在经历回归的事件。在下面的图3中,新特性导致了一个崩溃事件,标识为crash_f6ddab ...在其崩溃指标部分中,我们的仪表板使我们能够确定这种类型的崩溃在处理流中比控制流程更频繁地发生了10%。
分析仪表板的移动参数部分突出了新功能对应用不同部分的影响。图4的仪表板表明该功能对应用的确认流程、支付流程或支持流程没有显著影响:
我们的增强型暂存卷展栏系统允许开发人员评估正在部署的新功能的影响,并且在优步平台中检测到的任何回归都可以归因于该功能。
分析背后的科学
在Auto rollout系统的基础上,我们的实验平台通过将其与实验事件关联来计算使用的每个指标。为了启用自动推出,我们改进了回归检测,以便框架能够更准确地启动回滚。
在每个度量标准上运行的回归检测算法由a供电序贯似然比检验.我们查看以下事件以计算此系统分析的指标:
- 移动事件:移动应用程序在应用部分中发出检查点事件。这些事件包括“派出请求”,“登录”,以及“请求行程”等。
- 撞车事件:这些事件在应用程序崩溃时触发。
- 应用程序未响应(ANR)事件:当应用程序卡住时,这些事件将不会响应用户交互。
个性化指标参数
为了确定一个指标的回归,我们构造假设检验如下:
H0:|在处理中的信号 - 控制中的信号|<=阈值
H1:|信号在处理中 - 控制中的信号|>门槛
我们使用序列测试,在治疗组和对照组之间的差异周围构造一个“始终有效”(1-alpha)置信区间,
P(|Signal in Treatment - Signal in Control| > Threshold | H0) < α,
alpha =I型错误.(在统计学中,第一类错误是指错误的阳性结果。)
我们继续监控,直到样本大小达到我们预期的样本量,这样
p(|在处理中的信号 - 控制| <阈值| H1)
β=II型错误.(在统计数据中,II型错误意味着假阴性结果。)
如果没有检测到回归,则认为rollout是安全的。该统计测试是使用序列测试算法构建的,它可以在不膨胀第一类错误的情况下进行连续监测。我们监控Uber的乘客、司机和Uber Eats应用的不同指标。
最小可检测效果(MDE)表示我们可以检测到相对于对照体验的治疗中最小的变化。我们使用的度量标准在噪音水平和可检测性的不同之处,因此我们为每个阈值使用不同的MDE阈值。如果我们使用MDE阈值X,那么为了获得90%的自信,没有回归> X,我们需要预测我们在治疗和控制流中所需的用户数量。下图表明,对于达到0.8的指标,达到3%的MDE阈值,我们需要至少在治疗和控制流量(组合)中至少〜18,000个用户(合并),因为我们可以将卷展拨到90%置信度。
调度功能卷展栏
除了让工程师更容易识别新特性的问题之外,我们改进的回归监控还让我们能够自动化特性部署,因为如果出现错误,系统可以回滚部署。我们的Auto rollout系统减少了开发人员的疲劳,因为用户不需要手动激活和监控rollout的每个步骤,并使整个过程运行得更快。
自动卷展系统由两个主要组件组成:推出UI,可让用户设置Rollout参数和Rollout配置处理器,通过其生命周期管理每个功能卷展栏的进度。
推出UI.
Auto Rollout系统允许用户通过一个简单的用户界面设置一些配置参数。他们可以选择治疗组对于卷展栏,开始日期,和天数在其上完成卷展栏。
推出配置
每个卷展栏都有一个生命周期,从初始设置开始并结束完成。卷展栏配置处理器通过将卷展栏通过其阶段移动,监视背景中的分析以及更新每个阶段的用户来管理生命周期。这种免提方法使用户能够在不必在多天内监控它们的情况下延装功能。工程师可以立即启动其卷展览或安排他们的未来日期和时间。
成功的over-off部署
自推出以来,该系统在Uber应用程序中为特征进行了成千上万的推出。Auto Rollouts系统的添加导致优步工程工作流程的许多优点:
- 归因:可以抓住回归并归因于特定的特征或所有者。
- 更大的稳定性:工程师可以在任何时间,夜晚或一天中设置系统来推出该功能,并确保将针对回归的多元度量进行监控。
- 提高部署速度系统的自动化和捕捉回归的能力使我们的功能推出速度提高了一倍。
如果您有兴趣监控,自动化和安全功能部署解决方案,考虑加入我们的团队!
订阅我们的新闻以跟上优步工程的最新创新。





