全链路压测引擎的设计与实现

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 全链路压测引擎MAXIM的设计与实现 聶⾵風 2018.10
2. • 前期调研 • Maxim的技术演进 • 改造Gatling • 扩展Gatling • Maxim的未来规划 2
3. 技术选型的核心考量 将请求编排成业务场景 流量量控制 压⼒力力控制 数据跟请求参数的绑定 对分布式测试的⽀支持 测试报告 ⼆二次开发的成本 3
4. 前期调研 4
5. Gatling == Maxim? Gatling • 只⽀支持单机模式 • 没有 GUI ⽅方便便⽤用户操作 • 不不⽀支持脚本参数化 • 不不⽀支持压⼒力力注⼊入器器系统状态监控 5
6. Features of Maxim • ⽀支持分布式 • 简洁的 GUI,并对⽤用户隐藏压测过程的复杂性 • 管理理测试资源:脚本、数据集、压⼒力力注⼊入器器 • ⾼高效地创建、运⾏行行(⼿手动/定期)测试任务 • ⾃自动⽣生成测试报告,保留留历史报告 6
7. Maxim迭代一架构 7
8. Maxim迭代二架构 8
9. Maxim迭代一领域抽象 9
10. Maxim迭代二领域抽象 10
11. job execution状态机 11
12. Maxim控制中心的领域抽象 12
13. 改造Gatling - 日志 • 中间⽇日志存储于内存 => 中间⽇日志存储于influxdb • 保留留历史⽇日志 • 压测报告⽣生成后删除⽇日志⽂文件, 释放磁盘空间 13
14. 扩展Gatling - dubbo协议 Protocol DSL Action Check 14
15. 扩展Gatling - dubbo协议 val dubboConfig = Dubbo .protocol("dubbo") .generic(true) .url("dubbo://10.9.142.55:7100") .registryProtocol("") .registryAddress("") val jsonFileFeeder = jsonFile("dubbo.json").circular val dubboScenario = scenario("Call dubbo") .feed(jsonFileFeeder) .randomSwitch( 15d -> exec(session => transformJsonDubboData("args_types", "args_values", session)) .exec(dubbo("com.youzan.scrm.api.cim.service.fans.MkFansScenesService", "getMarketingScenes") .parameterTypes("${args_types}") .args("${args_values}") .check(jsonPath("$.code").is("200")) .check(jsonPath("$.data.courierId").is("198705936167079393")) ), 35d -> exec(session => transformJsonDubboData("args_types1", "args_values1", session)) .exec(dubbo("com.youzan.scrm.api.cim.service.fans.FansCrowdService", "getCustomizeCrowdList") .parameterTypes("${args_types1}") .args("${args_values1}") .check(jsonPath("$.code").is("200")) .check(jsonPath("$.data.paginator.totalCount").is("20")) ), 50d -> exec(session => transformJsonDubboData("args_types2", "args_values2", session)) .exec(dubbo("com.youzan.scrm.api.cim.service.fans.MkFansPlanService", "getTeamNameList") .parameterTypes("${args_types2}") .args("${args_values2}") .check(jsonPath("$.code").is("200")) ) ) setUp( dubboScenario.inject(atOnceUsers(100)) ).protocols(dubboConfig) 15
16. 扩展Gatling - dubbo协议 [ { }, { }, { ] } "args_types": ["java.lang.Long"], "args_values": [160], "args_types1": ["java.lang.Long", "java.lang.Integer", "java.lang.String"], "args_values1": [160, 1, ""], "args_types2": ["com.youzan.scrm.api.cim.request.fans.plan.FansPlanCommonQueryDTO"], "args_values2": [{"kdtId":160,"planId":263}] "args_types": ["java.lang.Long"], "args_values": [160], "args_types1": ["java.lang.Long", "java.lang.Integer", "java.lang.String"], "args_values1": [160, 1, ""], "args_types2": ["com.youzan.scrm.api.cim.request.fans.plan.FansPlanCommonQueryDTO"], "args_values2": [{"kdtId":160,"planId":263}] "args_types": ["java.lang.Long"], "args_values": [160], "args_types1": ["java.lang.Long", "java.lang.Integer", "java.lang.String"], "args_values1": [160, 1, ""], "args_types2": ["com.youzan.scrm.api.cim.request.fans.plan.FansPlanCommonQueryDTO"], "args_values2": [{"kdtId":160,"planId":263}] 16
17. Maxim的未来规划 • 压测过程和报告实时计算和展示 • ⾃自动⽣生成压测脚本和压测数据 • ⽀支持更更多的协议 • 开源 • … 17
18. 3Q
19.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.138.0. UTC+08:00, 2024-12-22 10:56
浙ICP备14020137号-1 $Map of visitor$