暗启动

2020年4月29日

功能的暗启动是指采用新的或更改后的后端行为,并从现有用户处调用它,而用户无法察觉到它正在被调用。这样做是为了在公开发布新功能之前评估系统上的额外负载和性能影响。

例如,在零售网站的结账流程中添加交叉销售推荐。(这类推荐会说,如果我买了一个烤面包机,显然我还想买一套新的牛排刀。)计算推荐显然会增加系统的一些时间和负载,从而减慢结账流程,甚至可能减慢整个网站的速度。暗启动为我们提供了一种方法,可以在向公众发布功能之前评估这种影响。我们首先使用关键接口来构建新功能,并将其集成到代码的生产版本中,但不使用用户界面,这样用户就无法察觉到它的存在。但在添加关键接口之前,我们会修改结账流程,使其像在生产环境中那样调用推荐引擎,但不在用户界面中显示结果。这样,推荐引擎就会完成发布后所做的所有工作,但没有人能看到它在做什么。如果我们使用功能标记,我们就可以在生产环境中轻松地打开和关闭推荐功能,因此,如果我们确实看到对性能有令人担忧的影响,我们会在任何人真正注意到之前将其关闭。然后,我们可以继续调整推荐引擎,直到其性能达到可接受的水平,此时我们最终可以添加关键接口,并将该功能展示给全世界。

暗启动还可以实现重新实现的功能的并行运行。可以同时调用新旧代码,并检查其结果,以查看新算法是否有变化,但只将一个答案返回给接口。

当暗启动是一个增强现有用户交互而不是用户选择执行的过程时,它最有效。要测试依赖于用户选择的内容,金丝雀发布是可行的方法。

然而,自从这个词第一次出现以来,它的用法就一直受到语义扩散的影响。因此,我听说有人用“暗启动”来指代金丝雀发布,或部分发布策略的其他变体。