欢迎大家参加2021年KuboCon Cloud NativeCon 中国线上峰会现在由我给大家分享Calsplay的过去 现在与未来先做个自我介绍我叫萧长军来自阿里巴巴云原生阿里云云原生高考研家库团队化名穷谷是Calsplay的项目的Founder和Mantender同样也是商业化AhaS-Cals Founder-Mantender专注于混合工程领域多年现在是混合工程领域的布导师在此之前的话做了多年的分布质架构和应用性能监控领域相关的工作今天主要分四部分和大家介绍Calsplay的项目首先先介绍Calsplay的项目的总体概述第二的话介绍Calsplay的项目的过去还是个实验工具然后升级到实验平台再来介绍一下Calsplay的项目社区与商业化之间的关系我们先来看一看Calsplay的项目的总体发展在2018年12月在阿里巴巴内部提出了混沌实验模型由此基于此模型2019年4月开源了Calsplay的开源了Calsplay的项目天然支持基础资源如CPU内存网络 磁盘等的故障注入还有加发应用 刀壳容器在开源之后就进行就被加入到SenseF NightScape当中同年7月份支持C++场景同年10月份支持CoopNetX场景也就是在CoopNetX下你可以使用Calsplay的工具执行SAPAL的PaldNet的一些故障场景注入2020年5月份丰富了CoopNetX下的资源场景同年9月份支持CoopNetX下应用服务场景也就是你在CoopNetX下你可以对加发应用实施故障注入2021年今年的2月份开源了混沌工程平台Calsplay Boss也就是通过工具升级为平台可以白平化来执行故障注入同样23月份的话发布了Calsplay的1.0 GA版本2021年4月份进入SenseF3 Boss我们先接下来看混沌实验模型Calsplay的所有的实验场景都基于此模型来实现从基础资源到上层的应用服务还有PaldX 和CoopNetX这些实验场景包括云服务都是基于此实验模型实现我们先来看一下这个实验模型实验模型从比网上分为四层先介绍从Target最上层是Target实验八点也就是我们所说的实验组建我们对哪个组建做故障注入举个例子比如大爆服务我们Target就是大爆这个组建比如CPU网络那么我们的这个组建就是CPU对应的网络就是网络还有次盘这都是我们实验的所谓的八点然后实验范围实验范围包括集群机器如果你再单机去执行Calsplay的那么它的范围就是localhost就是本机如果你执行K8s的场景那么scoreboard的话它是K8s下分为nodecontainernodepodcontainer等match就是规则匹配器也就是实验的匹配条件比如网络我们匹配的网卡是什么我们可以匹配对应的端口对应的RP那么这种微服务大爆我们可以匹配它的服务名是什么服务版本是什么等等这种来控制整个爆炸半径或者是控制整个影响面的条件匹配最后一个是实验行为也就是我们注入的实验规则是什么我们注入的故障是什么举个例子网络网络我们可以注入延迟注入丢包注入包重复包损坏等等那么大宝服务微服务的话我们可以注入网络延迟网络我们可以注入服务延迟服务调用异常等等这是实验行为整个模型非常简单分为四层那么这个模型的意义在于可以更精准的描述混沌实验场景而且能更好地理解混沌实验注入举个例子我们对一个大宝的微服务做故障注入那么我们可以把按实验场景来描述的话就是对大宝的服务对哪台机器Score不是哪台机器Matter就服务名是什么Action注入的是什么比如异常服务调用异常可以更精准更好的去理解混沌实验而且方便沉淀现有的实验场景通过统一的模型来实现依据模型可以发掘更多的场景比如我们可以扩展更多的Matter这种pd的匹配条件实验工具实现更加规范简洁那么目前实验模型的应用应用在实验场景变量参数化参数规范化比如那些网卡名网络炮短口Rp等都这些变量的话都可以参数化参数的话都可以按我们现有的模型进行规范化实验场景领域化的水平扩展通过这种模型的话它可以适配比如应用服务K8S还有云服务这种领域化的这种水平扩展而且与领域内的标准化实现相结合可实现场景垂直扩展比如K8S的我们实现是基于K8S的CRD-S自定义资源控制器来实现的那么我可以以基于这种模式基于这个实验模型就K8S的这种标准还有实验模型来垂直的去扩展K8S下的实验场景领域间可实现实验场景附用K8S可附用上层的应用服务或者是或者是基础资源的场景而且可实现与CalSplay的CRD-S命令执行器快速集成可以便捷的构建上层混沌工程平台平台实现混沌实验工程就基于此实验模型我们可以适配这些开源的主流的实验官工具比如Latermos-CalSCalS-Mesh等等这些SenseF3Boss的项目我们都可以通过实验模型进行适配然后通过我们的CalSplayBoss平台进行托管这就是实验模型的应用OK 实验模型介绍到这那么我们再来看一下基于此模型来实现的混沌工程实验工具CalSplay的CalSplay的是一个支持多语言多环境的混沌工程实验工具目前支持3加3就是三个平台比如LinuxDocCognitis这些系统平台和容器平台另外200多个场景200多个场景只比如CPU满载还有网络延迟丢包Java内的比如OMGC还有调用延迟调用异常等等一共支持200多个场景每个场景下面又有很多丰富的参数一共3000多个参数现在已登记的企业40多家我们可以通过右边的图可以看到CalSplay的工具使用非常简单直接下载CalSplay的包解压集用即可通过Blade的命令来创建实验通Blade的创建可以通过Create命令然后后面Gain比如你要创建网络延迟可以是Network Delay这种通过GunAce参数的话你可以看到整个非常详细的使用案例还有每一个参数介绍每一条实验的话这右边举一个例子比如我要创建一个网络丢包的那么我可以指定这个端口网络账户9520端口进行网络丢戏创建实验之后的话每一个实验都会被当成一个实验对象生成一个唯一RD来记录它如果执行成功会返回一个RD的池就轮到它这里面的池后面所有的实验的生命周期管理都通过RD来进行管理如果执行失败会返回错误的详细信息恢复实验使用Destroy来恢复生成的RD即可也可以把上述的Corridor命令使用Destroy命令替代比如BladeDestroyNetworkDrop就可以销毁实验也就是对这种本地数据库因为每一个实验就会产生一个实验对象本地数据库存储如果数据库文件丢失的话也可以做一个容错的处理通过Destroy写全命令的方式来进行实验的销毁这是Calsblade的我们来看一下Calsblade的整体技术架构Calsblade它上层的话包含一个CLI通过CLI来加入里面包含命令解析器命令解析器解析到对应的指令之后它会调用下层的实验执行器来执行比如上面的例子Corridor Network它会解析到是网络网络它会调用OS执行器来执行如果是java比如你指定是double这种微服务的它会调用double的就java的java的执行器来执行java的执行器是基于自解码制技术就java agent的技术来实现的如果你执行的是Corridor K8S它会调用K8S的Acuator执行器来执行K8S的执行器是采用CRD制定支援控制器的方式通过部署Calsblade的operator来执行的这个是整个的Calsblade的技术架构我们再来看整个的项目关系在Calsblade.RO GitHub项目下面会包含很多Calsblade的项目那么核心的几个项目的话包含我们从下到上网上看Calsblade Specific Go它是整个的模型实现和工具类Calsblade的EIECOS它是基础资源的实验执行器项目Calsblade的EIEC Docker它是Docker容器的执行器项目Calsblade operator它是K8S执行器项目还有Calsblade的EIECC PlusC++执行项目Calsblade EIECGVM加发执行器项目那么Calsblade是CRD就二进制那个play的命令的一个项目入口的一个执行项目那么每一个可以看到每一层的话我们都可以实现项目的附用来达到一个最小化的一个开发的一个效率问题比如我们可以实现一个OIS的基础资源的场景那么在Docker在K8S里面都可以实现附用无需再重复编码同样的我们实现了GVM加发和CaCa的场景那么我们在容器内都可以去附用这个是Calsblade的项目之间的关系我们再来看一下Calsblade的CRR的实现CRR也就是执行器整个的Calsblade的命令执行器那么它具有以下特点整个的Calsblade的开箱机用无需安装而且具有支持命令提示所有的变量都参数化所有的参数都规范化同样的模块化支持动态扩展的一个能力对象化方便整个实现的管理这又左下角列举了整个的CPU满载那么我们可以创建也可以销毁同样的我们可以创建大宝大宝的一个微服务延迟的一个实现场景这里我们可以看到我们指定就是大宝是整套用前面的实验模型我们可以看到大宝是整个的Target也就是实验八点那么Action就是延迟Delay那么所有的Matter的话我们有时间就是3000毫秒Service指定哪一个服务Demo的一个Service服务我们指定的是一个消费者通过这种方式的话可以非常简单的实现一个固装注入整个CRR的一个流转是这样子的面临初识化然后通过压抹解析可以看到所有的执行器和Calsplay的CRR建联都是通过压抹的场景描述文件进行建联Calsplay的CRR解析通过压抹解析器解析压抹识别所有执行器下面的实验场景来调用对应的实验执行器来实行这个是整个的同样的KBIS压抹到个压抹也一样的基础支援压抹这里针对前面的实验模型做了很多接口的定义OK这个是Calsplay的CRR的实现我们再来看实验工具加瓦执行器加瓦执行器这里列举了一个加瓦场景调用数据库延迟举例我们看左边左边是一个微服务的三级调用Consumer调用ProviderProvider调用Base服务同样的Provider还调用一个数据库Massacre数据库实例我们这边举了一个案例是来就模拟Provider实例调用Demo数据库延迟我们可以看到quad我们的八点是MassacreAction是Delay延迟我们的一些Matter的话延迟600毫秒指定是哪个数据库Demo数据库表是Discount表同样我们可以细地度到对应的操作Cycle的操作是Slack的操作然后影响百分比所有的请求的影响百分比是50%OK 我们执行完成之后可以看到立即生效然后我们收到对应的监控告检Java执行器就这么Java的场景事情就非常简单底层的话是调用至间码记忆数通过挂载碳砖实现类转换的这种机制来实现对应的故障注入我们看右边Java的实验场景我们可以看到从最右边来看OM支持内存易出限程吃满指定限程数CPU满载CodeCatch满还可以指定任意类方法就是你的业务代码甚至是三方放假可以指定任意类方法做方法的延迟异常延迟篡改返回值甚至你可以通过编写Java或者Gruwe脚本Gruwe脚本来实现更复杂的故障注入比如我可以去通过和前面的流量过滤来一起来做比如指定哪一个流量下的条件来实现参数的篡改或者是指抛非常复杂的制定异常或者是篡改非常复杂的返回值对象甚至是你可以做任何日式记录这种所以说他具有强大的一个动态脚本的支持能力我们可以基于此能力来实现更加复杂的故障场景的注入我们再来看以支持的组件以支持的组件这里列决了有罪的现成是Double服务Atlantic設置It's Base, ATP Connect等等等等具有将近至少十几个以主流的Java框架这是Java执行器我们再来看一看动态脚本的注入能力刚才也介绍到比如我这里举的一个例子是模拟重电的一个返回列表那么我们要冒可这个返回数据就可以通过Java的一个动态脚本的故障注入能力来做比如这地方我这里写了一个脚本Java脚本这个脚本的话是这里冒可了一些返回值一些宠物列表的返回值那么写完这个脚本之后的话就可以使用Calsplay的命令很简单的执行比如我要模拟的是Glm动态脚本的能力我指定的内是我这个Controller就是Controller内也就是Spring的ControllerMaster的方法名叫Gatapatch获取宠物然后指定你的脚本文件是什么你这脚本名就定一个别名有区分非常简单执行完这条命令之后会动态挂着碳针匹配你对应的内和方法进行一个动态脚本的编译然后动态内的修改来实现这个故障注入所以说Calsplay的将整个的实现复杂性也进行的封装操作非常简单这是Java场景的动态脚本的注入能力我们再来看Coubernetis执行器Coubernetis执行器是至于基于Coubernetis的CRDS就制定以控制器这边来实现的通过实现了Calsplay的operator来进行一个制定以资源的控制我们可以基于Calsplay的资源定义规范比如这地方的定义规范定义也和前面的实验模型是相匹配的举个例子Scope我们对应的Scope是K8S下的load节点Target是实验8点是CPUAggerson是load附载然后match的话就是匹配是哪一个节点CPU的百分比是多少就matchOK我们通过文件描述的形式或者是直接使用Calsplay的命令就BladeK8S这种命令来执行它会自动创建Calsplay的资源然后operator监听资源变动来实现故障注入这是Colortis执行器的具体的实现我们列举一个Colortis的场景案例比如这里举例云原生大宝应用调用下游的PathColortis Service服务延迟3秒使用Calsplay的工具自带的Blade命令或者CoupleCity2以及编码的方式都可以执行有多种命令的实验的执行方式也可以通过CalsplayBoss白平化的方式去执行那么这里列举了通过两种就通过Calsplay的自带的Blade工具来执行还通过CoupleCity2来执行那么通过Calsplay工具我们可以看到我们这边created的是k8scontainer下面的大宝服务延迟对应的这个大宝的应用进程是diamond consumer延迟时间是3000毫秒指定的大宝的服务是PathColortis Service然后我们指定它的泡的名字为了查找container指定container名字然后指定控播Coffee的对应的访问权限这样执行之后的话Calsplay的会自己去创建Calsplay的资源然后流转到Calsplay的operate监听这边的资源变动实现对应的工具的透传以及命令的执行可以看到将所需的工具按需透传所需的工具然后执行这个Blade的命令可以看到它这地方进行了命令的一个拆解可以拆解为刚才我们看到大宝的一个服务的命令我们通过这个可以看到的话是KBIS下执行也非常简单就是为了通过这种命令或者是压抹文件描述的方式深层Calsplay的Calsplay的实现内部在operated内来执行一个调度执行来通过解析来附用这种主机上的Calsplay的场景比如这里附用了double的实现场景所以说你如果只实现了一个double的场景的话那么你就可以直接在KBIS下直接去使用就可以了无需再次开发是扩展比较简单那么今年的话我们对Calsplay的整个的品牌进行了升级就是从Calsplay的工具上升到了混沌工程平台我们可以看到我们支持传统的架构往云原生架构前移同样的我们可以托管很多实验工具来通过控制台的方式调度执行我们的目的是通过混沌工程帮助企业解决云原生化过程中的高可运的问题混沌工程实验平台CalsplayBoss它是面向一个多环境多集群多语言的混沌工程平台这右边是一个截图我们可以看到这个平台的特点是它支持实验工具托管目前支持Calsplay的纳特马斯CalsCalsmash已经开发完成还没有正式的release另外实验工具自动化部署通过平台你可以实现工具自动化部署你就无需去自己去部署那些实验工具的operator等等统一实验用户界面这些工具的适配工作都交给了整个的Calsplay的去Boss去做所以说整个的实验这些工具的实验使用都没有任何的区别都是界面统一去管控的另外实验目标自动获取我们可以获取这些主机KBS对应的POD还有Nail Node的这些资源名同样支持多维度的实验我们可以通过应用维度通过主机维度通过KBS的这些资源维度来实施实验支持实验场景管理还支持实验工程的避缓我们可以直接入了监控可以在平台上直接看到对应的监控数据那么我们的平台在整体架构是这样子整个的上层的话是Calsplay的Console控制台那么下面的话包含一个部署代理器代理器的话可以去适配各个工具的工具的一个部署通过接入AssembleCognites和Hellm这种通道的方式来将工具部署到对应的平台每一个工具的话都有自己的场景都有对应的场景那么我们统一的这些场景管理通过场景管理器统一的这些实验场景的管理同样的目标管理器也就是我们可以去采集这些资源RollinuxCognites这资源存主到对应的目标眼帘目标管理器当中每一个故障命工具的执行都会有一个故障注入的执行器然后我们对接了普罗米修斯的一些监控可以很好的在平台上进行整个的稳态的一个监控还最终产生于一个实验报告这是Calsplay的Boss平台的整体架构OK前面介绍完了Calsplay的Boss前面介绍完了Calsplay的工具还有混合工程平台Calsplay的Boss我们再来看一下我们商业化的一些探索商业化主要是指社区版和企业版的一个区别我们现在在做的一件事是将企业版和社区版的整个的平台的内核统一也就是这里看到的我们这边实验场景实验工具托管自动化部署多平台多语言多举行多环境我们认为是一个通用的一个能力我们社区版是一定要支持的那么同样的企业版不会再去开发的能力直接附用社区版的版本在社区版之上又做了很多深度的一些解决方案还有实验模板同样的演练防护等等一些安全审计相关的一些功能这个是社区版和企业版的关系简单来说就是社区版是企业版的一个内核实现了整个的版本的内核版本的统一后续可以做到如果想使用企业版非常丰富的企业功能的话可以实现一件升级到企业版的一个临门槛的一个迁移这也是我们目前正在做的一件事情社区版和企业版它就有相同的策略界面迁移还有整个的熟悉几乎是零成本的这个是社区版的一个套解决方案比如我们有微服务演练解决方案容器演练还有可实化演练就是集成了我们的架构感知的一个能力可以基于架构感知在整个拓铺上去直接执行混沌实验这是商业化的解决方案的探索还有整个的实验流程整个实验的流程的话我们更加的规范比如这里列举了整个混沌工程平台我们就创建实验提供商业的假设然后开始共同注入共同注入的话一些参数比如注入的一些目标机器还有对应的端口号微服的端口号等等都可以通过架构感知的数据采集来进行一个自动填充同样的基于架构感知的话你可以做上面的一些场景化或者一些原子的能力的故障场景注入还有演练度量实验报告修复方案的这都是非一体或者是整个的混沌工程避缓的相关的流程我们再来看商业化的一个探索实验详情这个是商业化实验详情页面通过这个页面我们可以看到它整个的可观测性非常强实验过程中系统指标直观展示可编演练编观察而且具有安全防护栏制定保护策略自动触发并终止演练避免系统阴演练而引起的预期外的故障同样的支持故障编排复杂的故障编排提供串联并联的这种编排方式还有丰富的权限管控基于演练空间的权限管理资源权限遵循RIME或RBAC这种权限管控规范还具备开放继承提供API这种能力好我们再来聊一聊将来Calsplay的规划Calsplay的将来会支持更多的实验工具我们现在已经支持了LatermorCalsplay的LatermorCalsCalsmash后面还会把一些主流的实验工具集成过来另外支持更多的应用语言比如GoMount这些Rust这些语言应用另外的话优化整个的实验流程和商业化版本就这地方的话同样的输出实验报告开源商业化融合我们就是一致的就实现七十区社区版和企业版的内核统一来达到优化实验流程输出实验报告的目的也就是将我们现在商业化的平台进行拆分将一些解决方案类的商业化去承载另外的一些演练的相关的能力由社区版去承载这样的话可以填补整个CalsplayBoss平台功能的不足而且还可以实现如果用户对商业化版本有需求的话可以实现一件迁移OK谢谢大家分享今天我的分享到此结束谢谢大家