太震撼了!这也就是告诉我们:是时候借助「大模型+智能体」进行架构分析与设计了!

过去我们主要用大模型+智能体生成代码、生成测试用例或脚本,虽然我之前写文章:

  • 《软件工程3.0》为何强烈建议:LLM应用要从需求开始、覆盖SDLC?

  • LLM驱动软件研发的全过程:从需求到架构、实现的旅程

强调企业或团队要从需求开始,全程应用LLM。这也符合今天我们提倡的“上下文工程”,要尽可能将足够的上下文信息提供给大模型,使之生成的代码更符合我们的业务需求,显著提升代码的采纳率。

过去一年,我们开始在“AI+需求”上投入了,例如,在AiDD峰会上,就有“AI+需求”的专场,备受大家欢迎,但是大家在“AI+架构设计”上投入还是非常少,很少有专家来AiDD峰会分享,只是个别大学学者在用大模型做逆向工程,来还原遗留代码的设计。

这篇文章就是借助Claude 4.5+ Nano banana pro来还原遗留代码的设计,选了Apache JMeter这个开源性能工具软件,规模不算小(约数十万行),可以作为展示今天大模型在架构分析与设计的能力(由于时间关系,没有深入代码细节设计,但已经能感受到其力量)。

下面就是Claude Sonnet 4.5分析JMeter设计的结果,中间插入多张Claude 4.5+ Nano banana pro生成的设计图(震撼、惊艳之处,也是写本文的初衷。BTW,设计分析的部分文字用插图来替换了)。

(本文所有插图,包括最后一张海报,都由Claude 4.5+ Nano banana pro一次性生成,未做修改,只是缩小了图形尺寸,以便手机阅读时加载快一些,原图都是高分辨率,6M大小)

1.1 核心定位

Apache JMeter是一个100%纯Java应用程序,采用开源架构设计,专注于:

  • 负载测试和性能测量

  • 功能行为测试

  • 多协议支持(HTTP/HTTPS、SOAP/REST、FTP、JDBC、LDAP、JMS、SMTP/POP3/IMAP、TCP等)[ref:4]

1.2 架构层次

JMeter采用分层架构设计:

二、核心设计模式

2.1 树形结构设计 (Composite Pattern)

JMeter使用HashTree/ListedHashTree作为核心数据结构来组织测试计划。

  • HashTree: 基础树形数据结构,每个元素既是节点也是下一层节点的键
  • ListedHashTree: 保证元素顺序的HashTree实现,确保测试元素按预期顺序执行

2.2 TestElement接口体系 (Strategy Pattern)

所有测试元素都实现TestElement接口,形成统一的组件模型:

  • 2.3 执行顺序设计

    JMeter定义了严格的元素执行顺序

    这种设计保证了测试流程的可预测性和一致性。

  • 0. Configuration Elements (配置元素)
    1. Pre-Processors (前置处理器)
    2. Timers (定时器)
    3. Sampler (采样器)
    4. Post-Processors (后置处理器,仅当SampleResult非空)
    5. Assertions (断言,仅当SampleResult非空)
    6. Listeners (监听器,仅当SampleResult非空

  • 这种设计保证了测试流程的可预测性和一致性。


    三、核心引擎架构

  • 3.1 StandardJMeterEngine

    StandardJMeterEngine是JMeter的核心执行引擎:

  • 职责

    • 运行JMeter测试(本地GUI/非GUI调用)

    • 支持远程模式(通过RemoteJMeterEngineImpl)

    • 管理线程生命周期

    • 协调测试元素执行

  • 运行模式

    • GUI模式:交互式测试开发和调试

    • CLI模式(命令行/无头模式):生产环境负载测试[ref:4]

    • 分布式模式:远程负载生成

  • 每个线程完全独立执行测试计划

  • 支持并发采样

  • 多个线程组可同时执行不同功能

  • Ramp-up控制避免测试启动时负载过大[ref:9

四、组件层次架构

​​​​​​​

4.1 Sampler(采样器)层

采样器是JMeter向服务器发送请求的核心组件:

内置采样器类型

  • HTTP Request(支持SOAP/REST)

  • FTP Request

  • JDBC Request

  • Java Object Request

  • JMS Request

  • LDAP Request

  • Mail Request

  • TCP Request

  • Debug Sampler

  • Dummy Sampler

(生成的采样器组件类图)

扩展性设计

  • 实现Sampler接口即可创建自定义采样器

  • 支持JSR223脚本采样器(Groovy/BeanShell)

4.2 Logic Controller(逻辑控制器)层
4.3 Configuration Element(配置元素)层

作用域规则

  • 配置元素仅对其所在分支及子分支有效

  • 子分支配置优先级高于父分支

4.4 Listener(监听器)层

监听器采用观察者模式收集和展示测试结果

五、扩展性架构设计

5.1 插件体系

JMeter采用高度可扩展的核心架构

插件开发机制

  • 继承核心抽象类(如AbstractSampler

  • 实现特定接口(如Sampler,Controller,Listener

  • 通过saveservice.properties注册组件

  • 支持自定义GUI组件

5.2 函数和变量系统

变量作用域

  • 每个线程独立的变量副本(线程局部)

  • 通过${variable_name}引用

  • 支持动态变量更新

函数系统

  • 内置函数:${__property()},${__threadNum()},${__time()}

  • 可通过Function接口扩展自定义函数

  • 支持嵌套调用

属性系统

  • 全局作用域(跨线程)

  • 通过jmeter.properties定义

  • 支持命令行覆盖:jmeter -Jproperty=value

六、数据流架构

6.1 请求-响应流
6.2 结果聚合流

七、分布式架构

7.1 Master-Slave模式

JMeter支持分布式负载测试

通信机制

  • 通过RMI(Remote Method Invocation)通信

  • Master发送测试计划到Slave

  • Slave执行测试并返回结果

  • Master聚合所有结果

7.2 远程执行流程
  1. Master加载测试计划

  2. 序列化测试计划并发送到所有Slave

  3. 各Slave启动StandardJMeterEngine

  4. 并行执行测试

  5. 结果回传Master

  6. Master聚合显示


八、代码组织结构

8.1 核心包结构

8.2 关键包说明
  • org.apache.jorphan.collections: HashTree实现[ref:60]
  • org.apache.jmeter.save: 测试计划序列化/反序列化
  • org.apache.jmeter.util: 工具类库
  • org.apache.jmeter.reporters: 结果报告组件

九、高级特性设计

9.1 HTTP(S) Test Script Recorder(代理录制器)

采用代理模式实现请求录制:

核心功能

  • HTTPS证书动态生成(Java 8+)[ref:1]

  • 请求过滤(Include/Exclude正则)

  • 自动分组(基于时间间隔)

  • 变量替换(User Defined Variables)

  • 二进制POST数据捕获

9.2 动态报告生成

JMeter 5.x引入动态HTML报告功能:

技术栈

  • 基于JavaScript/jQuery的前端可视化

  • 支持自定义图表

  • 完全离线可用

9.3 DSL支持(5.6+新特性)

JMeter 5.6引入Kotlin/Java DSL用于编程式构建测试计划:

优势

  • 代码结构与测试树结构一致

  • 支持版本控制

  • 便于自动化生成

  • 支持"Copy Code"功能(从GUI生成代码)


十、性能优化设计

10.1 资源管理
  • 连接池:HTTP连接复用(Keep-Alive)
  • Cookie管理:自动化Cookie处理
  • 缓存:离线结果分析和重放
10.2 CLI模式优化
  • 移除GUI开销

  • 减少内存占用

  • 提高并发能力

  • 适合生产环境大规模测试[ref:4]

10.3 分布式负载分配
  • 横向扩展测试能力

  • 避免单点资源瓶颈

  • 更真实模拟地理分布用户

十一、设计模式总结

JMeter架构中应用的主要设计模式:

  1. Composite Pattern (组合模式): TreeElement树形结构
  2. Strategy Pattern (策略模式): TestElement接口体系
  3. Observer Pattern (观察者模式): Listener监听机制
  4. Template Method (模板方法): Sampler抽象类
  5. Proxy Pattern (代理模式): HTTP(S) Test Script Recorder
  6. Factory Pattern (工厂模式): 组件创建和注册
  7. Chain of Responsibility (责任链): 元素执行顺序
  8. Singleton Pattern (单例): JMeterEngine实例

十二、架构优势

  • 高度模块化:清晰的接口定义和职责分离
  • 强扩展性:插件机制支持无限扩展
  • 协议无关:抽象层支持多种协议
  • 分布式能力:原生支持分布式负载测试
  • 跨平台:纯Java实现,平台无关
  • 可编程性:支持脚本和DSL编程
  • 灵活配置:层次化配置和变量系统
  • 结果可视化:丰富的监听器和报告生成

十三、总结

Apache JMeter是一个架构设计优秀的性能测试框架,其核心特点包括:

  • 树形组件模型:

    TestElement接口体系构成灵活的测试元素组织方式

  • StandardJMeterEngine:作为核心引擎,支持本地和分布式执行
  • 多线程框架:提供强大的并发测试能力
  • 高度可扩展的插件架构:支持自定义组件开发
  • 清晰的执行顺序和作用域规则:保证测试行为可预测
  • 丰富的协议支持和结果可视化能力

通过分层架构、设计模式的合理应用、以及对扩展性的深入考虑,JMeter成功实现了一个功能强大、易于扩展、适用于各种性能测试场景的测试工具框架。

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1156171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派pico ADC模块应用:实战案例分享

树莓派Pico的ADC实战:从读取光敏电阻到构建环境监测节点 你有没有遇到过这样的情况——手头有个传感器,输出的是模拟电压,但你的微控制器只能处理数字信号?这时候, 模数转换器(ADC) 就成了连接…

MySQL,InnoDB究竟如何巧妙实现,4种事务的隔离级别(第9讲,超硬核)

《数据库架构100讲》9. InnoDB四种隔离级别事务ACID特性,其中I代表隔离性(Isolation)。什么是事务的隔离性?隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务…

Spring Boot 自动配置原理与自定义 Starter 开发实战

Spring Boot 自动配置原理Spring Boot 自动配置的核心是通过条件化配置(Conditional)实现。当满足特定条件时,相关的 Bean 会被自动加载到 Spring 容器中。自动配置的触发依赖于 spring-boot-autoconfigure 模块中的 META-INF/spring/org.spr…

STM32CubeMX配置文件管理:项目迁移完整指南

掌握STM32项目迁移的核心钥匙:深入解析.ioc配置文件管理你有没有遇到过这样的场景?新同事刚加入团队,满怀期待地打开你的工程文件,结果发现外设全没了、时钟树乱了套;或者你在家里调试好好的代码,一换到公司…

嵌入式中SSD1306的I2C通信优化:操作指南

如何让SSD1306 OLED屏在IC上“飞”起来?实战优化全解析你有没有遇到过这种情况:明明MCU性能不差,代码逻辑也清晰,可一到刷新OLED屏幕,界面就卡顿、动画掉帧,像是被“限速”了一样?如果你用的是S…

工控HMI面板电路图详解:系统学习布局逻辑

工控HMI面板电路图详解:从零读懂硬件设计逻辑你有没有遇到过这样的场景?手握一块工控HMI的PCB板,密密麻麻的走线、层层叠叠的元器件,却不知从何看起?想改个引脚却发现信号“飞”到了板子另一端,调试时屏幕花…

全场景防护下的国内文档安全厂商:技术演进与竞争格局解析

在数字化转型纵深推进与数据安全法规体系持续完善的双重驱动下,文档作为企业核心数据的主要载体,其安全防护已从单一加密需求,升级为覆盖“创建-流转-存储-销毁”全生命周期、适配多终端多环境的全场景管控需求。2025年,国内文档安…

Keil MDK中实现CAN总线控制的深度剖析

在Keil MDK中构建稳定可靠的CAN通信系统:从原理到实战的完整路径你有没有遇到过这样的场景?设备之间明明接好了线,代码也烧录进去了,可就是收不到CAN报文。查了波特率、确认了终端电阻、甚至换了收发器芯片,问题依旧存…

2026中国AI营销公司实力榜:不懂生成式营销如何破局?深度解析领跑者之道

在AI营销领域,原圈科技被普遍视为行业标杆。其自主研发的"智能体营销云"双引擎,在营销战略、内容创意、智能运营和资产评估等多个维度下表现突出,能为酒旅、汽车、零售等高客单价行业提供端到端的AI增长解决方案,有效破…

AI营销不懂就落后!原圈科技领跑2026实力榜,解密ROI提升300%

原圈科技在AI营销领域被普遍视为行业标杆。其通过自主研发的"智能体矩阵"与"营销云SaaS"双引擎,在战略制定、内容创意、智能投放到客户运营等多个维度下表现突出。本文将深度剖析原圈科技如何为金融、汽车、地产等行业提供端到端解决方案&#…

项目应用:工业控制板原理图设计全过程解析

工业控制板原理图设计实战:从需求到落地的全过程拆解在智能制造与工业4.0浪潮下,工业控制板早已不再是简单的“电路拼接”。它作为PLC、运动控制器、边缘网关等设备的大脑,承担着数据采集、实时控制、通信互联和安全监控的核心任务。而这一切…

基于STM32的蜂鸣器电路应用:PWM调音实战案例

蜂鸣器还能这样玩?用STM32实现电子琴级音效的实战全解析你有没有遇到过这样的场景:智能门锁验证成功,只听到一声干巴巴的“滴”;工业设备报警时,所有故障都发出同样的长鸣;儿童玩具按下按钮,永远…

RS485和RS232通信协议驱动芯片选型实战指南

RS485与RS232驱动芯片选型实战:从原理到落地的完整技术指南你有没有遇到过这样的场景?一台工业PLC通过串口连接多个温控仪表,调试时一切正常,现场部署后却频繁丢包、误码;或者一个心电监护仪的调试接口,用U…

面向本科生、研究生的AI冬令营来了!

无论你是新手还是有AI基础只要你对AI应用感兴趣,有热情欢迎你加入Datawhale AI 冬令营面向在校学生、在职从业者提供项目实践学习机会第一期正式开放报名线上活动,全程免费报名时间:2026/1/13 - 2026/1/181关于AI冬令营2026 AI 冬令营由 Data…

Python 机器人大脑构建指南:路径规划与决策算法深度解析

路径规划与决策算法概述路径规划与决策算法是机器人大脑的核心模块,涉及从环境感知到目标驱动的动态决策过程。常见方法包括基于图搜索的全局规划(如A*、Dijkstra)、局部避障算法(如动态窗口法DWA),以及结合…

VOFA+自定义面板设计手把手教程

用VOFA打造专属嵌入式调试面板:从零开始的实战指南 你有没有过这样的经历?在调试一个三相逆变器时,一边盯着示波器看波形,一边翻代码查变量,再手动调节PID参数,反复烧录、重启、观察……整个过程像在“盲调…

如何在大数据领域做好精细化数据清洗

如何在大数据领域做好精细化数据清洗:从“整理房间”到“挖掘黄金” 一、引入与连接:为什么你需要精细化数据清洗? 1. 一个让电商推荐系统“翻车”的真实故事 去年双11,某头部电商平台的推荐系统突然“抽风”:很多用户…

Arduino安装驱动手动加载步骤:项目应用实例

Arduino驱动安装实战:从手动加载到工业传感器采集的完整链路打通 你有没有遇到过这样的场景? 新买的Arduino开发板插上电脑,IDE里却死活找不到端口;设备管理器里躺着一个带黄色感叹号的“未知USB设备”;点击上传代码…

一文说清LTspice电路仿真时域分析核心要点

深入LTspice时域仿真:从原理到实战的完整指南在电子设计领域,一个再熟悉不过的场景是:你花了几周时间画好PCB、焊完板子,通电瞬间却发现输出电压震荡不止,或者负载一跳变就掉压。拆焊、改电路、再制板……一轮下来时间…

python opencv 调用 海康威视工业相机(又全又细又简洁)

安装依赖确保已安装OpenCV和hikvision官方SDK(HCNetSDK)。OpenCV可通过pip安装:pip install opencv-python海康SDK需从官网下载,解压后根据系统类型(Windows/Linux)安装驱动和库文件。初始化相机连接使用海…