高并发商品秒杀系统
说明
本项目为前后端分离项目,后端代码有两个版本:一个是单体架构,另一个是微服务架构(对单体架构进行了微服务拆分)
项目地址
使用的技术
单体架构
技术 | 说明 |
---|---|
Spring Boot | 后端项目框架 |
Mybatis-Plus | 持久层框架 |
MySQL5.6 | 数据库 |
Redis | 缓存中间件 |
RabbitMQ | 消息队列(需要安装延迟队列的插件:RabbitMQ 实现延时队列 ) |
Vue.js | 前端JavaScript框架 |
Element | 基于 Vue 2.0 的桌面端组件库 |
微服务架构
在单体架构的基础上,多使用了以下技术:
技术 | 说明 |
---|---|
Spring Cloud | 微服务框架 |
Spring Cloud Alibaba | 阿里微服务框架 |
Nacos | 微服务注册中心 |
OpenFeign | Web服务客户端 |
Gateway | 微服务网关 |
功能介绍
- 用户注册与登录
- 查看正在秒杀的商品列表
- 查看正在秒杀的商品详情
- 秒杀商品,成功后下单
- 30分钟未支付自动取消订单并释放商品和秒杀商品的库存
- 模拟支付
秒杀流程图
图片展示
注册界面
登录界面
查看正在秒杀的商品
秒杀页面
我的订单
模拟支付
注销登录
模拟海量用户秒杀
用户批量注册
下面方法批量注册1000个用户到数据库中,如果是导入我的数据库文件可忽略此步
用户批量登录
执行这步前要先注册用户,如果是微服务架构就请求http://localhost:8080/user/loginAuto
这个接口即可实现批量登录,并把对应的userId和Token保存到TXT文件中
测试
并发测试使用JMeter这个软件,安装与使用教程查看这几篇博客:标签: JMeter | LeDao 的博客 (zoutl.cn)
我的JMeter配置文件的阿里云链接:https://www.aliyundrive.com/s/pmWpyo6L63J,直接在JMeter导入(File>>Open
)
测试前先删除Redis中对应的秒杀商品的key,确认可秒杀商品的数量不为0
测试的接口为:http://localhost:8080/order/save
,参数如下图所示
配置Gateway的IP限流
多种限流方式查看博客:Gateway 的基本使用 | LeDao 的博客 (zoutl.cn)
IP限流只在微服务架构版本有用,配置类ipKeyResolver
已经写好了,现在只需要配置miaosha-gateway
微服务的spring-cloud.yml
配置就行了,完整配置如下:
1 | spring: |
PS.
数据库文件在单体架构版本的GitHub仓库中,链接为:https://github.com/a6678696/MiaoSha
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeDao's Blog!
评论