秒杀系统技术流程梳理
在前面的文章中,梳理了秒杀系统的需求和业务流程,心中已经大概知道要实现哪些功能,对用户端和运营端要实现的功能有了大体上的了解,并对系统的并发要求有了大致的目标。作为技术人员,还需要从技术角度思考下秒杀系统的请求链路、技术交互和分层过滤逻辑。
一、前言
产品经理从场景和业务角度提出对应的需求后,作为研发人员,不仅需要理解场景和业务需求,还需要将这些需求转化成技术实现方案。从技术角度出发,来梳理技术需要实现的逻辑,这样才能从整体链路上理解秒杀系统的实现。
二、本章诉求
在正式设计和研发秒杀系统之前,除了理解业务需求和业务流程外,对于技术人员来说,还有一项非常重要的事情要做,那就是从技术角度好好梳理下秒杀系统的请求链路、技术交互和分层过滤逻辑,以便后续更好的设计和研发秒杀系统。
三、请求链路
从技术的角度来讲,用户通过客户端肯定是通过域名来访问秒杀系统,使用域名的话就需要使用到 DNS 服务器做域名解析,将域名解析成 IP 地址来访问指定的服务器。进入服务器之后,首先会通过 Nginx 进入系统的系统网关服务,再到我们部署的 Web 服务,由 Web 层再到基础服务层,由基础服务层再到数据层,返回数据时,再按照相反的顺序层层返回,整体如图 5-1 所示。

由图 5-1 可以看出,在用户访问秒杀系统时,请求流量首先会通过 DNS 将域名解析成 IP 地址,通过 IP 地址访问到服务器。进入 Nginx,由 Nginx 进行一系列的负载均衡和限流等功能,到达系统的业务网关,通过业务网关进行路由、限流、服务降级以及风控等,进入到 Web 服务,Web 服务会对外提供交互接口,解析接收的请求数据,以及聚合查询的数据等。随后进入到基础服务,基础服务的功能比较单一和灵活,基本都是一些简单的业务处理。最后会进入数据服务层,数据服务主要就是存储、操作和查询数据,可以包含 Redis、MySQL 和其他数据服务。
四、技术交互
了解了请求的链路后,还要从技术角度了解下,用户在秒杀系统中抢购商品时,与系统发生了怎样的交互,整体上可以总结成如图 5-2 所示的交互流程图。

由图 5-2 可以看出,用户参与系统秒杀时,主要的交互逻辑如下所示。
(1)用户打开商品详情页,系统会校验活动是否已经开始,如果没有开始则显示剩余时间的倒计时,如果活动已经开始,则会校验当前用户是否有资格参与抢购。
(2)活动未开始时,显示剩余时间倒计时,系统会校验倒计时是否结束,如果没有结束,则继续显示倒计时,否则,校验当前用户是否有资格参与抢购。
(3)如果当前用户没有资格参与抢购,直接返回不能抢购的提示。否则,用户可以正常抢购。
(4)抢购时如果触发了限流和风控等,可以快速失败或者排队处理。否则,进入商品结算页进行结算。
(5)校验商品或者用户资质是否通过,如果商品已经下架,或者商品库存不足,或者用户资质不通过,就直接提示不能下单的相关信息,否则允许用户提交订单,预先锁定下单的商品数量,并从商品库存中预先减去下单的商品数量。
(6)用户提交订单后,如果在有效期内未完成支付,则需要回滚锁定的库存。否则,订单完成,整个订单流程完毕。
五、分层过滤
对于秒杀系统这种瞬时高并发大流量的系统来说,可以将一些校验操作前置化,采用分层过滤的原则来控制流量最终流入系统的大小。并且使用分层过滤的原则和设计可以对流量做精细化筛选 ,尽量保证流入到下游系统的流量,都是优质的系统流量。分层过滤的漏洞模型可以设计成如图 5-3 所示。

由图 5-3 可以看出,从 DNS 到数据层的流量是逐级递减的,可以在每一层上做一些流程的优化措施。
(1)DNS 层:可以做一些网络相关的攻击防范措施,可以在 DNS 层做一些措施来拦截攻击请求。
(2)Nginx 层:Nginx 不仅可以做反向代理和负载均衡服务器,也可以将 Nginx 当成大并发流量的 Web 服务器,一般项目中,也可以将静态页面或者一些静态资源放在 Nginx 中,进行部署。另外,Lua+Nginx 可以灵活的实现一些业务校验和流量控制等。
(3)系统网关层:除了 DNS 层和 Nginx 层,系统网关层也可以实现流量的拦截,对请求进行路由、限流、降级和风控等操作,进一步优化进入下游系统的流量。
(4)Web 服务层:主要做业务的聚合功能,提供秒杀系统的接口,为前端提供数据,也会负责一些流量的筛选、过滤和控制,保证下游基础服务的安全。
(5)基础服务层:主要提供单元化的基础服务能力,经过前面对流量的层层筛选、把关和控制,进入基础服务的流量已经是非常可控的了,到这里的流量已经小很多了,所以,在一定程度上,基础服务能够稳定的提供对外提供服务,并且在基础服务层实现的逻辑,对于并发的要求限制比上层业务也小很多了。
(6)数据层:为了确保数据层的安全,在技术实现上,除了使用 Redis 这种分布式缓存外,对极度热点数据搭配使用本地缓存。
六、总结
本章,主要从技术的角度出发,对秒杀系统的流程进行了梳理。主要从请求链路、技术交互和分层过滤三个方面详细讨论了秒杀系统的技术流程。