发布信息

回滚更新:发布软件的公司的必备条件

作者:软荐小编      2024-10-19 21:02:00     61

正如我们上周看到的由于 CrowdStrike 的错误更新而发生的情况,现在比以往任何时候都更加清楚的是,发布软件的公司需要一种在出现问题时回滚更新的方法。

在我们播客的最新一集中,What the Dev? 中,我们与功能标记工具 Lekko 的创始人兼首席执行官 Konrad Niemiec 进行了交谈,讨论了在代码中添加功能标记的重要性,以及可能出现的问题如果标志没有得到正确维护。

以下是该对话的编辑和删节版本:

SD Times 主编 David Rubinstein:多年来,我们一直在代码实验的背景下讨论功能标记,在代码实验中您可以将其发布给一小群人。如果他们喜欢它,您可以将其分发给更多人,或者如果它没有按照您想象的方式工作,您可以将其回滚而不会造成任何损害。您对整个功能标志情况有何看法?

Lekko创始人兼首席执行官Konrad Niemiec:功能标记现在被认为是发布软件功能的主流方式。因此,这绝对是我们希望人们继续做并继续传播福音的做法。

当我在 Uber 工作时,我们使用了一种名为 Flipper 的动态配置工具,然后我将 Uber 留给了一家名为 Sisu 的小型初创公司,在那里我们使用了市场上领先的功能标记工具之一。当我使用它时,虽然它让我们具有标记功能并且确实为我们解决了很多问题,但我们遇到了不同的问题,导致风险和复杂性被添加到我们的系统中。

因此,我们最终在代码库周围散落着一堆陈旧的标志,以及我们需要保留的东西,因为业务需要它们。因此,我们最终陷入了代码变得非常难以维护的境地,并且很难保持代码的整洁。我们最终只是引发了左右的问题。

DR:陈旧标志是什么意思?

KN:功能标志的实现通常看起来像代码中的 if 语句。它会说如果启用了功能标志,我会做一件事,否则,我会做旧版本的代码。这就是当您实际将其添加为工程师时的样子。陈旧的标志意味着该标志将一直存在。因此,您将完全推出它,但您将“其他”代码路径留在那里。所以你基本上有一些代码几乎永远不会运行,但它仍然存在于你的二进制文件中。而且差一点就变成了这个丧尸。我们喜欢称它们为“僵尸旗帜”,它会在你最意想不到的时候突然出现。你以为他们死了,但他们又复活了。

这种情况经常发生在那些试图快速发展的初创公司中。您希望尽快推出功能,这样您就没有时间进行标记干净更新并进行检查和分类以查看是否应该从代码中删除所有这些内容。由于这些过时的代码路径,它们最终会累积并可能导致问题。

DR:什么样的问题?

KN:一个简单的例子是,您有某种基于功能标志组合的未经测试的代码。假设您有两个功能标志位于代码库的相似部分,因此现在有四个不同的路径。如果其中一个有一段时间没有执行,很可能存在错误。因此,Sisu 发生的一件事是,当我们错误地关闭了错误的标志时,我们最大的客户之一遇到了问题。我们以为我们是在为他们回滚一项新功能,但我们跳入了陈旧的代码路径,最终给该客户带来了一个大问题。

DR:人工智能可以采用这种方式来检查代码并建议删除这些僵尸标志吗?

KN:使用当前的工具,这是一个非常手动的过程。你应该自己去检查并清理干净。这正是我们所看到的。我们认为生成式人工智能在这里可以发挥重要作用。现在,我们从简单的启发式方法以及一些生成式人工智能方法开始,以弄清楚嘿,这里有哪些真正复杂的代码路径?我们能否标记这些并可能显着降低这些过时的代码路径?我们可以定义允许的配置吗?

我们认为动态配置和功能标记本身之间的一个很大区别是,您可以将代码中的不同标记或不同的动态行为组合在一起作为一个定义的配置。这样,您就可以减少可能的选项数量以及您必须担心的不同代码路径。我们认为人工智能在提高安全性和降低使用此类工具的风险方面具有巨大的作用。

DR:目前功能标志的使用范围有多大?

KN:我们认为,尤其是在中型市场到大型科技公司中,可能大多数公司目前都在以某种方式使用功能标记。你确实发现有很大一部分公司正在建立自己的系统。工程师通常会将其掌握在自己手中并构建一个系统。但通常,当您的复杂性达到一定程度时,您很快就会意识到,要使系统既可扩展又可在各种不同的用例中工作,需要做很多工作。由此会出现很多问题。因此,我们认为这是很大一部分公司,但他们可能并不都使用第三方功能标记工具。有些公司甚至经历了整个生命周期,他们从功能标记工具开始,将其删除,然后花费大量精力构建与 Google、Uber 和 Facebook 拥有的类似工具,这些动态配置工具。

您可能还喜欢……

从 CrowdStrike 发布软件更新中断中汲取的经验教训

关于 Rust 基金会新成立的安全关键 Rust 联盟的问答

相关内容 查看全部