本系统将不同模块解耦成分布式架构,模块之间采用 rabbitMQ 和自己开发的 rpc 框架进行通信。除了实现基本的注册 和登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、异步和限流等技术。
seckill
├── seckill-common -- 通用模块实现
| ├── entity -- 实体类
| ├── execption -- 全局异常处理器。
| ├── result -- 返回给前端的model封装,包括状态码等信息。
| ├── utils -- 通用工具包。包括数据库连接、http工具包等。
| ├── vo -- view model,前端表单提交数据的封装
| ├── constant -- 一些常量的封装
| ├── static -- 前端静态资源
| └── templates -- 前端html页面
|
└── seckill-goods/kill/order/user -- 商品库存模块/秒杀模块/订单模块/用户模块实现
├── controller -- 控制层的工作。
├── service -- 业务层的工作。
├── mapper -- 数据持久层的工作。
├── interceptor -- 拦截器的配置。
├── schedule -- 定时任务。
├── rabbitmq -- 消息队列相关配置与操作。
├── redis -- 对redis客户端操作的封装。
├── remote -- 远程服务的api接口
└── rpc -- rpc框架的配置
- 将不同的模块解耦成分布式架构,利用 rpc 框架进行远程服务之间的调用,利用消息队列实现分布式事务的最终一致性。
- 用户注册登录模块整合了手机号码短信验证服务,以及实现了双重 MD5 密码校验的密码登录;
- 利用 Redis 实现了商品信息的分布式缓存,包括页面缓存和对象缓存,减少对数据库的访问,提高业务吞吐量;
- 通过本地内存标记、库存预热、异步下单等方式优化秒杀服务,抵挡秒杀的高并发流量。
- 通过加密秒杀链接、数字公式验证码、接口限流防刷等方式,维护秒杀接口的安全,防止恶意攻击;
- JSR303自定义校验器,实现对用户账号、密码的验证,使得验证逻辑从业务代码中脱离出来;
- 全局异常统一处理。
- 在数据库中执行sql目录下的脚本,建表,插入数据。
- 启动项目所需要的redis、rabbitMQ中间件。
- 在配置文件中配置中间件地址、sms的相关参数等。
- 运行各模块的MainApplication。
- 访问localhost:8888/register/to_register 注册账号
- 然后跳转到登录页面进行登录,即可跳转的秒杀商品列表。