助力618-Y的混沌实践之路 | 京东云技术团队

一、写在前面

1、混沌是什么?

混沌工程(Chaos Engineering)的概念由 Netflix 在 2010 年提出,通过主动向系统中引入异常状态,并根据系统在各种压力下的行为表现确定优化策略,是保障系统稳定性的新型手段。

混沌工程是一门在分布式系统上进行实验的学科,目的是建立人们对于复杂系统在生产环境中抵御突发事件的信息。

2、为什么要做混沌?

混沌工程通过有意地引入故障、异常或不确定性的条件,以模拟真实世界中的不完美环境。其核心思想是通过主动引入故障和异常情况,逐步验证和提升系统的健壮性,从而增加系统在面对真实世界中的复杂环境时的稳定性和可靠性。其目的是识别潜在的系统弱点,并改进应用系统的健壮性和恢复能力,减少系统故障造成的影响,并提供更好的用户体验。

3、混沌的原则

混沌工程主要遵循以下原则:

  1. 假设清晰性(Assumption-Driven):明确系统的行为和性能的关键假设。这些假设可以基于系统需求、设计决策或运行环境等方面。混沌工程的实验应着眼于验证或推翻这些假设。

  2. 实验的真实性(Experimentation):通过有意地注入故障、异常或不确定性的条件来模拟真实世界中的不完美环境。实验应该是可控和可重复的,以便在安全范围内进行测试和观察系统的响应。

  3. 最小化影响(Minimizing Blast Radius):实施混沌实验时需要注意最小化对生产环境和用户的负面影响。合理限制实验的范围和影响范围,并使用适当的风险管理方法保护关键业务功能。

  4. 监测和度量(Monitoring and Measurement):实验期间需要密切系统报警机制。使用监控工具和指标来收集实验数据,以便评估系统的稳定性和弹性。

  5. 分析和学习(Analyzing and Learning):对实验结果进行复盘,并从中提取经验教训。确定问题的根本原因,并制定相应的改进计划和解决方案。

  6. 持续改进(Continuous Improvement):混沌工程是一个持续改进的过程。通过不断地进行实验、分析和修正,提高系统的弹性、稳定性和可恢复性。

二、Y的混沌发展

近三年,京东混沌工程作为大促三道防线之一,在促前扮演了非常重要的角色,而Y的混沌实践,也在不断地进行升级,主要从应用覆盖率和场景覆盖率两个方向明确提升方向,并在集团混沌大赛上取得了一系列突破和成绩。

1、探索阶段(21年)

追溯到21年618,Y主要以探索试点为目标,混沌试验应用覆盖上主要以非0/1级应用为主,演练场景上以断网演练等简单场景为主,攻守双发均为研发。

2、发展阶段(22年)

22年随着京东混沌工程的迭代升级,在演练场景及系统易用性上均有明显改善,Y侧也重点在混沌演练场景上进行全面覆盖,从基础资源故障拓展到外部依赖故障再到高级场景补充,不断提升系统稳定性。同时逐步覆盖0/1级核心系统,并沉淀混沌演练操作手册、混沌演练规范等,演练以测试为攻方,研发为守方,明确职责分工。

22年618由测试同学承接混沌演练,在演练前、演练中、演练后分别推进以下相关工作:

  1. 定义演练目标:明确演练目标和期望结果。包含确定要执行的应用系统范围、执行的场景、应用系统监控的配置、故障场景的观测、问题处理机制等,从而提升应用系统健康度。

  2. 识别关键组件和场景:确定系统中的关键组件和依赖关系,并识别可能影响系统稳定性和性能的典型场景。这些场景可以包括网络故障、资源耗尽、高并发等。

  3. 制定演练计划:制定一份详细的实验计划,包括演练的时间、范围、持续时间以及参与者的角色和职责。确保所有参与者都了解实验计划和预期结果。

  4. 设置监控体系:在演练之前,检查泰山中的MDC、UMP、中间件等配置,进一步了解应用的监控信息,根据应用的监控信息,更有针对性的模拟系统故障。

  5. 执行演练场景:按照演练计划执行混沌演练,例如模拟网络故障、内存故障、CPU故障、中间件故障等,观察系统的报警信息和研发运维响应,并记录关键指标和事件。

  6. 结果复盘:在演练结束后,收集和分析实验期间的数据和观察结果。评估系统的稳定性、可恢复性以及对异常情况的处理能力。识别存在的问题并制定系统的改进方案。

  7. 改进和优化:基于演练结果和分析,制定改进计划并采取相应的措施。这可能包括修复漏洞、提高系统的容错性、优化资源利用等。确保经验教训被记录下来,以便未来的演练和运维中可以借鉴。

  8. 定期演练和持续改进:通过常态化混沌演练,确保系统的持续的稳定性和弹性。

3、成长阶段(23年)

经过22年的实战总结,23年618 Y 重点推进应用覆盖率提升,最终达到99.68%,零售TOP1。实践策略按照集团要求优先完成系统推荐的9大场景,同时有针对性选择一些特定的场景,完善系统监控,最终0/1级应用健康度>95分,高危项清零。大促期间各系统性能达标,无线上事故发生。在取得阶段性成绩的同时,离不开团队成员在每个阶段都严格遵循以下原则,高标准对待每一次演练:

  1. 目标驱动:确保每个演练都有明确的目标和预期结果,以便评估其有效性和价值。

  2. 渐进式迭代:逐渐增加演练场景的复杂度和挑战性,使团队能够适应变化并逐步提高系统的健壮性。

  3. 持续学习:定期复盘演练结果和反馈,记录每一次的实验案例、问题与挑战,并根据经验教训进行分类与分析、根据复盘结果进行调整和改进。

  4. 经验传承:根据总结的经验教训和成功实验案例,制定一份最佳实战指南。这些包含演练计划、场景选择、执行计划、监控以及研发问题处理机制等,帮助团队更好执行混沌演练。

  5. 跨团队协作:混沌演练与开发、运维、测试等团队紧密合作,跟混沌工程建设团队多次交流,共同推动应用系统的稳定性和健壮性。

三、混沌与传统测试的区别

混沌工程是一种帮助我们获得更多的关于系统的新认知的实验方法。它和已有的功能测试、集成测试等测试已知属性的方法有本质上的区别。混沌工程,旨在帮助我们获得更多的关于系统的新认知的实验方法,通常还能开辟出一个更广袤的对复杂系统的认知空间。

传统测试,旨在给定一个特定的条件,系统会输出一个特定的二元结果,它仅仅是对已知的系统属性可能的取值进行测验。

混沌工程的思维方式是主动去找故障,是探索性的。虽然按计划做好了降级预案,但是关闭节点时却引发了上游服务故障,进而引发雪崩,这不是靠故障注入或预先计划能发现的。

四、写在后面

混沌工程,是一种提高技术架构弹性能力的复杂技术手段,旨在将故障扼杀在襁褓之中,也就是在故障造成中断之前将它们识别出来。通过主动制造故障,测试系统在各种压力下的行为,识别并修复故障问题,避免造成严重后果。

随着系统新功能不断上线,依赖方变化等,均可能导致系统产生一系列未知故障,故混沌工程实践最重要的就是可持续,通过增加混沌实验的次数不断地发挥混沌工程的价值,Y一直在路上!

作者:京东零售 李金萍 马春荣

来源:京东云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/61199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go语言time库,时间和日期相关的操作方法

time库 用于处理时间、日期和时区的核心库。在实际开发中,常常需要与时间打交道,例如记录日志、处理时间差、计算时间间隔等等。因此,掌握time库的使用方法对于Go开发者来说非常重要。 在Go语言中,时间表示为time.Time类型&…

基于 yolov8 的人体姿态评估

写在前面 工作中遇到,简单整理博文内容为使用预训练模型的一个预测 Demo测试图片来源与网络,如有侵权请告知理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停…

嵌入式开发学习(STC51-15-红外遥控)

内容 使用外部中断功能,使按下红外遥控器,将对应键值编码数据解码后通过数码管显示 红外遥控介绍 红外线简介 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫; 其中红光的波长范围为 0.62&…

Flink Windows(窗口)详解

Windows(窗口) Windows是流计算的核心。Windows将流分成有限大小的“buckets”,我们可以在其上应用聚合计算(ProcessWindowFunction,ReduceFunction,AggregateFunction或FoldFunction)等。在Fl…

一、ADAS技术概述

根据《国家车联网产业标准体系建设指南》对智能网联汽车定义:智能网联汽车是指搭载先进的车载传感器、控制器、执行器等装置,并融合现代通信与网络技术,实现车与X(人、车、路、云端等)智能信息交换、共享,具…

阶段总结(linux基础)

目录 一、初始linux系统 二、基本操作命令 三、目录结构 四、文件及目录管理命令 查看文件内容 创建文件 五、用户与组管理 六、文件权限与压缩管理 七、磁盘管理 八、系统程序与进程管理 管理机制 文件系统损坏 grub引导故障 磁盘资源耗尽 程序与进程的区别 查…

【云原生】Serverless 技术架构分析

一、什么是Serverless? 1、Serverless技术简介 ​ Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存…

交换机Vlan实验

介绍 Vlan表示虚拟局域网。 常见的网络安全技术 VlanACL Vlan的作用 Vlan隔离了广播域,增加了网络的安全性。 知识点 默认vlan vlan1 是默认vlan,主要机器开机了,默认所有的接口都属于Vlan1 交换机的接口模式 Access : 这个模式用来…

【设计模式】-建造者模式

Java建造者模式:创建复杂对象的灵活构建者 在软件开发中,我们经常遇到需要创建一个复杂对象的情况。如果使用传统的构造函数进行对象创建,可能会导致构造函数参数过多,难以管理和维护。建造者模式(Builder Pattern&am…

MongoDB 使用总结

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

无人驾驶实战-第五课(动态环境感知与3D检测算法)

激光雷达的分类: 机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar:不旋转 激光雷达的输出是点云,点云数据特点: 简单:x y z i (i为信号强度) 稀疏:7%&…

【肺炎分类数据集】数据量非常充足的新冠肺炎分类数据共享

一、肺炎数据集介绍🍉: 1.1 格式🎈 按照标准的格式分为了①训练集train(134138575198张),②验证集val(8816张),③测试集test(234390624张)&#…

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、Node中node_modules文件夹及package.json文件的作用说明二、VUE3项目打包三、Windows Server上的Nginx部署 一、Node中node_modules文件夹及package.json文件的作用说明 node_modules是安装node后用来存放用包管理工具下载安装的包的…

【项目 计网3】Socket介绍 4.9字节序 4.10字节序转换函数

文章目录 4.8 Socket介绍4.9字节序简介字节序举例 4.10字节序转换函数 4.8 Socket介绍 所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进…

VUE之JWT前后端分离认证,学生管理系统

参考资料: SpringBoot搭建教程 SpringCloud搭建教程 JWT视频教程 JWT官网 Vue视频教程 JWT视频参考资料、VUE视频资料,及前后端demo 特别有参考价值的JWT博客1 特别有参考价值的JWT博客2 cookie、localstorage和sessionStorage的区别1 cookie、localstorage和sessi…

总结七大排序!

排序总览 外部排序:依赖硬盘(外部存储器)进行的排序。对于数据集合的要求特别高,只能在特定场合下使用(比如一个省的高考成绩排序)。包括桶排序,基数排序,计数排序,都是o…

【数据库】将excel数据导入mysql数据库

环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错) 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…

软件设计原则

文章目录 一、软件设计原则1. 开闭原则2. 里氏代换原则3. 依赖倒转原则4. 接口隔离原则5. 迪米特法则6. 合成复用原则 一、软件设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据软件…

【ASP.NET MVC】使用动软(四)(12)

一、筛选器类和Cookie实现路由 需解决的问题: 网站登录往往需要用户名密码验证,为避免重复验证,一般采用Cookie 、Session等技术来保持用户的登录状态: Session是在服务端保存的一个数据结构,用来跟踪用户的状态&…

Last-Mile Embodied Visual Navigation 论文阅读

论文阅读 题目:Last-Mile Embodied Visual Navigation 作者:JustinWasserman, Karmesh Yadav 来源:CoRL 时间:2023 代码地址:https://jbwasse2.github.io/portfolio/SLING Abstract 现实的长期任务(例如…