/dis-seckill

:punch:SpringBoot+Zookeeper+Dubbo打造分布式高并发商品秒杀系统

Primary LanguageJava

分布式高并发商品秒杀系统设计

介绍

本项目为另一个项目seckill的分布式改进版本,dis-seckill意为:distributed seckill,即分布式秒杀系统。

商品秒杀与其他业务最大的区别在于:

  • 低廉价格;
  • 大幅推广;
  • 瞬时售空;
  • 一般是定时上架;
  • 时间短、瞬时并发量高、网络的流量也会瞬间变大。

除了具有以上特点,秒杀商品还需要完成正常的电子商务逻辑,即:(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货。

本项目正是基于上述业务特点进行设计的,在项目中引入诸多优化手段,使系统可以从容应对秒杀场景下的业务处理。

另外,项目seckill为单体应用,在大并发情形下处理能力有限,所以本项目对其进行分布式改造,对职责进行划分,降低单体应用的业务耦合性。

快速启动

  • 构建工具

    apache-maven-3.6.1

  • 开发环境

    JDK 1.8、Mysql 8.0.12、SpringBoot 2.1.5、zookeeper 3.4.10、dubbo 2.7.1、redis 5.0.5、rabbitmq 3.7.15

在安装之前,需要安装好上述构建工具和开发环境,推荐在linux下安装上述开发环境。

第一步;完成数据库的初始化,使用./dis-seckill-common/schema/seckill.sql初始化数据库。

第二步;如果安装了git,则可以采用下面的方式快速启动;

git clone git@github.com:Grootzz/dis-seckill.git
mvn clean package

启动缓存服务:

java -jar dis-seckill-cache/target/dis-seckill-cache-0.0.1-SNAPSHOT.jar

启动用户服务:

java -jar dis-seckill-user/target/dis-seckill-user-0.0.1-SNAPSHOT.jar

启动订单服务:

java -jar dis-seckill-order/target/dis-seckill-order-0.0.1-SNAPSHOT.jar

启动商品服务:

java -jar dis-seckill-goods/target/dis-seckill-goods-0.0.1-SNAPSHOT.jar

启动消息队列服务:

java -jar dis-seckill-mq/target/dis-seckill-mq-0.0.1-SNAPSHOT.jar

启动网关服务:

java -jar dis-seckill-gateway/target/dis-seckill-gateway-0.0.1-SNAPSHOT.jar

注:启动服务时最好按上面的顺序启动。

如果将项目导入IDE中进行构建,则分别按上面的顺序启动服务即可。

第三步;访问项目入口地址

http://localhost:8082/user/index

初始用户手机号码:18342390420,密码:000000

系统架构

系统架构

  • 注册中心使用zookeeper;
  • 缓存采用redis;
  • 消息队列采用RabbitMQ;
  • 用户请求全部交由Gateway模块处理;
  • Gateway模块使用RPC的方式调用其他模块提供的服务完成业务处理。

模块介绍

  • dis-seckill-common:通用模块
  • dis-seckill-user:用户模块
  • dis-seckill-goods:商品模块
  • dis-seckill-order:订单模块
  • dis-seckill-gateway:网关模块
  • dis-seckill-cache:缓存模块
  • dis-seckill-mq:消息队列模块

Q&A

TODO

  • 引入JWT简化权限验证;
  • 完成用户注册功能;
  • 引入分布式锁保证更改密码接口用户注册接口的幂等性,防止用户恶意访问;
  • 服务模块横向扩展;
  • 服务调用的负载均衡与服务降级;
  • gateway模块横向扩展,降低单个应用的压力;
  • Nginx水平扩展;
  • 接口压测;
  • ......

参考