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

Stella981
• 阅读 580

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源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
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
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
5个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
小森森 小森森
5个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
密钥管理系统-为你的天翼云资产上把“锁
本文关键词:数据安全,密码机,密钥管理一、你的云上资产真的安全么?1.2021年1月,巴西的一个数据库30TB数据被破坏,泄露的数据包含有1.04亿辆汽车和约4000万家公司的详细信息,受影响的人员数量可能有2.2亿;2.2021年2月,广受欢迎的音频聊天室应用Clubhouse的用户数据被恶意黑客或间谍窃取。据悉,一位身份不明的用户能够将Clubho
NVIDIA安培架构下MIG技术分析
关键词:NVIDIA、MIG、安培一什么是MIG2020年5月,NVIDIA发布了最新的GPU架构:安培,以及基于安培架构的最新的GPU:A100。安培提供了许多新的特性,MIG是其中一项非常重要的新特性。MIG的全名是MultiInstanceGPU。NVIDIA安培架构中的MIG模式可以在A100GPU上并行运行七个作业。多实
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue