Skip to content

方圆的秒杀方案优化实战项目,目前该项目做到的优化包括缓存、限流和异步削峰

License

Notifications You must be signed in to change notification settings

FangYuan33/flash-sale

Repository files navigation

1. 希望能有用

大家好,我是方圆。之前在部门业务中开发过类似秒杀的功能,但是因为QPS并不是很高,所以使用到的技术栈和指定的业务方案比较简单。

但是我对此并不满意,再加上之前校招的时候跟着视频写过一个秒杀系统,回头看它觉得它实在是太low了,借着这些引子,想把那些网上听过的不错解决方案实现。

为了方便大家参考和仿写,或者是从0到1的开发,我打算创建不同的分支来保存具体的改动,它也像是这个秒杀系统不断演进一样,能够面对更大规模的并发量。

2. 分支介绍

目前该项目做到的优化包括缓存、限流和异步削峰。

  • master:主分支将集成秒杀系统所有的功能,它是秒杀系统的完全体
  • base-framework:这个分支只是搭了一个架子,添加了一些通用的实体类,保留它的目的是方便大家从0到1的去实现这个秒杀项目,只不过需要大家根据自己的环境更改一下配置
  • base-function:这个分支保留的是这个系统的最基础的针对秒杀活动、秒杀商品、订单的CRUD功能,未进行任何针对高并发的优化,大家也可以从这个分支开始,但是这个项目采用的是DDD架构,推荐考虑也把这个分支的代码写一写,更好的理解DDD
  • increase_local_cache:这个分支是缓存设计的开始,对应本地缓存,是在base_function分支上进行开发的
  • increase_distributed_cache:在本地缓存的基础上引入分布式缓存,它是在increase_local_cache分支基础上进行开发的
  • increase_refresh_cache:该分支对应秒杀活动、商品在执行发布、上线和下线操作时对缓存的更新的代码
  • increase_stock_cache:对应商品库存在缓存中的初始化、扣减和增加相关的代码
  • increase_sentinel:在缓存的基础上,添加限流,并使用Nacos进行配置
  • increae_mq:借助MQ异步实现削峰

3. 项目介绍

3.1 DDD架构

各个层次的依赖关系如下

在这里插入图片描述

  1. flash-sale-app 应用层,主要放的是service实现
  2. flash-sale-controller controller层,处理API请求和业务异常的处理
  3. flash-sale-domain 领域层,在我们的系统中,它不依赖任何层级,是最干脆和整洁的一层
  4. flash-sale-infrastructure 基础设施层,为上面各层提供通用的技术能力,包括消息处理持久化机制缓存处理
  5. flash-fale-start 启动服务,Application和配置都在这一层

3.2 使用的组件

  • mybatis-plus:为了避免手写简单SQL,集成进来再方便不过
  • swagger3.0:懒得用postman,方便的页面API调用,访问http://localhost:8090/api/swagger-ui/即可使用,也能在项目启动的时候发现它
  • Redis:分布式缓存使用的Redis,也是必须会的中间件
  • Kafka:异步削峰借助Kafka实现
  • Sentinel:限流
  • Nacos:限流配置文件和yaml配置文件,实现配置文件中内容的及时更新以控制定时任务的执行

4. 结语

这篇文章起稿于2月24日,完稿于4月中旬,由于工作在身,开发全都是在休息时间。但是写到分库分表解决更大型秒杀场景的时候,觉得心有余而力不足,看了一些别人的秒杀解决方案之后,发现自己忽略掉了很多细节,还有很大的优化空间:缓存的去中心化、保证Redis的高可用性、布隆过滤器、Niginx负载均衡、分布式事务等等,我目前做的这些相比于高大上的解决方案就像是洒了洒水...

但是这个项目也有值得参考的地方,因为它是我一步步自己写出来的,保证每一步都能实现,另外它还有详细的注释和我开发过程中的体会。还有它体现的是我的代码习惯,受《代码整洁之道》影响,我有信心它会对大家有一些参考价值。以它现在的阶段,其实我觉得并不适合写在简历上,虽然比我当时校招时的秒杀项目要完善,但是当我发现有很多很多优秀解决方案的项目时,还是觉得这个项目更像是一个玩具...

如果未来再有机会,再写吧...

5. 巨人的肩膀

  • 《高并发秒杀的设计精要与实现》,它的代码可读性比较差,有些乱
  • 《图解 Kafka 之实战指南》
  • GitHub:如何设计一个秒杀系统
  • 《Java秒杀系统方案优化 高性能高并发实战》,别去看这个慕课网的课了,很low
  • 《代码整洁之道》
  • 《京东秒杀架构升级优化实践》

About

方圆的秒杀方案优化实战项目,目前该项目做到的优化包括缓存、限流和异步削峰

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages