写点什么

Russ Miles:被忽略的架构师和混沌工程

2018 年 10 月 09 日

在最近于阿姆斯特丹举行的事件驱动微服务大会上,Russ Miles 声称,架构师面临的最大挑战是自身被忽视。你有很多很好的想法,比如事件驱动的微服务,但通常的反应是,这些主意听起来不错,但是对于手头要解决的问题来说过于复杂。当Miles 建议公司应该考虑将异步事件驱动系统作为实现伸缩、冗余和容错的一种方式时,通常会收到这种反应。这些术语听起来通常对公司来说是有意义的,但同样经常被忽略。

Miles 的主要工作目标是构建可靠的系统。对于他而言,可靠性是客户需求的一种考量,客户需要的是一个功能丰富且始终能正常运行的系统。这意味着我们有两股不容易共存的对立力量,特别是在复杂的系统中——一方面是持续的创新和变化,一方面是能够一直正常运行的系统。

根据 Miles 的说法,对于架构师来说最困难的事情就是让每个人都明白你正在构建一个具备弹性的系统。Miles 强调,他不仅仅是在谈论技术,而是指整个系统,包括人员、实践和流程。基于这些原因,他认为一个生产系统能够正常运作简直就是一个小小的奇迹。

Miles 引用了 John Allspaw 对弹性的定义。如果你构建的系统具备冗余、复制和分布式等特点,那么你可能正在构建一个健壮的系统。Allspaw 认为,当涉及人员时才能叫弹性。同样,混沌工程也超出了工具的范畴——它是关于人们如何思考和实现系统。

在 Miles 看来,混沌工程是一种在故障发生之前发现故障的技术,但也是一种心态:

  • 永远不要忽略故障能够为我们带来的启示,要从故障中吸取教训。

  • 要具备事前分析的态度。你可以从故障中吸取教训,但如果能在故障发生之前就分析它们会更好。

  • 这需要协作的,每个人都应该事先知道并同意你想要做的事情。

  • 从小实验开始。如果系统能够存活下来,可以逐渐加大范围。

  • 刚开始时开动你的大脑,通过手动来完成。之后,可以考虑使用工具进行自动化。

Miles 认为,混沌工程最重要的一点是你必须成为系统团队的一员。你不能成为破坏系统然后等待别人去解决问题的人。你必须参与你所做的一切,并与其他人一起修复问题。Miles 已经看到一些公司专门成立团队对系统实施破坏,但根据他的经验,这样是起不到混沌工程的作用的。

Miles 指出,在他看来,混沌工程很简单,因为只有两个主要的关键实践需要学习。他认为这不需要任何认证计划:

  • 游戏日,你聚集所有团队,经过讨论后对生产环境的某些条件进行修改,然后看看你们将如何处理故障。他指出,游戏日可能代价高昂,因为它们占用了团队很多的时间。

  • 自动化混沌实验是指能够持续探索和寻找系统弱点的自动实验。

如果你准备好开始在公司里实践混沌工程,Miles 的第一个建议就是不要使用这个术语本身。不要谈论破坏系统,而是谈论已经发生的事故以及你可以从中学到什么并加以改进。他指出,你正处于一个学习循环中,试图让系统逐步变得越来越有弹性。

Miles 总结了一些必须遵循的“混沌俱乐部”规则:

  1. 不要谈论混沌。这些概念正在变得越来越主流,但这个术语可能仍然会让人们感到失望。当人们感到能够适应时才开始使用它。
  2. 在不破坏系统的情况下总结经验。你试图赶在用户之前找到并处理系统弱点,从而改善整个系统。
  3. 混沌不应该是一个惊喜。
  4. 如果你知道系统会中断,请不要进行实验。在尝试寻找新的系统弱点之前,先尝试解决你已经知道的系统弱点。

在开发基于事件驱动的微服务系统时,最难的一件事情就是让开发人员了解如何让微服务在生产环境中有良好的表现。这包括使用正确的端点来声明服务的健康状况,并使用正确的接触点来说明服务是否运行正常。良好的日志记录是一个重要的方面,改进这一点的方法是让开发人员阅读他们自己的日志,例如,在游戏日,他们必须通过他们自己的日志了解系统都发生了什么。

在进行混沌工程时,使用事件溯源系统可以带来可观察性。在 Miles 看来,可观察性意味着能够在不改变生产系统的情况下对其进行调试。如果你正在进行某种形式的混沌实验,那么你要做的第一件事就是调试系统以便找出问题所在,并使用事件源系统,这样你就可以确切知道发生了什么以及何时发生的。

Miles 最后说,这是他职业生涯中第一次遇到了最佳实践。对于我们今天构建的复杂系统,混沌工程是一种可行的技术。通过手动的方式做少量的操作,可以采取游戏日或任何适合你的方式。如果你关心系统的可靠性或弹性,它应该是一个比较适合你的工具。

查看英文原文 Russ Miles: Ignored Architects and Chaos Engineering

2018 年 10 月 09 日 10:46579
用户头像

发布了 731 篇内容, 共 368.6 次阅读, 收获喜欢 1860 次。

关注

评论 1 条评论

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

第六周作业

alpha

极客大学架构师训练营

使用抓包工具fiddler和apipost进行接口测试

测试人生路

测试工具 fiddler

Java程序员必会的三个技能:Spring+MySQL+并发编程

Java架构师迁哥

玩转华为云开发|老板万万没想到:刚入职的我一人就搞定人脸识别开发

华为云开发者社区

软件开发 模块化流程 人脸识别 API 华为云

云小课|云数据库RDS实例连接失败了?送你7大妙招轻松应对

华为云开发者社区

数据库 网络 ssl RDS实例 端口

第1周 架构方法-作业

SuGeek

从一个HTTP请求来读懂HTTP、TCP协议

互联网架构师小马

阿里五位MySQL封神大佬耗17个月总结出53章性能优化法则

996小迁

Java MySQL 大数据 架构 面试

RabbitMQ之路由和通配符模式,附源码注释讲解

小Q

Java 学习 架构 面试 RabbitMQ

第1周作业

Rocky·Chen

第二周作业

Griffenliu

架构训练营-week6-学习总结-技术选型(二)

于成龙

架构训练营

架构训练营-week6-作业

于成龙

CAP 架构训练营

十八般武艺玩转GaussDB(DWS)性能调优(二):坏味道SQL识别

华为云开发者社区

数据库 sql 性能调优 GaussDB 算子

全网首发,做第一人纯源码讲解RabbitMQ实践,收藏吧

小Q

Java 学习 架构 面试 RabbitMQ

架构师训练营 W02 总结

Geek_f06ede

架构师训练

架构师训练营第二周作业

邢永春

架构师训练营第二周学习总结

邢永春

第二周总结

Griffenliu

一整套Java线上故障排查技巧,爱了!爱了!

互联网架构师小马

渣渣2本学历CRUD一年半,决定改变现状,努力学习两个月成功拿到美团30k offer

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营第六周课后练习

薛凯

架构师训练营第 1 期第 6 周作业

好吃不贵

极客大学架构师训练营

架构师训练营第 1 期第 6 周学习总结

好吃不贵

极客大学架构师训练营

Double Kill!! 数据联邦修炼之路

脑极体

【Java】变量声明在循环体内还是循环体外你选哪一个咧?

java金融

Java 变量声明

牛皮了!字节面试官爆肝七天七夜总结了一份算法面试笔记

互联网架构师小马

Java 程序员 字节跳动 面试 算法

架构师训练营 1 期第 6 周:技术选型(二) - 作业

piercebn

极客大学架构师训练营

架构师训练营 W02 作业

Geek_f06ede

架构师训练

第五周作业

icydolphin

极客大学架构师训练营

数据库JDBC:Statement查询

正向成长

JDBC sql查询 SQL光标

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Russ Miles:被忽略的架构师和混沌工程-InfoQ