• Stars
    star
    517
  • Rank 85,558 (Top 2 %)
  • Language
    Java
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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

介绍

本项目为另一个项目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 [email protected]: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水平扩展;
  • 接口压测;
  • ......

参考

More Repositories

1

seckill

Spring Boot+MySQL+Redis+RabbitMQ的高性能高并发商品秒杀系统设计与优化
Java
189
star
2

GA-BP

基于遗传算法的BP网络设计,应用背景为交通流量的预测
MATLAB
154
star
3

GLCM-SVM

提取图像的灰度共生矩阵(GLCM),根据GLCM求解图像的概率特征,利用特征训练SVM分类器,对目标分类
MATLAB
113
star
4

AD9361_TX_MSK

A project demonstrate how to config ad9361 to TX mode and how to transmit MSK
Verilog
48
star
5

Verilog-FIR

FIR implemention with Verilog
Verilog
42
star
6

Frequency-Hopping

A plain simulation model for Frequency Hopping
MATLAB
34
star
7

NRF24L01-C51

基于无线模块NRF24L01的双机通信系统,MCU为C51
C
19
star
8

AD9361_TX_GMSK

A project demonstrate how to config ad9361 to TX mode and how to transmit GMSK
VHDL
14
star
9

AD9361_TX_1MHz_Baseband_800Hz_IF

A project demonstrate how to config ad9361 to TX mode
VHDL
11
star
10

SPI

Exchange data using spi, the code simulate the master's behavior of send data to slave.
Verilog
10
star
11

Gobang

五子棋游戏:支持人-人对战模式、 人-机对战模式、联机对战模式和其他辅助功能
Java
6
star
12

MATLAB-FIR

FIR analysis using Matlab, including fixed-point and float-point domain , and deal with physical FIR output data.
MATLAB
6
star
13

design-pattern

23种设计模式及各种模式的示例和文档说明
Java
4
star
14

Spider

Spider game
Java
1
star
15

XIM

☎️使用Netty打造的即时通信助手(X-IM)
Java
1
star
16

LeetCode-Solution

LeetCode题解,但不仅仅是LeetCode,还包括其他通用算法
Java
1
star