软件弹性是任何可扩展、高性能和容错软件的必备品质。
软件从意外事件中恢复的能力是软件弹性。这意味着软件工程师必须预测意外事件并对其进行解释。创建这种容错的解决方案可以在代码中或在基础设施层上。
分布式系统会失败,一个有弹性的软件系统不会试图避免失败,而是期待它并优雅地响应。
在这篇文章中,我们将研究您需要注意的一些方面,以实现软件弹性。
目录
什么是软件弹性
弹性软件因素
逐步推出/部署
重试软件弹性
弹性软件的超时
倒退
幂等操作支持软件弹性
数据库事务
速率限制
其他需要考虑的事项
结论
什么是软件弹性
卡内基梅隆大学软件工程学院博客指出:
基本上,如果一个系统在逆境中继续执行其任务(即,如果它提供所需的能力,尽管可能导致中断的过度压力)。具有弹性很重要,因为无论系统设计得多么好,现实迟早会合谋破坏系统。
如果软件系统在发生意外事件时能够部分正常运行,这就是软件弹性。在基础设施层面,有 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进行处理,非常感谢!