华为 唐硕 - 云化下系统可靠性测试实践
2020-02-27 321浏览
- 1.云化系统可靠性测试实践 华为软件 唐硕
- 2.当前可靠性测试的主要方法 云化趋势下的变化 云化下可靠性测试方法改进 总结
- 3.基于故障模式库的可靠性测试设计 明确的故障 •明 和确 业的 务应流用场景 •明确的故障原因 •明确的故障来源 •明确的案例档案 •告警类型 •如何容错保护 •是否需要修复 •是否自动修复 • 修复措施 具体的 预期 故障 可用的 测试方 法 •故障模拟方法 •故障恢复方法 •设计参考
- 4.可靠性测试主要方式 评估模型 已有的故障模式覆盖 场景+行为的覆盖 基于故障模式的精确 测试,基于故障模式 的抽象,故障和参数 关系分析 基于测试工程方法生 成精确用例。对故障 数据进行统计分析
- 5.基于故障模式库的测试闭环 可靠性需求/ 可靠性功能特性 设计规格 可靠性质量属性 产品故障 模式库 可靠性功能特性测 试设计 自动生成测试用例 图例 测试支撑工具 用例属性扩展 故障模拟工具/方法 故障模式库评估 结果生成 测试结果导入 用例管理 产品基线用例 测 试 用 可靠性测试执行 例 属 性 扩 展 用例执行结果 故障模式库框 架 KKPPI评I评估估报报告告 故障模式测试覆盖率 KPI测试指标 DFX评估报表生成 测试设计 测试执行 测试评估
- 6.当前可靠性测试的主要方法 云化趋势下的变化 云化下可靠性测试方法改进 总结
- 7.API开放层 服务层 产品的变化 数据层 云基础服务 微服务架构 敏捷 持续交付
- 8.客户对可靠性要求变化 用户要求: 设备不出故障 出了故障不影响主要功能和业务 功能受影响能尽快定位和恢复 可用度A 0.999 0.9999 0.99999 0.999999 9的个数 三个9 四个9 五个9 六个9 年停机时间(分钟) 500 50 5 0.5 适用产品 电脑或服务器 企业级设备 一般电信级设备 更高要求电信级设备
- 9.当前可靠性测试问题 基于X86系统提供云服务,组网规模大,故障率高 • XX混合云的伸缩组服务基于X86服务器为应用提供集群&伸缩能力; • XX私有云的服务基于X86 PC服务器设计,支持200台设备,提供分布 式数据库能力; • PC服务器硬件成本低,但故障率高; 分布式/集群可靠性测试方法短板 • 传统可靠性测试在固定节点进行故障注入,与实际场景不符合; • 混合故障场景验证不足,测试工作量大且覆盖不全; • 缺少大数据下的结果校验方法; 测试效率低,成本高 • 项目周期短,大量的时间花费在已知故障覆盖上; • 当前的故障影响范围大,需要花费大量时间在分析上;
- 10.当前可靠性测试问题 故障模式库和场景+行为的可靠性测试可以理论上保证已知场景和已知故障的覆 盖,但是由于敏捷和持续交付,无法保证进行完备的可靠性测试 故障的恢复 已 知 故 障 故障模式库的覆盖 未知场景 预防与监控 场景+行为的覆盖 未 知 故 障 已知场景
- 11.当前可靠性测试的主要方法 云化趋势下的变化 云化下可靠性测试方法改进 总结
- 12.Simian Army 2012年8月,Netflix开源了他们那被人惦记好一阵子的“Chaos Monkey”,这是一套 用来故意把服务器搞下线的软件,可以测试云环境的恢复能力。 Netflix团队让Chaos Monkey亮相的时间,最早是在2010年12月的一篇官博文章,文章 内容是他们在AWS云上托管其热门视频流服务所得到的经验教训。文中总结了一点,叫做 “避免失败的最好办法是经常失败”, 反映Netflix通过主动破坏自身环境来发现弱点的做 法。 选1个例子:Chaos Monkey的19个函数 BlockAllNetworkTrafficChaosType() //阻塞网络 BurnCpuChaosType() //消耗CPU BurnIoChaosType() //IO DetachVolumesChaosType() //解挂磁盘卷组 FailDnsChaosType() //DNS失效 FailDynamoDbChaosType() //失效DynamoDB实例 FailEc2ChaosType() //失效EC2实例 FailS3ChaosType() //失效S3实例 FillDiskChaosType() //磁盘满 KillProcessesChaosType() //杀进程 NetworkCorruptionChaosType() //网络腐化 NetworkLatencyChaosType() //网络时延变长 NetworkLossChaosType() //网络丢包 NullRouteChaosType() //空路由 ShutdownInstanceChaosType() //shutdown某个实例 ScriptChaosType() //跑一个挃定的脚本 ChaosEmailNotifier() //email通知 sendTerminationNotification(); //termination通知 sendTerminationGlobalNotification(); //全局termination通知
- 13.基于CHAOS Monkey的拓展 MonkeyScheduler ChaosMonkey AWSclient ChaosCrawler Instance Selector Fault Injector Function Check frequency; frequencyUnit; threads; ——支持多故障并发 doMonkeyBusiness(); ec2Client(); asgClient(); …… <服务扩展> group(); select(); 选择节点; terminateInstance(); rebootInstance(); …… <故障点扩展> • 框架改造:基于Chaos Monkey工具扩展支持的服务 类型和故障类型; • 功能扩展:系统后续新增API接口后可灵活扩展故 障类型; • 测试用例:增加对用例的自动生成和用例的管理, 并能自定义结果检查; • 可靠性评估:基于故障注入执行结果对被测系统进 行评估 被测对象 信息管理 故障模式 和维护 故障注入 用例生成 管理和维护 用例 用例执行 数据采集 和评估 自定义结果 检查 故障构造 方法
- 14.故障影响范围
- 15.精确控制故障范围 1 服务请求 故障上 下文生 成插件 2 4 带故障上下文的请求 3 故障注入区域 5 MicroService 插件运行器 MicroService 插件运行器 MicroService 插件运行器 API Gateway 插件注册和管理器 调用流程 1. 服务请求发至API Gateway. 2. API Gateway截获请求后,根据预定义故障场景判断是否注入故障。故障的元数据被加入到统一 上下文并往下传递。 3. API Gateway会获取最新的故障场景定义。 4. 带有故障上下文的请求被发送到微服务(故障注入区域)。 5. 内嵌的插件运行器执行故障注入逻辑 •精确的控制故障范围, 不影响非相关接口 •框架可以被扩展支持其 他业务需求,例如性能 监控,数据收集等
- 16.当前可靠性测试的主要方法 云化趋势下的变化 云化下可靠性测试方法改进 总结
- 17.总结 可靠性用例随着故障模式的增多会膨胀,产品的持续交付无 法保证可靠性的完备测试 基于机器学习的动态生成方式来 进行用例生成,这种方式的核心 思想是基于遗传算法 基于产品以往发现的问题(包含研 发和现网的)使用大数据挖掘算法 ,反复迭代获取潜在风险较大的 故障和模块 当前的可靠性测试并没有解决未知故障+未知场景问题 自动监控工具实时监控(如: Simianviz/原名Sipgo ) 预测算法得到的负载模型 (如:Netflix Scryer) 生成的伸缩执行计划
- 18.Q&A 请备注:姓名 公司 欢迎交流软件测试, 骑车的话题 部门的微信公众号 软件质量报道:朱少民老师的公众号 软件质量、软件测试有深入的理解 18