/seckill

本系统将不同模块解耦成分布式架构,模块之间采用 rabbitMQ 和自己开发的 rpc 框架进行通信。除了实现基本的注册 和登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、异步和限流等技术。

Primary LanguageJava

seckill

项目描述

本系统将不同模块解耦成分布式架构,模块之间采用 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自定义校验器,实现对用户账号、密码的验证,使得验证逻辑从业务代码中脱离出来;
  • 全局异常统一处理。

运行项目

  1. 在数据库中执行sql目录下的脚本,建表,插入数据。
  2. 启动项目所需要的redis、rabbitMQ中间件。
  3. 在配置文件中配置中间件地址、sms的相关参数等。
  4. 运行各模块的MainApplication。
  5. 访问localhost:8888/register/to_register 注册账号
  6. 然后跳转到登录页面进行登录,即可跳转的秒杀商品列表。