构建容错软件系统的艺术

2023年 8月 5日 26.7k 0

译者 | 刘汪洋

审校 | 重楼

现在,我们生活在由软件系统推动的世界中。这些系统深入到我们日常生活的各个方面,其连续、可靠的性能不再是奢侈,而是必需。现在,企业比以往任何时候都更需要保证他们的系统可用、可靠,并具有弹性。这种需求由满足客户期待以及战胜竞争对手的需求所推动。那么,要达到这个目标的关键是什么呢?答案就是建立具有容错性的软件系统。

容错系统的重要性在于它们能够防止长时间的停机和收入损失。设想一下,一个金融机构严重依赖某交易平台来执行交易,它无法承受市场交易时间内平台的停机风险。如果平台真的不可用了,这家公司可能面临数百万的收入损失,以及随之而来的声誉损失。但是,通过执行容错策略和模式,公司可以确保即使在出现故障的情况下,平台仍能保持可用。

在本篇博客文章中,我们将更深入地探索一些大型科技公司和软件工程团队如何使用策略和模式来保持系统的可用性。

容错系统的八大支柱

  • 冗余和复制 是建立容错软件系统的常见策略之一。冗余包括复制系统的关键组件,并确保这些组件的多个实例是可用的。如果一个组件实例失败,另一个实例能立即接管。冗余可在硬件、软件和数据等系统的不同层次中实现。例如,硬件冗余包括使用多台服务器或存储设备,而软件冗余包括在多台服务器上复制应用实例。
  • 负载均衡 是另一个对建立容错软件系统至关重要且广为人知的策略。负载均衡涉及将入站的网络流量分流到多台服务器,以确保无一台服务器过载。如果一台服务器发生故障,流量可以自动重定向到另一台服务器,从而降低故障的影响。负载均衡可以通过硬件或软件解决方案实现,并通常与冗余和复制配合使用,以最大化系统的容错性。
  • 模块化 本质上是将系统拆分为较小、独立的部分,这些部分可以独立进行开发、部署和维护。这种做法使得故障的定位和隔离变得更加容易,同时也可以更快地恢复正常运行。微服务则是模块化的一种延伸,它将系统进一步划分为更小的、可以独立开发和部署的服务。微服务的出现极大地提升了系统的容错能力,它可以将故障的影响降至最小,以实现快速恢复。
  • 优雅降级 是指在设计系统时,要确保即便部分组件出现故障,系统也能至少保持基本功能运行。这种设计思路确保了即使部分功能或性能暂时受到影响,系统依然保持可用。通过设计系统来检测故障并自动调整其行为以适应故障情况,就可以实现优雅降级。比如,如果一个依赖第三方服务的功能不可用,Web
    应用程序可以显示该页面的简化版本。
  • 熔断器 是一种用来防止系统级联故障的设计模式。它将对外部依赖(如数据库或 Web 服务)的调用包装在熔断器中。熔断器会监视外部依赖的健康状态,一旦发现故障,它就会打开电路,阻止进一步的依赖调用。这种设计可以让系统在外部依赖出现故障时优雅地降级,而不会直接崩溃。
  • 快速失败 是一种模式,旨在在检测到故障后立即停止系统执行以防止更大的损害。这种方式保证了系统在出现故障时能快速失败,避免引发更严重的级联故障。通过在代码中添加断言或前置条件,我们能在开发过程的早期检测出错误,从而实现快速失败。设置适当的超时和截止日期也是快速失败的一种形式,系统可以终止运行时间过长的操作,防止对系统造成更大的损害。
  • 重试 是一种设计模式,它能自动重新执行失败的操作,期待在后续尝试中成功。对于瞬态故障(如网络超时或临时服务不可用)这种方法可能会有效。重试的实现可以采用不同的算法,例如指数回退,它在每次重试之间增加延迟,以减轻系统负载。
  • 限流 是一种策略,其目标是限制系统处理请求的速率。这种策略可以预防过载,确保系统能在流量激增时仍然能够处理,而不会过于繁忙。限流可以通过设置每秒或每分钟可以处理的请求数量来实现。对于那些依赖于具有使用限制的外部
    API 或服务的系统,这种策略特别有效。
  • 总结

    本文并没有给出具体的实现细节,但这些技术和方法可以用来增加系统的可靠性和可用性。上述提到的模式为寻求改进软件系统弹性的开发者提供了一个很好的思路。

    译者介绍

    刘汪洋,51CTO社区编辑,昵称:明明如月,一个拥有 5 年开发经验的某大厂高级 Java 工程师,拥有多个主流技术博客平台博客专家称号。

    原文标题:The Art of Building Fault-Tolerant Software Systems,作者:CodeReliant
    社区

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论