Chaos Mesh 在网易伏羲私有云的应用与实践

Stella981
• 阅读 1008

Chaos Mesh 在网易伏羲私有云的应用与实践 来贡献几分钟提交:2020年CNCF中国云原生问卷

Chaos Mesh 在网易伏羲私有云的应用与实践

问卷链接(https://www.wjx.cn/jq/97146486.aspx)


作者介绍

张慧,网易伏羲 | 网易伏羲私有云质量保障负责人/开源参与者

背景

Chaos Mesh 在网易伏羲私有云的应用与实践

网易伏羲是国内首家专业游戏 AI 研究机构。为了研究员能够一站式完成模型的算法开发调试、训练调参优化、在线服务发布等流程,伏羲基于 kubernetes 打造了自主研发的私有云--丹炉。随着 kubernetes 的到来,丹炉显著提升了模型训练效率,优化了在线训练体验;但由于 kubernetes 和微服务固有的问题,如何让这个环境更加稳定成为了我们思考之重。

为什么选择 Chaos Mesh

其实早在 18 年的时候,我们就有研究过一些 chaos 工具,比如 github 上排名较为靠前的:powerfulseal,在使用过程中该工具的不少问题掩盖了测试的有效性,让我们在解决环境问题上耗费了特别多的时间 ;比如 kube-monkey,虽然整合 kubernetes 可以随机使 pod 异常,但无法注入网络和 node 级别的故障。在整个研发和测试过程中一直想要实践混沌工程,但进度相对缓慢。

我们一直在想,我们需要什么样的混沌工程工具,首先它应该满足以下几个需求:

  • 云原生生态, k8s 已经基本是服务编排和调度的事实标准,应用程序的运行时环境已经完全标准化。对于完全运行在 K8s 上的应用来说,云原生的工具是个很重要的入口。也有一些其他的工具是首先支持物理机/虚拟机,然后 COPY 一份实现到 k8s 上的。

  • 足够多的注入类型 单纯的 Kill pod 还不够,需要能模拟网络,IO 等,特别对于有状态的服务来说,网络显得尤为重要。

  • 可视化,一目了然,对于应用来说,什么时候注入了故障, 什么时候能够恢复,这个对于我们看 metrics 判断是否有异常是相当重要的。

  • 活跃的社区支持,作为开发者我们可以看到, Github 上有的产品用着用着就没人维护了,而且作为一个测试人员,我们并不想去了解整个实现,有时候出现一些边边角角的问题解决起来并不容易。所以,长久的技术支持至关重要。

  • 对应用无侵入性,不需要任何领域知识(包括 JVM)。

  • 已有真实使用场景,我们希望能有已有使用案例,能够借鉴和拓展。

在 2019 年, Chaos Mesh 出现了,一个通过CRD来定义故障类型的混沌测试,足够吸引一个做了多年容器云测试的人,因为 Chaos Mesh 够云原生,同时也支持多种 Chaos 操作,基本满足我们现在的需求。因此我们使用 Chaos Mesh 来对我们的应用进行混沌测试。

https://github.com/chaos-mesh/chaos-mesh

Chaos Mesh 在网易伏羲私有云的应用与实践

Chaos Mesh 架构图

使用过程

Chaos Mesh 相对其他的混沌工程工具有着天然的优势。类型的丰富程度应该能直接决定找到问题的数量和增强大家对自己系统信心的。在使用 Chaos Mesh 对我们的容器云进行测试时,通过 pod-kill 可以稳定复现 rabbitmq 的脑裂问题,这个脑裂如果在线上出现,对于我们来说可能就是一场灾难。我们 rabbitmq 的架构如图所示:

Chaos Mesh 在网易伏羲私有云的应用与实践

如图所示,当 rabbitmq 集群出现脑裂时,会出现数据写入冲突或者出错,造成数据不一致等较为严重的问题,在我们的使用场景下,消费者没有正常的消费,一直报服务器异常,从平台角度看,就是无法使用。

除了脑裂问题,我们在使用过程中也发现了其他一些问题,比如启动失败,down 掉的 broker 集群 join 失败,心跳超时,connection channel shutdown 等接近 20 个问题。

通过 Chaos Mesh 找出来这些问题之后,我们的研发也很快 fix 了这几个故障,提升了丹炉私有云的稳定性。

一个快速成长的项目

Chaos Mesh 不断更新和改进。当我们第一次采用它时,它甚至还没有达到稳定的版本。它没有调试或日志收集工具,并且仪表板组件仅适用于TiDB。我们可以使用Chaos Mesh测试其他应用程序的唯一方法是通过 `kubectl apply` 执行YAML配置文件。

Chaos Mesh 1.0 修复或改善了大多数这些限制。它提供了更细粒度和强大的混沌支持,通用的混沌仪表板,增强的可观察性以及更精确的混沌范围控制。这些都是由开放,协作和充满活力的社区推动的。

https://chaos-mesh.org/blog/chaos-mesh-1.0-chaos-engineering-on-kubernetes-made-easier

后续展望

很开心能看到 Chaos Mesh 项目的快速增长以及被更多的人使用。我们也对自己使用 Chaos Mesh 所得到的结果感到满意。

但是,混沌工程是一个很大的工作领域。将来,我们希望看到以下功能:

  • 自动化的故障注入,能够自定义故障类型和使用标准化的方法来验证实验对象

  • 一些通用组件的标准的测试用例,比如 MySQL, Redis 和 Kafka

我们和 Chaos Mesh 的维护者们讨论过这些新的功能,他们也将会在 Chaos Mesh 2.0 里面进行支持

如果大家有兴趣,可以通过 Slack (#project-chaos-mesh) 和 GitHub 加入到 Chaos Mesh 的社区中来。

https://cloud-native.slack.com/

https://github.com/chaos-mesh/chaos-mesh

点击【阅读原文】阅读网站原文。

Chaos Mesh 在网易伏羲私有云的应用与实践

扫描二维码联系我们!


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。

_CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。_

Chaos Mesh 在网易伏羲私有云的应用与实践

本文分享自微信公众号 - CNCF(lf_cncf)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这