Giter Site home page Giter Site logo

xie-dong / dis-seckill Goto Github PK

View Code? Open in Web Editor NEW

This project forked from parkt90/dis-seckill

0.0 1.0 0.0 23.23 MB

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

License: MIT License

Java 79.41% HTML 16.41% JavaScript 4.17%

dis-seckill's Introduction

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

介绍

本项目是在dis-seckill上改进,项目名含义为分布式秒杀系统。采用微服务**,意在提高秒杀系统的整体性能。

改进点:

秒杀系统应具备要求

  1. 高性能。秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。对应的方案比如动静分离方案、热点的发现和隔离、请求的削峰与分层过滤、服务端的极致优化。
  2. 一致性。秒杀中商品减库存的实现方式同样关键。有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分“拍下减库存"”付款减库存“以及预扣几种。系统需要在大并发更新的过程中要保证数据的准确性。
  3. 高可用。现实中难免出现一些我们考虑不到的情况,所以要保证系统的高可用性和正确性,我们还需要设计一个planB来兜底,以便应对一些意外情况。比如高并发情况下服务的熔断和降级。

快速启动

在运行秒杀系统之前,需要安装表格第一排软件,并开启相应软件。

准备:修改mysql数据库配置,连接、账户和密码。

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,则可以采用下面的方式快速启动;

git clone https://github.com/parkt90/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

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

项目架构图

项目架构图

项目入门

  • 模块介绍

    • dis-seckill-common:通用模块

    • dis-seckill-user:用户模块

    • dis-seckill-goods:商品模块

    • dis-seckill-order:订单模块

    • dis-seckill-gateway:网关模块

    • dis-seckill-cache:缓存模块

    • dis-seckill-mq:消息队列模块

      用户请求全部交由Gateway模块处理,Gateway模块使用RPC(远程过程调用)的方式调用其他模块提供的服务完成业务处理。

  • 秒杀流程图

秒杀流程图

  • 秒杀方案介绍

设计方案

  • 前端文件资源路径dis-seckill-gateway\src\main\resources\

TODO

Q&A

Q&A
前后端交互接口定义
前后端交互接口逻辑实现
Redis中存储的数据
使用分布式锁解决恶意用户重复注册问题
拦截器HandlerInterceptor的使用
Rabbitmq如何保证消息的可靠投递(近期更新)
redismysql如何实现双删一致性(近期更新)
限流的的原理和项目中使用(近期更新)

参考资料

dis-seckill's People

Contributors

dependabot[bot] avatar grootzz avatar parkt90 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.