随着摩尔定律的终结,单机计算性能已达到了极限,然而,我们的软件系统不论是规模还是复杂度一直在增长,所以软件系统都不约而同的朝着分布式化方向发展。近年来,随着云服务、容器的出现,某些分布式系统也更容易微服务化。抛开这些形形色色的分布式技术,我们对系统可靠性的述求却是一致的:分布式系统需要高可用,即使出现了单点或集群故障,也希望系统具备自我恢复或优雅降级的弹性能力、容错能力。我们在合理的架构,高质量的代码,完善的测试等等方面做了很多努力,然而很多分布式系统仍旧达不到高可用、弹性化,为了尽可能发掘系统中存在的弱点,很多大型软件公司都引入了混沌工程,如国外的谷歌、网飞,国内的京东等等。哪些可以称之为系统弱点呢,比如
通过观察分布式系统在受控的故障注入测试中的行为变化发掘系统弱点,并针对性的改进,从而提高系统可靠性,建立系统抵御失控条件的能力的信心。所以,混沌工程并不是一个新概念,常见的异地容灾测试也是混沌工程的一种应用。
如果混沌工程实施下来两者的“稳定状态”一致,则可以认为系统应对这种故障是弹性的,从而对系统建立更多信心。相反的,如果两者的稳定状态不一致,那我们就找到了一个系统弱点,从而可以修复它,提高系统可靠性。
以电商下单为例,下单系统可能包含了商品服务,交易服务,支付服务,“假设”不是着眼于各个“螺丝钉”服务的具体状态,而是着眼于整个下单系统正常运作下的外部状态,如下单量、成交金额、系统吞吐量、延时、错误率等等,这些指标一般会有大盘监控,而且除非遇到促销活动,这些指标曲线一般不会大起大落,其变化趋势是可以预期的。但是有一点需要特别注意,某些问题虽然不会怎么影响大盘数据(如缓存失效、一个CDN节点失效等等),但是我们仍旧需要监控系统中各个节点的微观指标(如CPU、IO等)以期发现这类问题(缓存失效可能导致Mysql集群压力增大,CPU/IO等压力变大)。
任何可能影响系统稳定状态的都可以作为事件,常见的,如
我们还可以分析曾经引起系统故障的事件的种类和频次,针对性的排列优先级,并实施这些事件,避免系统再次出现这种故障。
根据第1条,一般只有生产环境的指标是可预测的,如新用户日注册量,用户日下单量。而且,由于测试环境和生产环境不可能一模一样,为了真实反映系统的可靠性,一般推荐在生产环境实施混沌工程。
互联网软件每天都在更新,所以像跑持续集成一样实施混沌工程具有现实意义。
根据第3条,混沌工程可能导致线上功能不可用,甚至造成资损,所以在以找出系统弱点为目的的前提下,需要最小化故障影响范围,并且当出现严重问题时可以迅速恢复,即故障是可控的。鉴于此,有时候可以引入A/B测试,最小化影响范围。
上面是最理想情况下的混沌工程,现实中我们需要根据现有软件成熟度有阶段的实施混沌:
由于混沌工程主要是注入特定的事件并引起系统故障,既然是“干坏事”的,所以我们将其命名成了“威震天”(变形金刚中的反派Boss)。由于我们还处于第一阶段,所以故障的注入主要是人为控制,目前已实现的故障类型有:
参考文献
PRINCIPLES OF CHAOS ENGINEERING
我的其他博客
异步系统的两种测试方法
我的开源项目 —— 方便产品、开发、测试三方协同自测的管理工具
捉虫记
ps:
有赞测试组在持续招人中,大量岗位空缺,只要你来,就能帮你点亮全栈开发技能树,有意向换工作的同学可以发简历到 sunjun【@】youzan.com
欢迎关注我们的公众号
Original url: Access
Created at: 2019-09-26 18:28:38
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论