其他分享
首页 > 其他分享> > 混沌工程对于开发的思考

混沌工程对于开发的思考

作者:互联网

昨天去参加了广州线下的全球敏捷运维大会,很多公司都分享了自己在敏捷运维方面的一些心得和策略,腾讯参会的主题是腾讯游戏混沌工程,里面提到的很多点是值得去思考和反思的。

混沌工程

混沌工程是一种提高技术架构弹性能力复杂技术手段,其出现的目的是为了将故障扼杀在摇篮中,而不会出现在线上,其实际就是通过故障去修复故障的模式使系统更加的安全和稳定。

故障原子

要去制作故障,就得先弄懂故障的分类和故障的最小原子,我们才能从根本上去制作这一类的故障,然后产生故障

根据故障角度不同可以化分为如下一些:

  1. 存储角度:磁盘空间满载、IO高负载、IO延迟、IO错误、文件句柄耗尽、文件删除
  2. 计算资源角度:CPU负载高、单核CPU负载高、内存满载、应用内存满载、虚拟内存满载、GPU负载高
  3. 网络角度:丢包和延迟、乱序和重复、带宽满载、限速、端口耗尽、DNS篡改
  4. 节点容器角度:开关机N秒、重启和销毁重建、删除pod、杀容器、杀pod
  5. 应用角度:杀进程、进程僵死、状态码错误、Body篡改、请求延迟、访问量激增
  6. 自定义角度:Shell脚本、Python脚本、二进制包、API插件、开源工具介入等

这些维度内的具体你故障原子在实际线上中,任意一个环节出现异常,都可能会使整个系统挂掉,所以这些故障原子其实都是我们需要去验证和保证安全的部分。

实践

混沌工程在实际的演练中会分为三个环节,也就是在三个环境中进行实际的演练操作

  1. 开发环境:开发环境中会进行频率非常高的自动化演练,其环境是与生产隔离的,并不会影响到线上业务,可以通过在开发测试环境进行大量有效的注入故障原子,使系统暴露出可能会在线上出现的问题,但其有效性并不是非常的高,因为有很多资源并不能与线上保持一致,比如资源的个数,网络环境等
  2. 预发布环境:是临近发布之前的一个环境,会比较的接近生产环境,有效性是不错的,也不会对线上业务产生影响,这里也是可以通过自动化去进行实践验证。这个实践是一天一次
  3. 生产环境:生产环境的操作是需要极其小心和谨慎的,这里的有效性是最高的,但是其操作的难度为很高,禁止通过自动化去操作,而需要多方人力配合进行实践操作,所以生产环境的实践是不允许频繁,半年一次或者一年一次进行大规模集中的混沌演练,因为一旦线上在混沌中出现了异常是会可能造成业务损失的。

思考

因为本身我自己是一个开发者,反过来思考,如果我们能够制定出符合我们自己的混沌工程系统,那么能够带我们这些开发者什么东西呢?让我们可以通过更有效的手段去降低代码的漏洞和提高系统的安全性吗?我觉得这些是混沌工程远远还不值得好处,关于这些我仍在思考。

标签:工程,混沌,环境,故障,角度,思考,满载
来源: https://www.cnblogs.com/xiaoyuu/p/15414131.html