软件韧性:从意外中恢复的 7 个必备因素

软件弹性是任何可扩展、高性能和容错软件的必备品质。

软件从意外事件中恢复的能力是软件弹性。这意味着软件工程师必须预测意外事件并对其进行解释。创建这种容错的解决方案可以在代码中或在基础设施层上。

分布式系统会失败,一个有弹性的软件系统不会试图避免失败,而是期待它并优雅地响应。

在这篇文章中,我们将研究您需要注意的一些方面,以实现软件弹性。

目录

什么是软件弹性

弹性软件因素

逐步推出/部署

重试软件弹性

弹性软件的超时

倒退

幂等操作支持软件弹性

数据库事务

速率限制

其他需要考虑的事项

结论

什么是软件弹性

卡内基梅隆大学软件工程学院博客指出:

基本上,如果一个系统在逆境中继续执行其任务(即,如果它提供所需的能力,尽管可能导致中断的过度压力)。具有弹性很重要,因为无论系统设计得多么好,现实迟早会合谋破坏系统。

如果软件系统在发生意外事件时能够部分正常运行,这就是软件弹性。在基础设施层面,有 NetFlix 臭名昭著的 Chaos Monkey。Chaos Monkey 进入您的生产环境并随机开始杀死实例。这可以作为软件弹性的压力测试。

软件弹性也受到爆炸半径的影响。如果就其可以覆盖的半径而言,变更风险较低,则更容易进行变更。如果爆炸半径非常大,您可能还需要考虑其他事情。

弹性软件因素

有多个因素是软件弹性方程的一部分。以下是我在十多年的软件工程职业生涯中的一些经验。

下面提到的示例将与电子商务有关,因为我已经在时尚电子商务领域工作了将近 9 年。

让我们开始吧。

逐步推出/部署

逐步推出或部署是允许访问部分版本的能力。它可能是金丝雀部署或蓝绿色部署,或者只是一个功能标志,甚至是滚动部署。您可以以丰富多彩的方式阅读有关这些部署技术的更多信息。

这里的重点是,即使这是一项手动任务,它对于弹性软件也非常重要。想象一下,您正在更改电子商务 站的支付 关。如果你进行一次大爆炸,100% 的交易从以前的支付 关 A 转到新的支付 关 B,你将陷入困境。

但是,如果您可以像 1% 的客户一样试用 1 周,那么通过新的 关集成来消除任何错误会很有帮助,并且爆炸半径仅为交易的 1%。

慢慢地,你可以从 1 到 5,然后到 10,最后到 100,充满信心。在部署时进行健康检查也是如此。如果运行状况检查失败,部署将自动回滚。根据服务的不同,您甚至可以逐步推出,这意味着这个特定版本只能获得 2% 的流量。运行在基础设施层而非代码层上的 Google Cloud 等服务支持逐步推出。

弹性软件的另一个重要考虑因素是部署而不是发布。

重试软件弹性

如果您调用另一个系统,您总是需要期望它们可能会失败。因此,在这种情况下,重试机制会有所帮助。例如,您正在调用产品评论服务来创建新的产品评论。

如果它未能创建评论,您可以轻松地重试 1 或 2 次以获得成功的响应。

下面是一个非常简单的 curl 示例:

这里的 curl 总是会重试 3 次,因为它会返回 500 错误。下面的 curl 只会运行一次,因为它会在第一次尝试时返回 200:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月23日
下一篇 2022年7月23日

相关推荐