为什么需要混沌工程

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 【5月更文挑战第10天】混沌工程旨在评估系统在生产环境中的稳定性,通过模拟基础设施故障、网络故障和应用程序故障来测试系统的弹性。

首先混沌工程目的是帮助我们对系统整体质量有所了解,即对该系统在生产环境中是否能够应对各种威胁和故障的预判,从而建立信心。目前混沌工程实验大多用来测试系统弹性对抗方面的验证,而这些实验基本都来自以下3个方面:基础设施故障、网络故障、应用程序故障。


混沌工程中的场景可以划分为故障和非故障两类。

  • 故障类场景涵盖系统中的服务发生故障或者利用工具向系统中注入相应的故障,如超时、异常错误等。如何将故障注入这类服务架构中呢?最简单的方法是将实例通过混沌工程实验进行异常关闭,当然也可以将磁盘卷进行异常卸载,或容器异常关闭,或将RDS数据库实例进行故障切换等。当然我们也可以将某段错误代码注入服务中。这些故障场景我们已经了解到,其会对系统产生哪些影响,我们同时期望系统能够正确响应我们设置在系统中的应对方案。
  • 非故障类场景,当系统突然面临大量请求时,如“双十一”整点秒杀或支付时,系统的负载均衡机制能否正常分流请求,触发我们之前设置的负载均衡策略,例如我们采取服务熔断机制,防止整个系统出现雪崩,或者暂时停止对该服务的调用和采用降级处理等策略,暂时舍弃系统的一些非核心接口和数据请求,直接返回一个提前准备好的回退(fallback)错误处理信息。这样,虽然我们提供的是一个不完整的服务,但保证了整个系统的稳定性和可用性。


其他类似非故障类场景还有系统资源竞争、拜占庭将军故障(例如系统中性能差或有异常的节点对请求做出错误的响应、发生异常行为、对调用者随机返回不同的响应等)、非计划中的或非正常组合的消息处理等。系统在面对这些异常时,处理方式往往是未知的,故需要进行相应的实验探究。


再谈到微服务,现阶段早已成为团队开发和部署首选的设计模式。微服务让开发人员可以使用更集中、更轻量化的代码库,并且能够独立决定何时以及如何部署服务。然而,天下没有免费的午餐。当你从单体架构过渡到微服务架构时,复杂性并没有随之消失,反而随着微服务数量的增多而增加。


在使用微服务构建的系统时,会有更多的主机或容器、更多的负载均衡器、更多的防火墙规则等在运行。我们可能将Nginx用于不同的业务场景(Web服务、反向代理、负载均衡等),以满足不同的微服务需求。随着服务数量从几十个增长到几百个甚至上万个,我们想要理解系统与预测其行为就变得更加困难。此外,所有业务都通过网络相互协作,而不是通过系统内部的模块调用,这样性能也随之成为微服务面临的主要问题之一。


同时,随着微服务架构和容器编排技术K8S的盛行,增加了评估此类系统可靠性的难度。要解决微服务带来的运维工作量的增加、复杂链路的监控难题,以及服务间性能开销等问题,需要我们基于分布式的微服务架构进行混沌工程实验,测试有关分布式服务体系结构的假设以及验证上面所提及的问题,并发现分布式服务体系结构中存在的未知行为,例如,当集群中某个节点的CPU负载达到峰值、系统发生错误时,实验中的微服务系统将会表现出的行为。最终我们的目标是验证微服务系统在不利条件下的运行情况是否达到预期,并了解可采取哪些措施使系统具有更大的弹性来适应这些变化。


混沌工程最终目标是帮助我们的团队更好地管理生产环境中运行的应用,并使系统更具弹性。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
7月前
|
运维 安全 数据库
混沌工程
混沌工程
162 0
|
Dubbo Java 应用服务中间件
无论多忙,都要掌握混沌工程入门方法
无论多忙,都要掌握混沌工程入门方法
|
消息中间件 Prometheus Kubernetes
【混沌工程】2022 混沌工程状态(下)
【混沌工程】2022 混沌工程状态
|
缓存 运维 监控
【混沌工程】2022 混沌工程状态(上)
【混沌工程】2022 混沌工程状态
|
运维 监控 安全
混沌工程-初识
接受“系统越复杂,越脆弱”的事实,让系统在每一次失败中获益,然后不断进化。在实践中,用一系列的实验来真实的验证系统在各类故障场景下的表现,通过频繁大量的实验,使得系统本身的“反脆弱性”持续增强,让组织建立对系统抵御生产环境中失控条件的能力以及信心。
混沌工程-初识
|
监控 安全 Devops
学习笔记之初识混沌工程
最早由Netflix的技术团队提出,现已经演变成计算机科学的一门新兴学科,即“混沌工程”。
学习笔记之初识混沌工程
|
存储 分布式计算 Kubernetes
【混沌工程】什么是混沌工程? 介绍、定义及更多
软件和系统开发是创新和解决未知问题的练习。 软件和系统是容易出错的,因为它们是由具有不同观点和技能的人(很可能是多人)制作的。 技术变得越来越分散和复杂,尤其是随着微服务的推动。 很少有人拥有完整的端到端知识 […]
|
存储 运维 监控
【混沌工程】什么是混沌工程?
混沌工程让您可以将您认为会发生的事情与系统中实际发生的事情进行比较。 您实际上是“故意破坏”以学习如何构建更具弹性的系统。
|
Devops 测试技术
【混沌工程】混沌工程原理
混沌工程是在系统上进行实验的学科,目的是建立对系统承受生产中动荡条件的能力的信心。 大规模分布式软件系统的进步正在改变软件工程的游戏规则。作为一个行业,我们迅速采用提高开发灵活性和部署速度的做法。紧随这些好处之后的一个紧迫问题是:我们对投入生产的复杂系统有多少信心?
|
消息中间件 Prometheus 监控
【混沌工程】2023 混沌工程状态
在过去的十二年里,我有机会参与并见证了混沌工程的发展。出身卑微,最常遇到的问题是“你为什么要这样做?”到今天的位置,帮助确保世界顶级公司的可靠性,这是一段相当长的旅程。