拆解业务逻辑分析

宏观架构:两端分离

|--------|---------------|---------------------------------------------------------------------------------|
| 业务模块 | 核心关联表 | 测开设计用例的突破点 |
| B端商品上架 | pms_product | 验证异常边界:如果前端不传必填项 product_category_id(分类ID),后端是优雅报错还是直接抛出 500 异常? |
| C端前台浏览 | pms_sku_stock | 数据驱动验证:当 pms_product 表中有 10 万条数据时,前台接口的加载时间是否会因为缺少索引导致严重的慢查询(Slow Query)? |
| C端核心下单 | oms_order | 状态机流转断言:用户下单未付款,状态是否为 0;当利用 RabbitMQ 取消超时订单时,状态是否能准确变更为 4(已关闭),且库存成功回滚? |

1.mall-admin (B端-后台管理系统):

主要给内部运营人员使用,负责"造物"(例如上架商品、设置秒杀活动、处理退款) 。它的特点是接口逻辑极其复杂,但并发量很低 。我们后续为了压测而准备海量测试数据,依据的就是 B 端的业务逻辑

1.1 pms_ (商品模块 - 核心造物)

运营人员上架商品的数据在这里

pms_product (商品主表):里面的字敦就是造数据的基础属性

注意:

造数据时选择核心字段:

(1)数据库底层强制必填项:表中不是null的项,绝对不为空的项需要造出来

(2)业务链路必填项:满足业务逻辑的数据需要造出来

表单独立性:

每个表的字段属性都是独立的,只有关系型数据库需要表之间设计范式加入的product_category_idbrand_id 等字段,像"钩子"一样去关联其他的表,而不是把名字、价格等属性再在其他表里复制一遍。

1.2.pms_sku_stock(SKU 库存表):

理解一个商品比如 (iPhone 15)如何裂变到SKU(比如 黑色 128G、白色 256G)并且进行标价,这是高并发的重灾区

1.3.oms_ (订单模块-核心管理):

oms_order (订单主表):里面的status 字段叫状态机,显示商品购买后的状态(0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单)

1.4.ums_(用户与权限模块)

动态映射(Swagger 触发,Navicat 抓包)

进行一次实际的业务操作:新增商品->更新商品状态,查看后台数据库信息是否更新

1.4.1 进入登录接口并获取token

在使用 api 接口修改数据前,需要获得管理员权限才可以修改数据库数据

在swagger里找到类似 UmsAdminController (后台用户管理) 相关的分组

找到登录接口,路径通常是 /admin/login

点击 Try it out,在请求体中输入默认的管理员账号和密码(通常账号是 admin,密码是 macro123,如果不确定,可以去 Navicat 查看 ums_admin 表)。

这里注意:后端数据库只能查到账号信息,密码信息用BCrypt算法加密成密文,该密码由前端输入用户名和密码后连接到数据库,数据库对密码进行加密得到,且这个密文是无法逆向破解的,所以无法通过数据库得到密码值

点击 Execute 执行。如果账号密码正确,你会看到响应体(Response body)里返回了一个长长的字符串,这个字段通常叫 token把这个长字符串复制下来

获取到的token是

复制代码
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE3Nzg1ODkxMzQyODMsImV4cCI6MTc3OTE5MzkzNH0.LNYj4rfN2wQYOAc7P6H_VfpBktz-PDubxeXuvWcDd54B0U5R4n0Bg7-dJdTDUrY_Q_GzKY3l8srrHuRskwfvPA

回到swagger顶部页面,点击带锁的 Authorize 按钮,输入Bearer (一定有空格)+token后,确定🔒关闭后,重新更新接口并填入修改数据

1.4.2 添加新的商品信息

在填入数据前查看该表pms_product中必须填入数据的属性,这些是添加商品信息时必写的内容

在swagger中选择创建商品,输入修改的内容,点击excute,观察响应体是否为"操作成功",返回值200,data为1

在后端数据库刷新pms_product表,查询到对应数据,操作成功

2.mall-portal(C端-前台移动端):

这是面向海量真实买家的端,主要负责"消费"(例如浏览商品、加入购物车、高并发秒杀、提交订单) 。它的特点是性能瓶颈的高发地,也是用 JMeter 压测,寻找系统极限的压测主战场 。

2.1 ums_ (会员认证模块):

普通买家在前台登录->请求 UmsMemberController ->查询会员表 ums_member-?返回 C端 专属 Token

2.2 pms_ (商品与营销模块):

买家刷新首页->调用 /home/content->高速从 Redis 缓存或 pms_product 表中读取你之前用 Python 灌入的 10 万条商品数据

2.3 oms_(订单与分布式事务模块):

核心下单流转:买家点击"提交订单" -> 调用 OmsPortalOrderController -> 触发严格的订单状态机(0: 待付款 -> 异步发送消息给消息队列 RabbitMQ -> 扣减 pms_sku_stock 库存 -> 最终持久化落盘至订单主表 oms_order

3.本项目的压测架构:

服务器:VMware 内存6GB

VNMware 桥接网络:确保虚拟机和客户机连通,数据成功打入

客户机:Windows系统的PyCharm

数据库:navicat通过 3306 端口,实时拉取了虚拟机里 MySQL 的画面

被测服务器:VMware虚拟机

运行 MySQL、Redis 以及后续的后端 Java 代码。它模拟的是真实的"大厂生产环境服务器"

特点:分配了6GB内存,防止后续高并发流量打过来,MYSQL内存不够造成OOM

施压机:电脑本机Windows

用PyCharm写脚本造10W条数据,为后续Jmeter模拟压测做准备,这是一个极其消耗 CPU 计算能力和内存的动作

特点: 本机的 CPU 绝大部分都要用来支撑 JMeter 的多线程引擎和 Python 的循环逻辑。

注意:为什么绝对不能把 Python/JMeter 放到虚拟机里跑?

资源互相踩踏: 虚拟机总共就 6G 内存。如果你在里面跑 JMeter,JMeter 发起高并发可能就要吃掉 3G 内存,那留给 MySQL 的就只剩 3G 了。最终系统崩溃,你根本不知道是被压垮的,还是 JMeter 把资源抢光了。

监控数据失真: 压测的核心是监控虚拟机的 CPU 和内存使用率,CPU到100%时无法判断是Jmeter脚本占CPU多还是后端代码太复杂导致CPU过高

内存占用问题:

在做压测时windows系统和虚拟机都占内存 ,PyCharm造的数据最终会以.ibd结尾的数据文件形式存到虚拟机虚拟磁盘里,Windows内存不占用

但在运行过程中Windows本机 Pycharm 运行消耗内存,IDEA的JAVA 程序也吃内存

虚拟机里收到10W条数据内存会升高

PyCharm 运行停止本机内存会释放,虚拟机的数据会放在硬盘里

相关推荐
染指11101 小时前
2.AI大模型-链式思考TOC让AI实现思考-优秀提示词设计技巧
大数据·数据库·人工智能
知识分享小能手1 小时前
R语言入门学习教程,从入门到精通,R语言获取数据 (7)
开发语言·学习·r语言
m0_624578591 小时前
SQL数据更新时如何减少锁表时间_合理控制事务边界与并发
jvm·数据库·python
2401_867623982 小时前
如何提取SQL日期中的月份_使用MONTH函数快速过滤
jvm·数据库·python
ㄟ留恋さ寂寞2 小时前
JavaScript中箭头函数在大括号省略时的隐式返回机制
jvm·数据库·python
Chockmans2 小时前
春秋云境CVE-2022-32991(手注和sqlmap)保姆级教学
数据库·安全·web安全·网络安全·oracle·春秋云境·cve-2022-32991
木木_王2 小时前
嵌入式学习 | STM32裸板驱动开发(Day01)入门学习笔记(超详细完整版|点灯实验 + 库函数代码 + 原理全解)
linux·驱动开发·笔记·stm32·学习
JAVA面经实录9172 小时前
Java架构师最终完整版学习路线图
java·开发语言·学习
叶子野格2 小时前
数据集网站kaggle注册无验证码选项?
学习