实现云弹性的一种方法—系统和混沌测试

译文
云计算
在本文中,了解弹性和可观察性的含义,以及为什么弹性和混沌测试对于避免停机至关重要,并且对企业的重要性。

【51CTO.com快译】

 

在当今数字技术时代,停工就意味着停机,构建弹性云结构势在必行。例如,在新冠疫情期间,IT 维护团队不能再在本地重新启动数据中心的任何服务器。如果本地硬件出现故障,这可能会导致访问所有数据或软件的巨大障碍,使得生产率下降,并造成整体业务损失。然而,针对上述问题的解决方案,是将所有 IT 操作传输到云基础架构,通过远程成员提供 24/7 全天候技术支持来确保安全。云在这里本质上是神一样的存在。

最近,一些公司已经充分利用云的潜力,因此,云操作的可观察性 和弹性变得势在必行,因为停机现在等同于断开连接和业务损失。 

在当今技术驱动的商业经济中,想象云失败将是灾难性的。任何故障和中断都会导致多米诺骨牌效应,影响公司的系统性能。因此,对于组织和公司来说,通过混乱和系统化的测试将云弹性构建到云结构中变得十分重要。在这篇文章中,我将带您了解弹性和可观察性的含义,以及为什么弹性和混沌测试对于避免停机至关重要。

为避免云故障,企业必须通过连续和混乱的方式对其云架构进行测试,从而在其云架构中构建弹性。

1.) 可观察性

可观察性可以通过两个方面来理解。一个是通过控制理论, 它将可观察性解释为通过推断系统的外部输出来理解系统状态的过程。另一个方面解释了可观察性的学科和方法,即用来测量不确定性和未知数的学科和方法。
云计算的可观察性是利用跨领域、规模和服务的端到端监控的先决条件。可观察性不应与监控相混淆,因为监控用于了解应用程序中问题和异常的根本原因。 监控会告诉你什么时候出现了问题,而可观察性可帮助你了解出现问题的原因。它们各自服务于不同的目的,但肯定是相辅相成的。

云系统需要具备可观察性和弹性,以确保更少的停机时间、 更快的应用程序速度等。

2.) 弹性 

稳定

是否开启/可访问?

可靠性

它会以应有的方式始终如一地工作,并且在我们需要的时候工作吗?

可用性

它是否可以随时随地可靠地访问?

弹力

系统如何应对挑战以使其可靠可用?

每个迁移到云基础设施的企业都应确保并测试其系统的稳定性、可靠性、可用性和弹性,其中弹性位于层次结构的顶部。稳定性是保证系统和服务器不会经常崩溃;可用性通过将应用程序分布在不同的位置以减轻工作量,从而确保系统正常运行时间;可靠性确保云系统的高效运行和可用性。但是,如果企业想要解决不可预见的问题,那么不断测试弹性就变得必不可少

弹性是指预期会出现的问题,并且系统会以某种方式进行测试,以解决和调整该问题。 系统的弹性不是自动实现的。弹性的系统承认复杂的系统和问题,并努力逐步采取措施应对错误。它需要不断测试,以减少问题或故障的影响。持续测试可避免云故障,确保更高的性能和效率。

可通过现场弹性设计和利用混沌测试等系统测试方法实现弹性。

常规测试及其不足

传统测试 确保应用程序直接安装和迁移到云系统中,并监控它们的性能和工作效率。足以确保云系统不会根据设计改变应用程序的性能和功能。

常规测试是不够的,因为它在发现潜在的隐藏架构问题和异常方面效率低下,一些故障仅在触发特定条件时才可见。

云的高可用承诺

Scott Guthrie 在谈到云的未来和前景时说,“我们看到数字空间的发展速度逐渐加快。云让我们能够按照摩尔定律的速度进行扩展,也可以使用更少的基础设施快速扩展”。由于疫情人们被迫在家工作,云投资并没有激增。但是,由于这种前所未有的需求,所有超大规模企业都必须引入节流和优先级控制,这违背了公共云的按需弹性原则。

在中断和停机方面,公共云并非不可挑战。例如,谷歌最近的宕机时间导致 Gmail 和 Youtube 等多项谷歌服务停止,这表明公共云也不一定没有系统宕机。因此,我想说,大流行为弹性云系统增加了几个额外的视角:

1. 即使在线流量意外激增,系统也必须平稳运行且保持不变
2. 系统必须寻找替代方法来管理功能和资源池,以防云提供商拒绝或限制额外的资源分配请求。
3. 该系统应该是可访问且安全的,以处理未知位置并转移到混合工作环境(可能是网络防火墙之外的许多端点)。

疫情突出了对弹性云系统进行连续测试和混乱测试的价值。一个有弹性且经过全面测试的系统将能够以安全、无缝和稳定的方式管理额外拥塞的流量。 为了检测未知数,需要弹性测试 和弹性工程 

单独的云原生应用程序设计无法实现弹性

在公共云世界中,由于云提供商提供的基础能力、多层/多种技术基础架构以及云系统的分布式特性存在差距,因此 应用程序弹性 架构的构建更为关键。 即使云提供商提供了底层基础架构的可用性和弹性,这也可能导致云应用程序以不可预测的方式失败。

为建立良好的应用弹性基础, 在设计过程中,云工程师应采用以下策略来测试、评估和描述应用程序层弹性:

1. 利用架构良好的框架实现总体解决方案架构,并采用云本机功能实现可用性和灾难恢复。
2. 与云架构师和技术架构师协作,定义可用性目标,并派生应用程序和数据库层弹性属性。 
A. 与威胁建模一起,根据预期或观察到的使用模式定义假设的故障模型,并根据业务影响为这些故障模式建立测试计划。

通过采用架构驱动的测试方法,组织可以在上线之前深入了解云应用程序弹性的基本级别, 并为性能修复活动分配足够的时间。但是仍然需要测试应用程序是否存在未知故障以及 云原生应用程序设计中多个故障点。

混乱测试与工程

混乱测试是一种有意将压力和异常引入云结构的方法,以系统地测试系统的弹性。

首先,混乱测试不能替代实际的测试系统。 这只是衡量错误的另一种方式。通过向系统引入降级,IT 团队可以看到发生了什么以及它是如何反应的。重要的是,测试可以帮助测试人员衡量系统的可观察性和弹性方面的差距,这些是最初被忽略的事情。

Netflix 在 2011 年迁移到云系统期间首先效仿了这种测试方法,此后,它有效地建立了这种方法。混乱测试揭示了低效率,并引导开发团队改变、衡量和提高弹性,并帮助云架构师更好地理解和改变他们的设计。
持续、系统和混乱的测试增加了云基础设施的弹性,从而有效地增强了系统的弹性,并最终增强了管理和运营团队对他们正在构建的系统的信心。

弹性企业必须部分或全部在云 基础架构上创建弹性 IT 系统。

使用混沌和站点可靠性工程可帮助企业在以下方面保持弹性:
• 云和基础架构弹性
• 通过持续监控实现数据弹性。
• 通过确保用户界面在高压力条件下保持稳定,实现用户和客户体验弹性
• 通过将安全性与治理和控制机制相结合来增强网络安全性
• 对基础架构、应用程序和数据的弹性支持

为了建立完整的应用程序弹性,除了前面提到的云应用程序设计方面,解决方案架构师还需要采用架构模式,允许注入特定故障以触发内部错误,从而在开发和测试阶段模拟故障。

故障触发器的一些常见示例包括响应延迟、资源占用、网络中断、瞬态条件、用户的极端行为等等。

1. 针对常见的已识别场景,制定持续监控、管理和自动化事件响应计划
2. 建立混沌测试框架和环境
3. 注入具有不同严重性和组合的故障,并监控应用层行为
4. 识别异常行为并重复上述步骤以确认关键性

如何进行混沌测试

混沌测试可以通过在云结构的任何七层中引入异常来完成,这有助于评估对恢复力的影响。

当 Netflix 在 2011 年成功宣布其弹性工具 Chaos Monkey 时,许多开发团队将其用于混沌工程测试系统。还有另一个由软件工程师开发的工具测试系统 Gremlin, 基本上也在做同样的事情。但是,如果在 COVID-19 的环境中执行混沌测试,可以使用 GameDay 来实现。这会引发异常情况,其中流量突然增加;例如,客户同时访问移动应用程序。GameDay 的目标不仅是测试弹性,还要提高系统的可靠性。

确保成功进行混沌测试所需采取的步骤如下:
1. 识别: 识别系统中的关键弱点,并创建一个假设和预期结果。工程师需要识别和评估在假设框架内注入什么样的故障。
2. 模拟: 根据真实事件在生产过程中注入异常。这样可以确保将系统中可能发生的情况包括在内。这可能导致应用程序或网络中断或节点故障。
3. 自动化:自动化这些实验,可能是每小时/每周等。这确保了连续性,这是混沌工程中的一个不利因素。
4. 持续反馈和改进: 实验有两种结果。可以确保弹性或发现需要解决的问题。这两种方法都是很好的结果,你可以从中获取反馈来完善您的系统。

在系统上引发错误攻击和序列的其他具体方法可能是:
1. 增加网络延迟
2. 切断计划任务
3. 切断微服务
4. 断开系统与数据中心的连接

总结

在当今的数字时代,增强云弹性以提高应用程序的有效性能变得势在必行。在项目的生命周期中,持续和系统的测试是必不可少的,但同时也要确保在公共云负担过重的时候云弹性。 通过防止长时间的中断和未来的中断,企业可以节省大量成本,此外还可以确保为客户提供服务的持久性。因此,混沌工程成为大规模分布式系统的一种必然。

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:梁菲 来源: Dzone
相关推荐

2022-01-06 09:00:00

云计算技术架构

2011-07-04 17:53:48

快速测试

2011-02-23 09:35:25

Eclipse远程调试

2020-05-19 17:07:09

Spark测试数据计算

2010-07-21 16:23:09

运行telnet程序

2023-02-26 23:10:09

存储Linux架构

2023-07-25 15:10:36

Linux存储

2021-06-04 08:58:41

Linux运维Linux系统

2021-03-21 22:23:38

云计算数据中心IT

2022-06-14 10:21:51

IT领导者IT组织

2022-08-28 23:48:20

机器学习线性回归数据

2015-12-18 16:15:55

架构新型计算模型

2016-09-27 09:44:33

云计算柔性云运维

2009-06-17 12:01:21

Linux

2015-07-28 13:36:04

2009-06-17 09:05:05

Linux隐藏网络链接命令

2010-11-05 10:15:42

云计算

2013-03-27 09:30:44

数据挖掘IT基础设施

2017-05-31 16:30:21

Linux虚拟网络网络设置

2010-06-07 09:29:21

云计算
点赞
收藏

51CTO技术栈公众号