# 《Seckill秒杀系统》第124章:秒杀系统流程极致优化

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:对秒杀系统的流程进行优化,重点掌握流量网关直接透传读取分布式缓存的架构设计和落地方案,并能够结合自身实际项目思考,将流量网关直接透传读取分布式缓存的架构设计和落地方案灵活应用到自身实际项目中。

大家好,我是冰河~~

在专栏前面的文章中,我们已经对秒杀系统的源码进行了相应的优化,并且通过对秒杀系统的全链路压测,我们对秒杀系统的整体性能瓶颈有了初步的了解。随后,对服务器物理机进行了优化,对单机服务的性能进行了优化。其实,就秒杀系统的流程来讲,还是有可优化的地方。

# 一、前言

阅读过《深入理解高并发编程:核心原理与案例实战 (opens new window)》一书的小伙伴,肯定都知道,这本书里最后一章深度剖析了秒杀系统的架构设计,并且有一小节叫做缓存穿透技术,这里的缓存穿透技术只的并不是出现了缓存问题,而是流量网关将清求透传到分布式缓存查询数据,如果缓存中存在要获取的数据,则直接返回,不再请求后端服务。同样的,在秒杀下单时,流量网关将请求透传到分布式缓存获取数据,在流量网关层校验各种下单条件,如果未通过下单校验,则直接返回对应的提示结果,不再请求后端服务。这样会极大的提升秒杀系统的性能。

# 二、本章诉求

要知道,对于像OpenResty实现的流量网关和Redis实现的分布式缓存来说,其性能远远高于后端服务,如果请求到达OpenResty流量网关,由OpenResty流量网关读取Redis分布式缓存数据后,不再请求后端服务,会极大的提升秒杀系统的性能。

所以,本章从秒杀系统的流程进行优化,将到达OpenResty流量网关的请求透传到分布式缓存读取数据。如果是查询数据,分布式缓存中存在对应的数据,则不再请求后端服务。如果是秒杀下单,则从分布式缓存中获取到数据后,进行校验,校验不通过直接返回结果,不再请求后端服务。

重点掌握流量网关直接透传读取分布式缓存的架构设计和落地方案,并能够结合自身实际项目思考,将流量网关直接透传读取分布式缓存的架构设计和落地方案灵活应用到自身实际项目中。

# 三、秒杀系统流程

OpenResty流量网关没有直接读取Redis分布式缓存之前,秒杀系统的执行流程如图124-1所示。


可以看到,OpenResty流量网关没有直接读取Redis分布式缓存之前,秒杀系统的总体执行流程是:客户端(H5、小程序、APP)—>DNS—>OpenResty流量网关—>系统网关—>Web服务—>基础服务—>数据存储。

OpenResty透传读取Redis数据时,秒杀系统的执行流程如图124-2所示。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码