《4-鲁四喜-微服务架构下的测试体系建设.pdf》由会员分享,可在线阅读,更多相关《4-鲁四喜-微服务架构下的测试体系建设.pdf(43页珍藏版)》请在三个皮匠报告上搜索。
1、微服务测试体系建设鲁四喜腾讯2023 深圳站目录CONTENTS云原生与微服务云原生与微服务01 微服务架构下的测试挑战微服务架构下的测试挑战02 微服务测试体系建设微服务测试体系建设03 总结04 2023 深圳站01云原生与微服务2023 深圳站云原生:定义“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。”-云原生计算基金会(CNC
2、F)2023 深圳站云原生:技术栈供给层供给层运行时层运行时层编排和管理层编排和管理层应用定义和开发层应用定义和开发层可可观观测测和和分分析析工工具具集集2023 深圳站微服务:定义微服务-也称为微服务架构,是一种架构风格,它将应用程序构建为服务的集合-可独立部署-松耦合-由一个个小团队拥有-高度可维护和可测试微服务架构支持快速、频繁和可靠地交付大型、复杂的应用程序。-https:/microservices.io/2023 深圳站单体架构优点:-应用开发比较简单,调试容易-部署比较容易缺点:-代码复杂性增加,代码难于理解和维护-容灾能力差-研发效率降低-不利于技术栈的升级2023 深圳站微服
3、务架构优点:-降低了代码的复杂度-容灾能力强-提升研发效率-技术栈的升级更容易2023 深圳站02微服务架构下的测试挑战2023 深圳站微服务架构下的挑战分布式特性引入了开发的复杂性分布式特性引入了开发的复杂性-服务生命期管理:服务注册、服务发现等-服务间的通信机制-服务的不稳定性-网络延迟、网路异常-数据一致性、协议一致性等部署更复杂-多实例部署测试难度加大2023 深圳站微服务架构下的测试重点2023 深圳站03微服务测试体系建设2023 深圳站微服务的日志聚合2023 深圳站微服务的分布式追踪2023 深圳站微服务测试体系:单服务接口测试功能测试协议字段测试字段类型取值范围是否必填默认值
4、字符编码安全测试前置条件关键字段失效性防篡改能力重入验证敏感字段是否存在越权查询接口是否防遍历2023 深圳站微服务测试体系:单服务接口测试性能测试协议升级测试新老接口协议的兼容性新老接口的数据兼容性PB协议消息字段序列号变更bug2023 深圳站微服务测试体系:微服务生命期测试服务注册:注册后是否能够被及时发现,异常退出后再注册,服务假死服务注销:正常/异常退出,是否有服务降级处理2023 深圳站微服务测试体系:微服务实例漂移测试有状态服务无状态服务VS实例漂移实例漂移2023 深圳站微服务测试体系:微服务配置测试配置项测试:类型、长度、缺失、默认值等,配置异常时是否影响主流程。配置来源:环
5、境变量/配置中心等配置加载时机:启动时加载并验证合法性上下游关联配置的合理性:timeout配置、错误码配置、加解密算法等.2023 深圳站微服务测试体系:中断重入测试中断重入测试为什么重要?-支付100块,退款流程中断,再次发起退款,结果到账200块?-提现100块,提现流程中断,再次发起提现,到账100块两次?存在资金风险!2023 深圳站微服务测试体系:中断重入之幂等性测试幂等性幂等性:简单说就是对一个接口,相同的请求不管调用多少次,对系:简单说就是对一个接口,相同的请求不管调用多少次,对系统的影响与一次执行是相同的,对调用方的返回每次也是相同的。统的影响与一次执行是相同的,对调用方的返
6、回每次也是相同的。微服务AcceptOrder返回order_time字段。-第一次返回:2022-10-25 15:08:14-重入时返回:2022-10-25T15:08:14+08:00举例举例1:微服务AcceptServer返回记账状态。第一次返回:记账失败(记账单已经落DB)重入时返回:记账成功(记账单的DB状态未变更)举例举例2:2023 深圳站微服务测试体系:服务间强弱依赖测试假定我们有两个微服务假定我们有两个微服务A和和B,A会调用会调用B。强依赖:如果微服务强依赖:如果微服务B出现故障不可用时,微服务出现故障不可用时,微服务A也不可用。也不可用。弱依赖:如果微服务弱依赖:如
7、果微服务B出现故障不可用时,针对出现故障不可用时,针对B有个降级策略,微服务有个降级策略,微服务A仍然可用。仍然可用。举例:下载网关:举例:下载网关:强依赖鉴权服务吗?强依赖鉴权服务吗?强依赖强依赖CDN竞速服务吗?竞速服务吗?强依赖下载服务吗?强依赖下载服务吗?测试策略:1.构建服务间的依赖关系图2.利用中断重入验证强弱依赖2023 深圳站微服务测试体系:服务间消息异常测试混沌工程随机测试:网络异常模拟工具,模拟网络抖动、延迟、丢包等异常。混沌工程随机测试:网络异常模拟工具,模拟网络抖动、延迟、丢包等异常。时序建模精准测试:时序建模精准测试:基于事件偏序关系的时序建模测试。详情可参阅:QEC
8、on 2022上海:陈金龙2023 深圳站微服务测试体系:协议一致性测试2023 深圳站微服务测试体系:PB之间字段定义的一致性重点关注PB协议字段的名称、类型和取值范围,在多个不同PB间是否一致2023 深圳站微服务测试体系:PB和DB之间字段定义的一致性字段名称是否一致:如DB字段的名称以F开头,去掉F后的名称是PB协议的字段名称字段类型是否一致:防止信息丢失,如:“10ab”-10字段长度是否一致:数据截断问题2023 深圳站微服务测试体系:DB之间字段定义的一致性名称、类型、字符集、长度、默认值的一致性字符集不一致:utf8mb4 vs utf8mb3,0 xF09F8D定义类型不一致
9、:小心隐式转换字段长度不一致:数据截断问题默认值不一致.2023 深圳站账户层支付服务微服务测试体系:分布式事务下的一致性问题交易层支付服务渠道层支付服务支付结果通知支付结果通知通知商户银行商户网关支付实时请求支付结果通知支付实时请求支付实时请求MQMQ举例:事件A【买家扣款成功】、事件B【通知卖家发货】应该同时成功分布式系统中,(超时或丢包)可能存在A成功B不成功的场景,产生了一致性问题支付实时请求2023 深圳站常见的分布式事务:两阶段提交不足:1.单点故障问题协调者宕机,所有参与者都会受影响2.同步阻塞问题在第一阶段中,如果协调者出现故障或网络延迟,会导致所有参与者阻塞.3.数据一致性问
10、题提交阶段网络不稳定会导致数据不一致状况4.完成一次事务比较耗时,不适合高并发的互联网业务优点:保证强一致性(尽量)2023 深圳站常见的分布式事务:saga模式向后恢复(backward recovery)向前恢复(forward recovery)优点:1.高性能,不需要进行多次网络通信和等待2.高可靠性,每个节点有补偿操作,可通过补偿操作来恢复数据的一致性3.适合业务流程长、高并发的互联网业务不足:1.实现较复杂2.存在一定的时序问题:-“补偿”操作和“正常”操作之间-不同节点的补偿操作之间2023 深圳站账户层支付服务微服务测试体系:saga模式举例交易层支付服务渠道层支付服务支付结果
11、通知支付结果通知最大努力通知+提供交易查询接口银行商户网关支付实时请求支付结果通知支付实时请求支付实时请求MQMQ支付实时请求补偿平台补偿任务1补偿任务2补偿任务3补偿平台(saga模式向前恢复)-配置多层补偿任务,非终态均可补偿;-长时间未终态监控告警-逻辑收敛,代码复用补偿机制:各层均有补偿接口,非终态均可补偿幂等机制:所有接口支持重入补偿机制引入的问题:-场景多样:每层服务有正常、补偿两个入口。-时序问题:通知和补偿先后时序不确定2023 深圳站微服务测试体系:saga模式测试思路-构建业务的Saga模型-评估Saga模型的合理性-验证向前恢复,对可重复性事务进行幂等验证-验证向后恢复,
12、针对可补偿性事务,按照调用事务链,从关键性事务点依次往前回退验证。-时序问题:-原服务未执行,补充服务执行了-补偿服务比原服务先执行2023 深圳站04总结2023 深圳站微服务测试体系单服务接口测试微服务生命期测试微服务实例漂移测试微服务配置测试链路中断重入测试服务间强弱依赖测试服务间消息异常测试分布式事务测试协议一致性测试服务生命期数据存储服务间通信服务间协作微服务微服务2023 深圳站04应用定义和开发层03编排和管理层02运行时层01供给层-自动化及配置-容器镜像库的管理-安全合规等展望:云原生测试-云原生存储-容器运行时-云原生网络等-服务编排-服务代理、流量控制-服务网格等安全性能
13、容灾演练等-契约测试感谢聆听CSDN全球最大的中文开发者社区平台CSDN全球最大的中文开发者社区平台CSDN创立于1999年全球编程类网站排名第7(来源:Similarweb 2023.04)注册用户超过4300万,覆盖90%的中文开发者新媒体矩阵粉丝数量超过3100万超过1000家企业客户和合作伙伴目前公司员工近800名,分布在北京、长沙、上海、深圳、杭州、成都等城市,并在美国硅谷常设办事处旗下品牌旗下品牌专业中文IT技术社区:CSDN.NET多媒体专业出版:新程序员开发者专属移动APP:CSDN APP代码托管协作平台:GitCode代码工具协同平台:InsCodeIT人力资源服务:科锐福克斯丨八爪网络高校IT技术学习成长平台:高校俱乐部