分布式高并发商品秒杀系统
- [介绍](#介绍)
- [快速启动](#快速启动)
- [项目架构图](#项目架构图)
- [项目入门](#项目入门)
- [`TODO`](#TODO)
- [Q&A](#Q&A)
- [参考资料](#参考资料)
## 介绍
本项目是在[`dis-seckill`](https://github.com/Grootzz/dis-seckill)上改进,项目名含义为分布式秒杀系统。采用微服务思想,意在提高秒杀系统的整体性能。
#### 改进点:
- [x] 优化秒杀流程,提高单机系统性能瓶颈。[`dis-seckill-test`](https://github.com/parkt90/dis-seckill-test)
- [x] [接口安全优化](doc/接口安全优化.md)
- [x] [系统限流与降级服务](doc/系统限流与降级服务.md)
- [x] [`Nginx`水平扩展网关模块与限流配置](doc/nginx.md)
#### 秒杀系统应具备要求
1. **高性能**。秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。对应的方案比如动静分离方案、热点的发现和隔离、请求的削峰与分层过滤、服务端的极致优化。
2. **一致性**。秒杀中商品减库存的实现方式同样关键。有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分“拍下减库存"”付款减库存“以及预扣几种。系统需要在大并发更新的过程中要保证数据的准确性。
3. **高可用**。现实中难免出现一些我们考虑不到的情况,所以要保证系统的高可用性和正确性,我们还需要设计一个planB来兜底,以便应对一些意外情况。比如高并发情况下服务的熔断和降级。
## 快速启动
- 构建工具
| ⚔️ |
| ------------------------------------------------- |
| [`apache-maven-3.6.1`](https://maven.apache.org/) |
- 开发环境
| ☕ | 🌁 | 🏖 | 🎯 | 🦄 | | |
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :-------------------------------------------------: | :----------------------------------------------: | :------------------------------------------: |
| [`Java 1.8`](https://www.java.com/zh-CN/) | [`Mysql 8.0.12`](https://dev.mysql.com/downloads/mysql/) | [`Redis 5.0.5`](https://github.com/zaiyunduan123/Java-Interview/blob/master/notes/database/Redis.md) | [`Zookeeper 3.4.10`](https://github.com/zaiyunduan123/Java-Interview/blob/master/notes/framework/Zookeeper.md) | [`Rabbitmq 3.7.15`](https://www.rabbitmq.com/) | | |
| 🧐 | 🥇 | 🌈 | 🍻 | 🚀 | 📮 | 🚏 |
| [`SpringBoot 2.1.5`](https://spring.io/projects/spring-boot) | [`MyBatis 2.0.1`](https://mybatis.org/mybatis-3/zh/index.html) | [`Dubbo 2.7.1`](https://github.com/zaiyunduan123/Java-Interview/blob/master/notes/framework/Dubbo.md) | [`Nginx 1.20.1`](https://www.nginx.cn/doc/) | [`Sentinel 1.8.1`](https://sentinelguard.io/zh-cn/) | [`Thymeleaf 3.0.11`](https://www.thymeleaf.org/) | [`jmeter 5.4.1`](https://jmeter.apache.org/) |
在运行秒杀系统之前,需要**安装表格第一排软件**,并开启相应软件。
准备:修改`mysql`数据库配置,连接、账户和密码。
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123
(根据自己数据库配置做相应修改)
```
**第一步**;执行`dis-seckill-common/schema/seckill.sql`文件,初始化数据库。
**第二步**;如果安装了git,则可以采用下面的方式快速启动;
```properties
git clone https://github.com/parkt90/dis-seckill.git
mvn clean package
```
启动缓存服务:
```properties
java -jar dis-seckill-cache/target/dis-seckill-cache-0.0.1-SNAPSHOT.jar
```
启动用户服务:
```properties
java -jar dis-seckill-user/target/dis-seckill-user-0.0.1-SNAPSHOT.jar
```
启动订单服务:
```properties
java -jar dis-seckill-order/target/dis-seckill-order-0.0.1-SNAPSHOT.jar
```
启动商品服务:
```properties
java -jar dis-seckill-goods/target/dis-seckill-goods-0.0.1-SNAPSHOT.jar
```
启动消息队列服务:
```properties
java -jar dis-seckill-mq/target/dis-seckill-mq-0.0.1-SNAPSHOT.jar
```
启动网关服务:
```properties
java -jar dis-seckill-gateway/target/dis-seckill-gateway-0.0.1-SNAPSHOT.jar
```
> 注:启动服务时最好按上面的顺序启动。
如果将项目导入`IDE`中进行构建,则分别按上面的顺序启动服务模块主程序即可。
**第三步**;访问项目入口地址
<http://localhost:8082>
初始用户手机号码:13111897391,密码:000000
## 项目架构图
![项目架构图](doc/assets/项目架构图.png)
## 项目入门
- **模块介绍**
- `dis-seckill-common`:通用模块
- `dis-seckill-user`:用户模块
- `dis-seckill-goods`:商品模块
- `dis-seckill-order`:订单模块
- `dis-seckill-gateway`:网关模块
- `dis-seckill-cache`:缓存模块
- `dis-seckill-mq`:消息队列模块
用户请求全部交由`Gateway`模块处理,`Gateway`模块使用`RPC`(远程过程调用)的方式调用其他模块提供的服务完成业务处理。
- **秒杀流程图**
<img src="doc/assets/秒杀流程图.png" alt="秒杀流程图" />
- **秒杀方案介绍**:
![设计方案](doc/assets/设计方案图.png)
- **前端文件资源路径**:`dis-seckill-gateway\src\main\resources\`
## `TODO`
- [x] [项目基本技术点](doc/项目基本技术点.md);
- [x] **[秒杀流程优化](https://github.com/parkt90/dis-seckill-test)**;
- [x] **[接口安全优化](doc/接口安全优化.md)**;
- [x] **[系统限流与降级服务](doc/系统限流与降级服务.md)**;
- [x] **[`Nginx`水平扩展网关模块与限流配置](doc/nginx.md)**;
## Q&A
| Q&A |
| ------------------------------------------------------------ |
| [前后端交互接口定义](doc/前后端交互接口定义.md) |
| [前后端交互接口逻辑实现](doc/前后端交互接口逻辑实现.md) |
| [`Redis`中存储的数据](doc/Redis中存储的数据.md) |
| [使用分布式锁解决恶意用户重复注册问题](doc/使用分布式锁解决恶意用户重复注册问题.md) |
| [拦截器`HandlerInterceptor`的使用](doc/HandlerInterceptor的使用.md) |
| **[`Rabbitmq`如何保证消息的可靠投递(推荐文章)](https://ld246.com/article/1585495036072)** |
| **[`redis`和`mysql`如何实现双删一致性(推荐文章)](https://mp.weixin.qq.com/s/dYvM8_6SQnYRB6KjPsprbw)** |
| **[限流的的原理和项目中使用(近期更新)](doc/限流原理.md)** |
## 参考资料
- B站视频资料(侵删)
- [2021最新吃透电商项目秒杀系统-`SpringBoot、Redis`轻松实现Java高并发秒杀系统](https://www.bilibili
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot+Zookeeper+Dubbo打造分布式高并发商品秒杀系统.zip
共171个文件
java:77个
png:17个
md:15个
需积分: 0 0 下载量 198 浏览量
2023-12-26
16:01:33
上传
评论
收藏 21.91MB ZIP 举报
温馨提示
当然可以,以下是一份关于您的Java SpringBoot项目的简介描述: 探索Java的SpringBoot魔法 亲爱的开发者们,准备好一起踏上这次深入Java的SpringBoot之旅了吗?如果您正在寻找一个现代化、高效且易于扩展的开发框架,那么这个SpringBoot项目将是您的理想选择。 主要特点: 快速开发:SpringBoot通过自动配置和约定大于配置的原则,大大简化了项目设置和开发过程。 易于扩展:SpringBoot与生俱来的灵活性使您可以轻松集成各种服务和数据库,以满足您日益增长的需求。 安全性:内置的安全特性,如OAuth2和Spring Security,确保您的应用程序安全无虞。 微服务支持:SpringBoot是微服务架构的理想选择,可以帮助您构建模块化、可扩展的应用程序。 社区支持:全球的开发者社区意味着您可以在遇到问题时找到大量的资源和支持。 无论您是初出茅庐的Java新手,还是经验丰富的开发者,这个项目都将为您提供一个深入了解SpringBoot的机会。无论您是想学习新的技能,还是想提高现有应用程序的性能,这个项目都将是您的宝贵资源。 内容概览 项目设置和初始化 控制器设计和实现 数据持久化与数据库集成 安全性和身份验证 性能优化和监控 部署和生产环境考虑 现在,是时候让您的Java技能得到充分发挥,并掌握SpringBoot的魔法了!这个项目将带领您从基础到高级,探索SpringBoot的每一个角落。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot+Zookeeper+Dubbo打造分布式高并发商品秒杀系统.zip (171个子文件)
nginx.conf 3KB
bootstrap.css 143KB
bootstrap.min.css 118KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
layer.css 14KB
layer.css 5KB
glyphicons-halflings-regular.eot 20KB
loading-0.gif 6KB
loading-2.gif 2KB
loading-1.gif 701B
.gitignore 1KB
order_detail.htm 4KB
goods_detail.htm 3KB
register.html 6KB
login.html 4KB
goods_detail.html 4KB
order_detail.html 3KB
goods_list.html 3KB
sentinel-dashboard.jar 20.26MB
SeckillController.java 13KB
UserServiceImpl.java 7KB
AccessInterceptor.java 7KB
GoodsController.java 6KB
UserArgumentResolver.java 6KB
UserUtil.java 6KB
RedisServiceImpl.java 5KB
SeckillServiceImpl.java 5KB
UserController.java 4KB
CodeMsg.java 3KB
OrderServiceImpl.java 3KB
GlobalExceptionHandler.java 3KB
MyBlockHandler.java 3KB
MD5Util.java 3KB
MqConsumer.java 3KB
OrderInfo.java 3KB
VerifyCodeUtil.java 3KB
UserInfoVo.java 3KB
RedisLockImpl.java 2KB
GlobalExceptionHandler.java 2KB
UserVo.java 2KB
SeckillUser.java 2KB
SeckillUser.java 2KB
OrderController.java 2KB
MqProviderImpl.java 2KB
Result.java 2KB
OrderMapper.java 2KB
JsonUtil.java 2KB
UserServiceApi.java 2KB
WebConfig.java 2KB
IsMobileValidator.java 2KB
GoodsServiceImpl.java 1KB
GoodsMapper.java 1KB
RedisServiceApi.java 1KB
Goods.java 1KB
RedisConfig.java 1KB
DBUtil.java 1KB
GoodsVo.java 1KB
GoodsDetailVo.java 1KB
MQConfig.java 1KB
SeckillGoods.java 1KB
RegisterVo.java 1KB
LoginVo.java 1KB
GoodsKeyPrefix.java 1KB
BaseKeyPrefix.java 1KB
SkKeyPrefix.java 1007B
IsMobile.java 1001B
OrderDetailVo.java 954B
SeckillServiceApi.java 942B
OrderServiceApi.java 934B
RedisPoolFactory.java 891B
SeckillUserMapper.java 874B
VerifyCodeVo.java 850B
SkMessage.java 821B
ValidatorUtil.java 817B
SeckillOrder.java 813B
GoodsServiceApi.java 805B
UserContext.java 773B
AccessLimit.java 767B
DLockApi.java 729B
SkUserKeyPrefix.java 661B
OrderKeyPrefix.java 628B
AccessKeyPrefix.java 561B
UserApplication.java 511B
Index.java 507B
GlobalException.java 464B
GlobalException.java 463B
KeyPrefix.java 445B
SentinelAspectConfiguration.java 427B
UserKey.java 380B
GatewayApplication.java 375B
GoodsApplication.java 367B
OrderApplication.java 367B
MqApplication.java 365B
CacheApplication.java 347B
MqProviderApi.java 345B
UUIDUtil.java 256B
秒杀测试.jmx 11KB
bg2.jpg 80KB
jquery.min.js 82KB
共 171 条
- 1
- 2
资源评论
01红C
- 粉丝: 1637
- 资源: 1098
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功