混沌演练实践(一)

京东云开发者
• 阅读 540

作者:京东科技 孙民英

一、混沌工程介绍

1.什么是混沌工程

混沌工程是通过主动制造故障场景并根据系统在各种压力下的行为表现确定优化策略的一种系统稳定性保障手段,简单说就是通过主动注入故障的方式、提前发现问题,然后解决问题规避风险。

2.为什么要进行混沌演练

随着互联网业务发展,微服务架构、分布式架构和虚拟化容器技术的广泛普及,软件架构的复杂度在不断提升,服务之间的依赖所带来的不确定性也成指数级增长,在这样的服务调用网中,任何一环出现的正常或者异常的变化,都有可能对其他服务造成类似蝴蝶效应一般的影响。目前营销体系的服务量级不断增加,整体链路增长以及数据流转复杂,对整个系统的可用性、稳定性挑战也越来越大,所以引入混沌演练,主动找出系统中的脆弱环节,然后针对性地进行加固、防范,从而避免故障发生时所带来的严重后果,进一步提升业务系统的高可用,提高业务系统应急保障能力。

3.混沌演练的价值

应用混沌演练可以对系统抵抗扰动并保持正常运作的能力进行校验和评估,提前识别未知隐患并进行修复,进而保障系统更好地抵御生产环境中的失控条件,提升整体稳定性。



混沌演练实践(一)







二、混沌演练实践

1.演练流程介绍

目前借助京东云RPA自动化服务平台进行混沌攻防演练,测试人员为红方(攻击方),研发人员为蓝方(防守方),红方随机挑选一个时间段,针对服务系统注入故障(比如:CPU使用率达到100%、网络延迟、JSF接口响应延迟等),蓝方负责故障感知以及应急处理,通过这样的方式,达到针对系统高可用的应急演练。

红方:

创建演练计划: 通过访问RPA自动化服务平台,进入工具市场——演练类,选择不同的故障方案,点击“立即执行”;

演练配置: 点击执行后,进入配置页面,选择执行环境,选取要演练的应用,并随机选取要演练的实例IP;

执行演练: 演练任务创建完成后,在对应的演练时间范围内,审批通过后,开始按照选择的演练任务开始执行;

蓝方:

故障排查: 在演练过程中,蓝方通过报警信息,先对模拟故障的实例机器,进行排查;

恢复方案: 演练中发现问题要及时恢复,演练后对模拟故障的实例机器进行重启恢复,确保机器正常运行,各项性能指标恢复;



混沌演练实践(一)



2.初次演练实践

2.1 准备阶段

混沌演练准备阶段是设计演练策略,主要有设定演练的考核目标,选择演练的场景、应用和机器,生成相应的演练计划,周知相关人员。

其中准备阶段最重要的是做好风险评估 ,根据系统的等级或者混沌的成熟度,初期演练一些简单的事件比如高CPU、高内存;等系统抵抗力逐步提升演练比较高级的事件如网络延迟、进程终止等。



混沌演练实践(一)



2.2 执行阶段

演练场景执行,执行故障注入,测试人员应观察日志和系统监控,记录指标变动情况。

执行场景JSF接口响应延迟100ms,因接口超时时间为50ms,可以在监控图中看到故障注入期间接口超时失败率100%



混沌演练实践(一)





混沌演练实践(一)





2.3 恢复阶段

故障发现及排查定位:演练进行中,蓝方事先不知道演练哪些故障场景(目前是通过预发演练,研发侧能明确受影响的机器),蓝方通过收到报警,对报警信息进行排查,摹略引擎系统针对报警信息做出反应和应急处理。

蓝方发现故障 CPU使用率负载故障,报警机器与演练机器相同,重启服务后,应用服务器响应正常,可用率恢复;



混沌演练实践(一)



混沌演练实践(一)



2.4 复盘阶段

通过本次演练,发现两个待优化的点:

1.CPU使用负载的演练场景,发现了监控告警邮件延迟,建议增加电话和咚咚报警策略;

  1. 模拟JSF接口响应超时场景,发现缺少失败阈值告警邮件,增加相应告警邮件;



混沌演练实践(一)



三、混沌演练总结

1.典型演练场景

借助于平台进行混沌演练,可以降低演练的学习成本,提高演练的效率,目前平台对于常用的演练场景已经支持,大家可以在平台进入工具市场选择相应的演练场景。



混沌演练实践(一)



2.重要考核指标

混沌演练结束后,需要根据演练执行过程和结果,记录演练流程和对应监控指标变化情况,总结存在的问题以及优化方案发出演练报告,对于演练中的关注指标主要是从故障“发现-定位-恢复”的时效性指标,下面具体介绍了在实践演练中需要重点关注的指标,如是否有告警监控、系统容错能力情况,以及响应机制,其中最后灰色部分高可用指标属于探索部分,会随着系统当前的实际情况和业务不同有变化,作为探索性指标。



混沌演练实践(一)



3.关注风险控制

混沌演练会对业务和系统产生破坏性,为了限制发现应用程序漏洞的成本,避免不必要的损坏和超出合理测试允许的实际损失对混沌演练做好风险控制是非常必要的。做好风险控制,将演练控制在一个较小的范围内,避免由于演练失控带来的更大问题。目前在进行混沌演练实践主要通过以下两个方面进行风险控制:



混沌演练实践(一)



尽管混沌演练的好处是显而易见的,但它是一种应该慎重进行的实践。

点赞
收藏
评论区
推荐文章
京东物流常态化压测实践 | 京东云技术团队
大促备战压测备战时间紧、任务多,压测备战压力较大,在大促备战多专项并行资源紧张情况下,频繁的系统调优给整个大促带来不可控的风险因素。引入常态化压测的手段,通过每周或每月的定期压测行为,持续把控系统性能表现,保证服务稳定性;同时将需求上线引起的性能问题前置暴露,及时定位优化问题;减轻备战压力,提升压测效率。
Stella981 Stella981
3年前
SkyWalking 快速接入实践
分布式应用,会存在各种问题。而要解决这些难题,除了要应用自己做一些监控埋点外,还应该有一些外围的系统进行主动探测,主动发现。APM工具就是干这活的,SkyWalking是国人开源的一款优秀的APM应用,已成为apache的顶级项目。今天我们就来实践下SkyWalking下吧。实践目标:达到监控现有的几个系统,清
主动发现系统稳定性缺陷:混沌工程 | 京东云技术团队
这是一篇较为详细的混沌工程调研报告,包含了背景,现状,京东混沌工程实践,希望帮助大家更好的了解到混沌工程技术,通过混沌工程实验,更好的为系统保驾护航。
混沌演练状态下,如何降低应用的MTTR(平均恢复时间) | 京东云技术团队
如何在混沌演练的场景中降低应用的MTTR,必须需要根据监控定位,然后人工进行反馈进行处理吗?是否可以自动化,是否有方案可以降低混沌演练过程中的影响?以此达到快速止血,进一步提高系统的稳定性。本篇文章将根据一些思考和实践来解答以上问题。
助力618-Y的混沌实践之路 | 京东云技术团队
近三年,京东混沌工程作为大促三道防线之一,在促前扮演了非常重要的角色,而Y的混沌实践,也在不断地进行升级,主要从应用覆盖率和场景覆盖率两个方向明确提升方向,并在集团混沌大赛上取得了一系列突破和成绩。
京东云开发者 京东云开发者
8个月前
【稳定性】浅谈11.11大促之预案演练 | 京东物流技术团队
一、预案演练预案演练主要解决的问题是:根据单个系统的应急预案,模拟应用系统的一种或多种故障场景,验证系统的可靠性。1.1、预案演练形式预案演练根据应急预案组织相关的应急组织机构和人员,针对事先假设的异常应急场景,通过模拟实际决策、指挥和技术操作,完成应急响
nvme磁盘故障注入方法
在存储系统中,磁盘的故障是很可能出现的问题。存储软件的设计需要对故障进行处理,提高系统的健壮性。然而磁盘的故障是不可控的,当我们想测试软件故障处理的分支时,不是很方便。用软件模拟的方法能覆盖的场景比较少,而且和实际故障的差距会比较大。因此,如果能让故障下沉到磁盘,尽可能的靠近磁盘,才能构造出尽可能真实的故障场景。本文针对nvme磁盘,在磁盘驱动这一层调研了几种可以注入磁盘故障的方法。
京东云开发者 京东云开发者
4个月前
秒送LBS场景下的C端SOA服务容灾建设之-数据备份篇
前言在面向服务的架构(SOA)系统中,容灾能力是保障系统稳定性的重要组成部分。通过引入多数据中心部署、自动化故障转移、数据备份等技术手段,可以有效提升系统在面对突发灾难事件时的恢复能力。例如,采用主从复制和异地多活架构,可以确保在某个数据中心发生故障时,其
混沌演练实践(二)-支付加挂链路演练 | 京东云技术团队
当前微服务架构下,各个服务间依赖高,调用关系复杂,业务场景很少可以通过一个系统来实现,常见的业务场景实现基本涉及多个上下游系统,要保证整体链路的稳定性,需要尽量减少系统之间的耦合性,避免因为单点失效引起整个链路的故障。