杭州每刻科技有限公司是一家领先的智能云财务产品和解决方案服务商,产品采用最新的微服务架构,内部业务逻辑十分复杂。对于一个大型的微服务应用,保证系统的健壮性是一件非常重要但具有挑战的话题。因此每刻科技引入了 PingCAP 云原生混沌工程测试平台 Chaos Mesh 来解决在微服务健壮性测试过程中遇到的痛点。本文分享了 Chaos Mesh 在每刻科技实际场景的使用经验。
作者:崔星海,杭州每刻科技质量保证部。
引言
每刻业务痛点
为什么选择 Chaos Mesh?
故障的不可预测以及异常的不可复现性
专为 Kubernetes 设计
基于 Chaos Mesh 的混沌实验
Exception(抛出异常) GC (Java 垃圾回收) Latency (方法延迟) Return

案例 1:Exception

Class:全类名的路径 Method:方法名称 Port:指 Byteman agent 使用的端口,要保证不和其他服务的端口冲突

命名空间选择器:应用所处的命名空间 标签:应用所属的标签,具体可参考 Kubernetes 对标签的定义


案例 2:Latency(方法延迟)

Latency:延迟时间(ms) Class:全类名的路径 Method:方法名称 Port:指 Byteman agent 使用的端口,要保证不和其他服务的端口冲突

案例 3:修改接口返回

RULE return new info
CLASS com.maycur.dingtalk.facade.UnifyFormFacade
METHOD getApprovalUnifyForms
AT EXIT
BIND
Page:com.github.pagehelper.PageInfo=$!;
UnifyFormList:com.maycur.dingtalk.dto.UnifyFormListDto=Page.getList().get(0);
IF true
DO
UnifyFormList.setInvoiceBagCode("123");
return Page;
ENDRULE

CLASS:全类路径; METHOD:方法名; AT EXIT:表示这段脚本在函数 return 的时候被触发; BIND:将上下文中的数据绑定到变量中, 以便后文使用; Page:com.github.pagehelper.PageInfo=$!:定义了一个名为 Page 类型为com.github.pagehelper.PageInfo 的变量, 其值为$!, 即该函数的返回值; UnifyFormList:com.maycur.dingtalk.dto.UnifyFormListDto=Page.getList().get(0):定义了名为UnifyFormList的变量, 类型为com.maycur.dingtalk.dto.UnifyFormListDto 值为 Page.getList().get(0); DO:表示脚本被触发时执行的操作; UnifyFormList.setInvoiceBagCode("123"):通过 setter 设置修改后的值; return Page:返回 Page 对象;
总结

文章转载自PingCAP,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




