知识卡片
决定要不要自建工具前,先系统性评估现有开源方案到底差在哪
内容
面对”要不要自己造一个压测工具”这个决策,团队没有直接凭印象判断,而是先系统性地考察了市面上已有的方案,并逐一列出每个方案和自身实际需求之间的具体差距,才做出自建的决定。JMeter是老牌压测工具,但默认不支持Thrift打压、需要本地安装且配置复杂、用户操作不友好;Twitter/iago支持HTTP和Thrift,但每个压测应用都需要单独创建一个项目、压测结果不直观、流量重放依赖本地文件、项目依赖较老版本的Scala导致环境搭建不便、相关文档也比较少;此外还考察过Gatling、Grinder、Locust等工具,都因为适用场景和实际需求存在出入而被排除。这个评估过程的价值不在于”最终得出了该自建的结论”,而在于评估本身的方式:不是笼统地说”现有工具不好用”,而是针对自己真正在意的每一项需求(原生支持内部RPC协议Thrift、部署配置简单、结果直观、和内部技术栈兼容),逐一检查每个候选方案在这项需求上具体是满足还是不满足、差距有多大。这条方法论对任何”要不要造轮子”的决策都适用:与其凭一句”没有合适的现成方案”就直接开始自建,不如先列清楚自己真正关心的需求维度,把每个候选开源方案在这些维度上的具体表现列成一张对照表——如果发现某几个候选方案只是在个别维度上有欠缺、其余维度都能满足,往往意味着改造或适配现有方案的代价比从零自建要低;只有当差距足够多、足够深,自建的投入产出比才真正划算,这份对照评估本身就是决策自建与否的关键证据,而不是可以省略的前置动作。
参考来源
- 位置:《高可用架构(第1卷)》第3章《电商架构热点专题》"3.5 某公司线上真实流量压测工具构建"节,"3.5.2 常见的压测工具"(源文件:_epub-src/OEBPS/Text/Chapter3_5_3.xhtml)
- 结论依据:原文详细列出JMeter("默认不支持Thrift的打压测试……需要本地安装,并且配置复杂……对于用户操作并不友好")和Twitter/iago("对每个压测应用都需要创建一个项目……压测结果并不直观……项目依赖于一个较老版本的Scala")各自的具体缺陷,以及"还考察了Gatling、Grinder、Locust等一些常见的压测工具,都因为适用场景和某公司的需求有些出入而排除了",直接支撑本卡片结论。
- 原始内容:JMeter是一个比较老牌的压测工具……默认不支持Thrift的打压测试。需要本地安装,并且配置复杂……Twitter/iago是一个由Twitter开源的压测工具……对每个压测应用都需要创建一个项目……项目依赖于一个较老版本的Scala,不便搭建……都因为适用场景和某公司的需求有些出入而排除了。