在当今数字技术时代,停机意味着企业的业务中断和收入损失,因此构建弹性云计算架构势在必行。例如在新冠疫情期间,由于发布出行禁令,IT维护团队难以本地重新启动和维护数据中心中的服务器。这可能会导致用户访问数据或软件的巨大障碍,导致生产率下降,并在内部部署设施停机时造成业务中断。
此时行之有效的解决方案是将企业的业务迁移到云计算基础设施,IT员工可以通过远程工作来提供全天候的技术支持以确保安全运营。云计算在这里扮演了救世主的角色。很多企业希望充分利用云计算的潜力,因此,云计算操作的可观察性和弹性变得势在必行。
在技术驱动的商业经济中,云计算服务中断面临的后果将是灾难性的。任何故障和中断都会导致多米诺骨牌效应,阻碍系统性能。因此,企业必须通过系统和混沌测试在其云计算架构中构建弹性。
混沌测试是一种可以处理大规模分布式系统中的混乱问题的可试验的、基于系统的方法。人们需要了解弹性和可观察性的含义,以及系统和混沌测试对于避免停机和业务中断来说至关重要的原因。
为避免云计算服务中断,企业必须通过以连续和混乱的方式对其进行测试,在其云架构中构建弹性。
1.可观察性
可观察性可以通过两个方面来理解:一方面是通过控制理论将可观察性解释为通过对其外部输出的推断来理解系统状态的过程。另一方面将可观察性的学科和方法解释为旨在衡量不确定性和未知数。
它有助于了解系统或应用程序的属性。云计算的可观察性是利用不同的域、规模和服务的端到端监控的先决条件。可观察性不应与监控混淆,因为监控用于了解应用程序中问题和异常的根本原因。监控会告诉IT人员什么时候出现了问题,而可观察性可以帮助他们了解为什么会出错。它们的目的不同,但却是相互补充的。
云计算系统需要可观察性和弹性,以确保更少的停机时间、更快的应用程序速度等。
2.弹性
而迁移到云平台的企业都应确保并测试其系统的稳定性、可靠性、可用性和弹性,其中弹性位于层次结构的最高层。稳定性是保证系统和服务器不会经常崩溃;可用性通过将应用程序分布在不同位置以减轻工作负载来确保系统正常运行;可靠性确保云计算系统有效运行和可用。但是,如果企业想要解决不可预见的问题,那么不断测试弹性就变得必不可少。
弹性是指预期会出现问题,并且系统经过测试以解决和调整自身以解决该问题。系统的弹性并不是自动实现的。弹性系统承认复杂的系统和问题,并努力逐步采取措施应对错误。它需要不断测试以减少问题或故障的影响。而持续测试可以避免云计算服务故障,以确保更高的性能和效率。
可以通过现场弹性设计和利用混沌测试等系统测试方法实现弹性。
传统测试及其不足的原因
传统测试可以确保应用程序的无缝设置和迁移到云计算系统,并额外监控它们的执行和工作效率。这足以确保云计算系统不会根据设计考虑改变应用程序的性能和功能。
采用传统测试是不够的,因为它在发现潜在的隐藏架构问题和异常方面效率低下。一些故障似乎处于休眠状态,因为它们仅在触发特定条件时才变得可见。
云计算的高可用性承诺
微软公司云计算业务主管ScottGuthrie在谈到云计算的未来和发展前景时说,“我们看到数字空间的发展速度加快。云计算让我们能够按照摩尔定律的速度进行扩展,而且还能快速扩展并使用更少的基础设施。”由于新冠疫情导致企业员工被迫在家远程工作,云计算投资并没有激增。但是,由于这种前所未有的需求,所有超大规模厂商都不得不采取节流和优先级控制措施,这违背了公共云的按需弹性原则。
在中断和停机方面,公共云也会出错。例如,谷歌公司最近发生的宕机事件使Gmail和Youtube等多个谷歌服务停止,这表明公共云也会出现系统宕机。因此,这场疫情为弹性云计算系统增加了几个视角:
1.系统必须平稳运行,即使在线流量的意外激增也不会改变。
2.系统必须寻找替代方法来管理功能和资源池,以防额外的资源分配请求被云计算提供商拒绝或限制。
3.系统应该是可访问和安全的,以处理未知位置并转移到混合工作环境(可能是网络防火墙之外的多个端点)。
新冠疫情凸显了对弹性云系统进行连续和混沌测试的价值。一个具有弹性且经过全面测试的系统将能够以安全、无缝、稳定的方式管理额外的拥塞流量。为了检测未知流量,需要混沌测试和混沌工程。
仅靠云原生应用程序设计不足以实现弹性
在公共云中,由于云计算提供商提供的基本功能、多层/多技术基础设施以及云计算系统的分布式特性存在差距,应用程序弹性架构变得更加重要。即使底层基础设施的可用性和弹性由云计算提供商提供,这也可能导致云计算应用程序以不可预测的方式失败。
为建立良好的应用程序弹性基础,在设计过程中,云计算工程师应采用以下策略来测试、评估和表征应用程序层弹性:
1.利用架构良好的整体解决方案架构框架,并采用云原生能力实现可用性和灾难恢复。
2.与云计算架构师和技术架构师合作,定义可用性目标,并推导出应用程序和数据库层弹性属性。
在建模的同时,根据预期或观察到的使用模式定义假设的故障模型,并根据业务影响为这些故障模式制定测试计划。
通过采用架构驱动的测试方法,企业可以在上线之前深入了解云计算应用程序弹性的基本级别,并且可以为性能修复活动分配足够的时间,但仍然需要在云原生应用程序设计中测试应用程序的未知故障和多个方面的故障点。
混沌测试与站点可靠性工程
混沌测试是一种有意将压力和异常引入云计算架构中的方法,以系统地测试系统的弹性。
首先明确指出的是,混沌测试并不能替代实际的测试系统,这只是衡量错误的另一种方法。通过混沌测试,IT团队可以看到发生了什么情况以及如何反应。但是,最重要的是,它可以帮助他们衡量系统在可观察性和弹性方面的差距,而这是最初被忽视的事情。
Netflix公司在2011年迁移到云计算系统时率先采用了这种强大的测试方法,混沌测试揭示低效率,并引导开发团队进行更改、测量和提高弹性,帮助云计算架构师更好地理解和更改他们的设计。
持续、系统和混沌的测试增加了云计算基础设施的弹性,有效地增强了系统的弹性,并最终增强了管理和运营团队对其正在构建的系统的信心。
而企业必须部分或完全在云计算基础设施上创建弹性IT系统。
使用混沌测试和站点可靠性工程可以帮助企业在以下方面保持弹性:
为了建立完整的应用程序弹性,除了前面提到的云计算应用程序设计方面,解决方案架构师还需要采用架构模式,允许注入特定故障以触发内部错误,从而在开发和测试阶段模拟故障。
故障触发器的一些常见示例是响应延迟、资源占用、网络中断、瞬态条件、用户的极端操作等等。
如何进行混沌测试
混沌测试可以通过在云计算结构的任何七层中引入异常来完成,帮助评估对弹性的影响。
当Netflix公司在2011年成功发布其弹性工具ChaosMonkey时,许多开发团队将其用于混沌工程测试系统。还有另一个由软件工程师开发的工具测试系统Gremlin,它也在做同样的事情。但是,如果想在当前新冠疫情背景下执行混沌测试,则可以使用GameDay来实现。这会刺激流量突然增加而出现的异常现象;例如,客户同时访问一个移动应用程序。GameDay的目标不仅是测试弹性,还要增强系统的可靠性。
为确保混沌测试成功,需要采取以下步骤:
1.识别:识别系统中的关键弱点,并创建一个假设以及预期结果。工程师需要识别和评估在假设框架内注入什么样的故障。
2.模拟:根据真实事件在生产过程中注入异常。这可确保将系统中可能发生的情况包括在内。这可能会导致应用程序或网络中断或节点故障。
3.自动化:需要这些实验实现自动化,可能是每小时或每周等。这确保了连续性,这是混沌工程中的一个不利因素。
4.持续反馈和完善:这些实验有两个结果,可以确保弹性或检测需要解决的问题,可以从中获得反馈以改进系统。
在系统上引发错误攻击和序列的其他具体方法可能是:
结语
在当今云迁移和云计算使用量激增的数字时代,增强云计算弹性以提高应用程序的有效性能变得势在必行。而在项目的生命周期中,持续和系统的测试是必不可少的,而且在公共云负担过重的情况下,也要确保云计算架构的弹性。通过防止长时间的中断,企业可以节省大量成本并避免损失,此外,还可以确保为客户提供服务的持久性。因此,混沌测试成为采用大规模分布式系统的必要条件。
原文标题:Systematic and Chaotic Testing: A Way to Achieve CloudResilience,作者:Gaurav Aggarwal