写点什么

混沌工程 - 软件系统高可用、弹性化的必由之路

  • 2020-03-11
  • 本文字数:2351 字

    阅读完需:约 8 分钟

混沌工程 - 软件系统高可用、弹性化的必由之路

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

随着摩尔定律的终结,单机计算性能已达到了极限,然而,我们的软件系统不论是规模还是复杂度一直在增长,所以软件系统都不约而同的朝着分布式化方向发展。近年来,随着云服务、容器的出现,某些分布式系统也更容易微服务化。


抛开这些形形色色的分布式技术,我们对系统可靠性的述求却是一致的:分布式系统需要高可用,即使出现了单点或集群故障,也希望系统具备自我恢复或优雅降级的弹性能力、容错能力。


我们在合理的架构,高质量的代码,完善的测试等等方面做了很多努力,然而很多分布式系统仍旧达不到高可用、弹性化,为了尽可能发掘系统中存在的弱点,很多大型软件公司都引入了混沌工程,如国外的谷歌、网飞,国内的京东等等。哪些可以称之为系统弱点呢,比如


  • 外部系统故障,导致内部系统连锁故障,我司即出现过因为七牛服务故障导致的内部故障

  • 服务不可用时,不合适的降级方案

  • 不合适的超时机制,导致请求错误时无限次重试

混沌工程的定义:

通过观察分布式系统在受控的故障注入测试中的行为变化发掘系统弱点,并针对性的改进,从而提高系统可靠性,建立系统抵御失控条件的能力的信心。所以,混沌工程并不是一个新概念,常见的异地容灾测试也是混沌工程的一种应用。

混沌工程的一般实施步骤

  • 寻找一些系统正常运行状态下的可度量指标,作为基准的“稳定状态”

  • 假设实验组和对照组都能继续保持这个“稳定状态”

  • 对实验组进行事件注入,如服务器崩溃、硬盘故障、网络连接断开等等

  • 比较实验组和对照组“稳定状态”的差异,推翻上述第 2 条的假设


如果混沌工程实施下来两者的“稳定状态”一致,则可以认为系统应对这种故障是弹性的,从而对系统建立更多信心。相反的,如果两者的稳定状态不一致,那我们就找到了一个系统弱点,从而可以修复它,提高系统可靠性。

混沌工程的理想原则:

1)根据“稳定状态下系统的特征”做一个假设

以电商下单为例,下单系统可能包含了商品服务,交易服务,支付服务,“假设”不是着眼于各个“螺丝钉”服务的具体状态,而是着眼于整个下单系统正常运作下的外部状态,如下单量、成交金额、系统吞吐量、延时、错误率等等,这些指标一般会有大盘监控,而且除非遇到促销活动,这些指标曲线一般不会大起大落,其变化趋势是可以预期的。但是有一点需要特别注意,某些问题虽然不会怎么影响大盘数据(如缓存失效、一个 CDN 节点失效等等),但是我们仍旧需要监控系统中各个节点的微观指标(如 CPU、IO 等)以期发现这类问题(缓存失效可能导致 Mysql 集群压力增大,CPU/IO 等压力变大)。

2)事件是现实世界真的可能发生的

任何可能影响系统稳定状态的都可以作为事件,常见的,如


  • 故障类:像服务器宕机、断网等硬件故障,像七牛等外部服务不可用的软件故障

  • 非故障事件:像流量激增


我们还可以分析曾经引起系统故障的事件的种类和频次,针对性的排列优先级,并实施这些事件,避免系统再次出现这种故障。

3)在生产环境跑

根据第 1 条,一般只有生产环境的指标是可预测的,如新用户日注册量,用户日下单量。而且,由于测试环境和生产环境不可能一模一样,为了真实反映系统的可靠性,一般推荐在生产环境实施混沌工程。

4)持续集成

互联网软件每天都在更新,所以像跑持续集成一样实施混沌工程具有现实意义。

5)最小化影响范围

根据第 3 条,混沌工程可能导致线上功能不可用,甚至造成资损,所以在以找出系统弱点为目的的前提下,需要最小化故障影响范围,并且当出现严重问题时可以迅速恢复,即故障是可控的。鉴于此,有时候可以引入 A/B 测试,最小化影响范围。


上面是最理想情况下的混沌工程,现实中我们需要根据现有软件成熟度有阶段的实施混沌:

阶段一:分布式系统弹性化一般

以京东为例,他们会在双十一大促之前进行故障演练,将团队分为两组,一组作为故障的制造者,另外一组作为故障的解决者和响应者,来考察故障发生的时候,团队对故障的检测、响应、处理还有恢复能力。达到小的故障不需要人介入,大故障人工介入可以快速处理的目的。通过在大促之前的两个月期间密集的开展混沌工程,提高团队对大规模故障的容错能力。


以有赞为例,由于我们才刚刚开始,为了控制风险,起初只会在测试环境实施混沌工程,所以暂时没有可以参考的准确大盘数据,即合适的基准“稳定状态”。但也不是不可能,观察大盘数据可以认为反映的是系统宏观指标,从微观角度来讲,我们可以筛选出一批直接影响核心大盘数据(如注册量、下单量等)的接口,在对系统实施混沌后执行这些接口的场景化集成测试,通过观察测试结果来评估系统的可靠性,从而寻找系统弱点,这在测试环境是可行的。


此外,混沌工程可以认为是通用型异常不定时不定目标不定异常类型的自动化实现,如果抛开这层,手动对目标机器注入特定的一种或多种异常,并辅以对应的异常恢复手段,那我们就可以在通用异常测试中应用。

阶段二:分布式系统弹性化成熟

以网飞为例,他们基本上已经在按照上述理想的步骤和原则实施混沌工程,工作日持续、自动的实施混沌工程,系统具备高度的可靠性,弹性伸缩。

有赞混沌工程的实现:

由于混沌工程主要是注入特定的事件并引起系统故障,既然是“干坏事”的,所以我们将其命名成了“威震天”(变形金刚中的反派 Boss)。由于我们还处于第一阶段,所以故障的注入主要是人为控制,目前已实现的故障类型有:


  • CPU 高负载

  • 磁盘高负载:频繁读写磁盘

  • 磁盘空间不足

  • 优雅的下线应用:使用应用的 stop 脚本平滑的停止应用

  • 通过 kill 进程直接停止应用,可能造成数据不一致

  • 网络恶化:随机改变一些包数据,使数据内容不正确

  • 网络延迟:将包延迟一个特定范围的时间

  • 网络丢包:构造一个 tcp 不会完全失败的丢包率

  • 网络黑洞:忽略来自某个 ip 的包

  • 外部服务不可达:将外部服务的域名指向本地环回地址或将访问外部服务的端口的 OUTPUT 数据包丢弃


参考文献


PRINCIPLES OF CHAOS ENGINEERING(http://principlesofchaos.org/


2020-03-11 22:20986

评论

发布
暂无评论
发现更多内容

Rust“巨坑”?真相来了!

这我可不懂

rust 编程语言 后端

简明易懂的介绍:Selenium是什么?

Liam

编程 测试 自动化测试 web开发 测试工具

镭速-解析极速文件传输软件

镭速

文件传输软件 传输文件

LED显示屏只显示一半怎么办

Dylan

硬件 显示器 LED显示屏

袋鼠云数栈 DataOps 数据生产力实践,实现数据流程的自动化和规范化

袋鼠云数栈

DataOps

基于昇腾,安擎又双叒叕推新品!

科技热闻

推动多云管理平台发展的因素简单分析

行云管家

云计算 云管平台 上云

龙蜥社区系统运维 MeetUp

乘云数字DataBuff

腾讯云ES:一站式配置,TKE容器日志采集与分析就是这么简单

腾讯云大数据

ES

如何优雅地处理RabbitMQ中的消息丢失

互联网工科生

RabbitMQ 消息系统 消息不丢失

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

阿里技术

文件传输软件常见问题解决办法大全

镭速

文件传输软件

企业如何挑选适合自己需求的文件传输软件

镭速

文件传输软件

告别传统人肉运维,实现360°可观测!奇点云数据存算引擎DataKun R2.0发布

奇点云

产品发布 奇点云 数据安全引擎 数据存算引擎

智慧生活的下半场,从全屋智能4.0接入未来

这不科技

华为 鸿蒙系统

软件开发项目文档清单(多套实际案例)

金陵老街

【智领信创】用友 U8 cloud &亚信科技 AntDB联合产品强势来袭,0元购活动惠及陕、鲁

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 8 月 PK 榜

Lasso for mac(窗口管理器) 1.5.6中文版

mac

苹果mac Windows软件 Lasso 图片和屏幕截图工具

文心一言 VS 讯飞星火 VS chatgpt (73)-- 算法导论7.1 4题

福大大架构师每日一题

福大大架构师每日一题

IPQ5018-IPQ4019-IPQ6010-support WIFI technology-MESH-FAST ROAMING

wifi6-yiyi

mesh FASTROAMING

山东布谷网络科技详解直播打赏源码,让功能更灵活

山东布谷网络科技

App 直播源码

预设成功

FunTester

TooKit助力开发者上云

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

2023年广州国际智能窗帘及智能门窗遮阳展会

秋硕展览

Photoshop 2023 (ps 2023) for Mac v24.6/25.0beta激活版

mac

Photoshop 2023 PS2023 修图软件 苹果mac Windows软件下载

好玩有趣的HTML标签

专注前端开发

html

MES系统在机器人行业生产管理种的运用

万界星空科技

人工智能 机器人 MES系统 机器人自动化

2023年-广州国际睡眠家居产品及睡眠展会

秋硕展览

HarmonyOS系统级推送服务,打造消息通知新体验

HarmonyOS SDK

关于低代码解放程序员这件事儿

互联网工科生

低代码 可视化开发 企业级应用程序开发 JNPF

瓴羊Quick BI跻身Gartner魔力象限挑战者行列

夜雨微澜

混沌工程 - 软件系统高可用、弹性化的必由之路_文化 & 方法_有赞技术_InfoQ精选文章