社区编辑申请
注册/登录
软件架构治理与混沌工程
开发 架构
回到软件架构治理的话题上,既然混沌工程可以帮助架构师以及开发团队更好地理解系统,发现系统的弱点。

在文章《 ​​软件架构治理 之 架构混沌之谜 ​​》中我把软件架构比作一个房子,需求总是无法预测的,特别是在当前信息量巨大,网络非常发达的时代。只要对这个房子的使用场景做个简单的重新定义或补充定义,它就有了非常多的可能性,比如每个房间都需要接入网络,比如有一个房间要做成暗房用来冲洗照片,再比如有一个房间要用来摆放玩具,等等。脑洞再大些,如果未来无人机送快递到家普及了,假设每个房子都要有一块接收快递的地方,这对于上个世纪建造的房子来说,大概率需要做大规模的扩展。

软件架构治理也是一样,既需要解决现在的问题,也要为未来的扩展留有可能性。软件架构治理并不是一项单纯的技术工作,治理工作需要考虑到现在的问题,也需要考虑到未来的业务发展,单纯的从技术角度来思考软件的架构治理无疑是在雪上加霜。即便是倡导技术驱动的公司,本质上也是通过创新技术创造了新的业务,改变了人们的生活方式,从而用技术改变了世界。只有找到真实的业务价值,才能把技术的价值发挥到最大,因此 软件架构治理一定是问题或价值驱动的 。

架构师在实际做架构治理的过程中,一个难点是当系统复杂度高到超出个体认知上限时,就很难看清系统问题全貌,只能从已知问题入手。然而,已知问题往往只是冰山一角,随着系统复杂度上升,很多随机的、不可预测的问题经常发生,这种问题有些是很难重现的,每次表现也不完全一样,在这种场景下,如何能有效发现系统根本的脆弱点,防患于未然,就是一个很大的挑战。

混沌工程

为了解决软件系统复杂后的稳定性问题,近几年,混沌工程作为一种以实验来提升软件系统韧性的学科,开始逐渐在众多大企业中开始实践起来。混沌工程的概念由来已久,为什么最近几年才被大家越来越多地提及,才开始变得流行呢?我觉得原因有以下几个:

  • 开源工具的发展和完善,让大家应用混沌工程实验的成本降低。
  • 最近几年因为互联网业务的发展,微服务架构等技术的流行,软件系统的复杂度在不断提升,已远远超出人类能够记忆和认知的范围,定位问题成本越来越高,而混沌工程通过实验的方式能够快速帮助架构师找到架构上的问题。
  • 提升了研发团队对软件系统的理解,道长在他的文章《混沌工程赋能:规模化地应对上云后的未知暗债》中提出混沌工程是一种赋能活动,可以帮助开发团队理解复杂系统是如何运行和如何失效的。

那么混沌工程到底是怎样一种实验?是不是我们把各种猴子扔到生产环境中,让它们随机的搞一些破坏,看哪里出问题就修哪里?答案显然是否定的,试想如果随便扔几只搞破坏的猴子在生产环境,不可预知到底会发生什么问题,这无疑是一种自杀式的实验,任谁也不会放心大胆地去进行这样一种实验。

混沌工程实验并不是盲目的,也不是试探性的,它一定是有目的的,可控的一种实验。在混沌工程原则的网站上,定义了应用混沌工程的几个高级原则:

  1. 建立一个围绕稳定状态行为的假说
  2. 多样化真实世界的事件
  3. 在生产环境中运行实验
  4. 持续自动化运行实验
  5. 最小化爆炸半径

在第1个原则中,首先要定义一种可测量的稳定状态,并依据团队对系统的理解,定义一个假说:在某种故障发生时,系统依然能保持这种稳定状态。这里的关键点在于稳态假说,如果已经确定当故障发生时,系统一定无法保持稳态,那就没有必要进行实验了,而需要针对当前的问题去想对策。

接下来的4个原则描述了如何具体实施混沌工程实验:

  • 要模拟真实的事件,以确保实验结果的可靠性
  • 要尽量在生产环境中实验,以避免不同环境的差异(数据量,数据多样性,网络环境,并发请求数量等等)产生的影响
  • 要把实验过程自动化并持续执行,自动化以降低每次执行的成本,持续运行以便能够在有问题时及时发现
  • 要做到最小化爆炸半径,确保每次实验的影响范围都是可控的,而且是最小的

在软件架构治理中应用混沌工程

回到软件架构治理的话题上,既然混沌工程可以帮助架构师以及开发团队更好地理解系统,发现系统的弱点,那么应该如何应用混沌工程,提高研发团队对架构的掌控力,找到架构设计的问题,并加以治理?

首先 , 要对软件系统进行一次整体的盘点:有哪些组件(比如微服务、数据库、缓存等),运行环境如何(网络,VM/主机,存储等),三方依赖等等。

其次, 针对系统中的这些组件,进行优先级的排序,通常可以按下面的方式定义优先级:

  1. 基础设施环境相关,基础设施出问题,往往都是大问题
  2. 三方集成系统相关,集成系统不可控,一旦出问题,处理不好影响非常大
  3. 自研的各个组件,自研组件受控性最强,往往问题发生后修复起来更快

基于以上的优先级,可以再根据业务的影响范围,在每个层级里进行进一步的优先级定义。

最后 ,根据上面定义好的优先级,逐一定义稳定状态假说,并判断是否需要进行混沌工程实验,如果有必要,需要设计完整的实验过程和恢复方案,控制好实施范围,如果前期信心不足,可以先在非生产环境尝试,等信心足够时,再放到生产环境自动执行。

责任编辑:张燕妮 来源: 麻广广
相关推荐

2022-05-18 23:42:08

网络安全安全分析工具

2022-04-15 14:31:02

鸿蒙操作系统

2022-05-09 15:08:56

存储厂商NFV领域华为

2022-05-11 14:48:33

腾讯云寿险民生保险

2022-04-14 10:10:59

Nginx开源Linux

2022-04-01 10:08:21

SQL 优化MySQL数据库

2022-05-17 15:51:32

数据中心运维能力基础设施

2022-05-23 10:55:19

华为数字化转型架构蓝图

2022-05-09 11:57:39

云原生实践安全

2022-05-10 16:04:40

编程语言PythonC语言

2022-05-25 16:52:55

数据智能瑞数信息API

2022-05-11 15:08:52

驱动开发系统移植

2022-05-25 10:49:02

云存储云计算

2022-04-20 07:48:09

微服务链路服务器

2022-04-30 08:43:52

Spring模块化框架

2022-05-23 09:16:46

新华三

2022-04-23 16:58:24

微服务微服务架构

2022-05-24 14:26:11

云原生数据库云架构

2022-05-13 11:24:09

数据美团

2022-05-11 08:22:21

服务网关架构

同话题下的热门内容

突发!Gitee宣布仓库开源必须人工审核,「中国Github」要无了?让程序员心动的11种新编程语言风口上的低代码,技术人需要考虑哪些?中国首位游戏设计博士黄石:今日之技术即未来之艺术!所有技术都在加速发展Flutter vs ReactJS:2022年应该选哪个?用不同的测试模型来构建测试套件Linux容器技术的实现原理再有人问你什么是分库分表,直接把这篇文章发给他

编辑推荐

2017年9月编程语言排行榜:Java、C与C++三巨头还能统治排行榜多久?2017年最受欢迎的5个前端框架比较2017年11月编程语言排行榜:脚本语言怎么了?2017年3月编程语言排行榜:Swift首次进入前十最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
我收藏的内容
点赞
收藏

51CTO技术栈公众号