项目介绍
FShop是一款基于Spring Boot + Mybatis + Dubbo + Zookeeper + RabbitMQ + Redis + Nginx等技术的分布式秒杀系统。FShop主要定位于高并发抢购业务系统快速建设, 提供下单、扣减库存、流量削峰、动静分离、热点隔离等核心问题解决方案。
架构原则
设计秒杀系统时应该注意的5个架构原则:
- 数据要尽量少
- 请求数要尽量少
- 路径要尽量短
- 依赖要尽量少
- 不要有单点
秒杀业务流程
秒杀系统核心在于层层过滤,逐渐递减瞬时访问压力,减少最终对数据库的冲击。
- 预扣库存:秒杀服务基于Redis缓存进行库存预扣,预扣成功才会发送下单事件消息至MQ。预扣库存目的在于将大量无效请求流量拦截在上游、避免超卖;
- 扣减库存:订单服务订阅下单事件消息,此时进行扣减库存,扣减成功则生成订单。
- 超时处理:通过超时处理任务发现已抢到商品,但未付款的订单,并在规定付款时间后,处理这些订单,将恢复订单商品对应的库存量。
技术架构
绘制工具ProcessOn,架构设计图地址: https://www.processon.com/view/5f3b67c21e085306e16238f9?fromnew=1.
工程结构
fshop
├── basis-service 公共基础服务
│ ├── alipayservice-api 支付宝支付服务API
│ ├── alipayservice-server 支付宝支付服务
│ ├── messageservice-api 三方消息推送服务API
│ ├── messageservice-server 三方消息推送服务
│ ├── wechatservice-api 微信支付服务API
│ └── wechatservice-server 微信支付服务
├── business-service 基础业务服务
│ ├── orderservice-api 订单服务API
│ ├── orderservice-server 订单服务
│ ├── productservice-api 商品服务API
│ ├── productservice-server 商品服务
│ ├── userservice-api 用户服务API
│ └── userservice-server 用户服务
├── convergent-service 聚合业务服务
│ └── seckillservice-server 秒杀服务
└── open-component 通用组件
├── component-codegen 代码生成器组件
├── component-core 核心服务组件
├── component-mysql MySQL组件
├── component-rabbitmq RabbitMQ组件
├── component-redis Redis组件
├── component-swagger Swagger组件
└── component-utils 公共工具包
技术选型
技术 | 描述 | 官网 |
---|---|---|
Spring Boot | 基础开发框架 | https://spring.io/projects/spring-boot |
MyBatis | ORM框架 | http://www.mybatis.org/mybatis-3/ |
Zookeeper | 分布式协调服务 | http://zookeeper.apache.org/ |
Dubbo | 分布式服务框架 | http://dubbo.io/ |
RabbitMQ | 消息中间件 | http://www.rabbitmq.com/ |
Redis | 缓存 | https://redis.io/ |
MySQL | 关系型数据库 | https://www.mysql.com/ |