微服务为什么需要混沌工程

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【2月更文挑战第23天】

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


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

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


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


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


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


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


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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
153 0
|
6月前
|
Java Nacos Docker
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
188 0
|
弹性计算 运维 监控
课时1:微服务架构与混沌工程介绍
课时1:微服务架构与混沌工程介绍
|
Dubbo Java 关系型数据库
03-微服务技术栈(基础):SpringCloud工程部署启动
本节笔者带领大家完成了SpringCloud工程从0->1的搭建,当然你不想搭建也可以直接采用方案一,二者等效,至此读者们完成了一个微服务工程的搭建、部署、访问。同时在本节最后一章,笔者基于RestTemplate发起的http请求实现远程调用,实现当A系统想要获取B系统数据时的跨系统数据交互。然而RESTful API访问并不是微服务的唯一解决方案,如Dubbo的交互一样可以实现,希望读者们能不限于此。
299 0
|
Java Maven 微服务
微服务实战01-maven聚合工程
接下来的一段时间,我们将要来学习微服务,本着重实战的原则,你不需要去深究一些相关的原理,只要能跟着教程一步一步做下来,就可以快速地掌握Java微服务开发技巧。 我们学习微服务的第一步,就是要知道怎么创建聚合工程,虽然说微服务和聚合工程没有直接和必然的联系,但是现在工作中只要用到微服务,就一定是聚合工程。既然绕不开,我们就从聚合工程开始吧。
186 0
|
Java 测试技术 Shell
(二)、微服务Cloud整体聚合父工程
(二)、微服务Cloud整体聚合父工程
|
Java Linux Go
Kratos微服务工程Bazel构建指南
Kratos是一个微服务框架,既然是微服务,那么一个工程下肯定会存在不少的服务,一个服务就是一个二进制可执行程序,那么我们将会面对一个问题:如何去构建(Build)这些服务程序。这件事情,通常都交由构建系统去做。我们能够选择的构建系统有很多:Make、CMake、Bazel……那么,我们又该如何选择一个构建系统呢?
1013 0
|
SQL Java 测试技术
微服务项目:尚融宝(7)(后端接口:创建尚融宝接口工程)
微服务项目:尚融宝(7)(后端接口:创建尚融宝接口工程)
微服务项目:尚融宝(7)(后端接口:创建尚融宝接口工程)
|
网络协议 搜索推荐 前端开发
微服务工程中,基础组件应用
微服务工程的架构是一项复杂和持续的过程,其中涉及到的组件也十分繁杂,本文只是选取Gateway、Nacos、Feign三个基础组件做简单的总结,在其逻辑的理解上需要围绕该组件的核心功能和项目使用的API作为切入点,时常查阅源码和官方文档。
251 0
微服务工程中,基础组件应用
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2