方圆的秒杀系统优化方案实战,(一)想说的话

本文介绍了作者基于Java实现的秒杀系统优化过程,包括缓存、限流和异步削峰的策略。项目采用DDD架构,利用Redis、Sentinel、Kafka等组件,逐步从基础功能扩展到应对大规模并发的优化。同时,作者分享了项目开发的心得和参考书籍。
摘要由CSDN通过智能技术生成

1. 希望能有用

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

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

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

2. 分支介绍

目前该项目做到的优化包括缓存、限流和异步削峰,点击进入该项目Github

  • 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
  • 《代码整洁之道》
  • 《京东秒杀架构升级优化实践》
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆想当图灵

嘿嘿,小赏就行,不赏俺也不争你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值