聊聊秒杀系统的设计(一)

时间:2022-09-26 13:47:02

秒杀系统的业务逻辑和复杂程度都被大众熟知,其实主要解决的问题有两个——高并发和一致性。其中高并发又分为读和写,要减少用户从服务端读取数据,控制数据的传输大小;写则需要独立处理数据库。一致性是指保证库存数据的准确,超卖和超买都是不能出现的。至于高可用会在最后介绍,通过高可用可以保证流量超出预期或其他外情况发生时,秒杀活动的顺利完成。

 综上所述,秒杀系统是一个要满足高并发、强一致、高可用的分布式系统。

二、秒杀架构的设计要素

针对秒杀系统的架构设计需要考虑以下几个要素:

1.减少读的次数

这里提到的读不止是数据,还有静态资源的读取。

为什么要减少读的次数呢,因为网络传输是需要时间的,无论是请求、处理、响应都需要服务器处理。如果存在必须读取的情况,要减小数据请求和响应的大小,数据在数据库和各种服务之间调用的过程中存在序列化和反序列化的过程,这是很消耗资源的。

静态资源的读取比较常见的优化手段就是合并CSS和JS文件,要保证请求的静态文件在统一域名中,并减少访问次数。每次HTTP请求都存在网络传输,减少耗时是很有必要的。

2.减少服务调用节点

这里提到的节点是指用户请求后,直至响应完成所经历的服务节点。不同节点间,尤其是不同机架,不同机房节点间的服务调用不仅仅耗时,还会降低秒杀的可靠性。

3.减少不必要的秒杀非核心业务

秒杀业务可以根据重要程度赋予权重,减少低权重服务的调用,以防止高权重系统被拖垮。秒杀活动进行时,有很多不是秒杀核心业务的数据可以通过降低优先级进行优化,例如支付、通知等功能。

以上的原则并不是绝对的,只是在设计中努力优化的方向。 

三、秒杀架构的搭建思路

对于并发量访问较大的秒杀架构,为了提高架构性能和稳定性,需要注意几点:秒杀要独立于其他系统,无论在研发和部署环节都要独立,这样有助于整体平台的稳定性,也有利于秒杀系统的优化。秒杀的数据,尤其是核心数据单独放到缓存系统中,提高并发,对于非核心数据可以放到本地,减少请求服务的次数。秒杀的页面要实现动静分离,把页面刷新频率降低。

另外,从安全性角度考虑,秒杀的验证必不可少,限流保护更是重中之重。

总结

以上提到的都是秒杀架构的概述,核心是要构建一个高并发、强一致、高可用的分布式系统,在不同的业务和基础设施下进行权衡,设计最适合自己的秒杀系统。

后续文章中,会对上面提到的技术环节细化,也会对不同技术技术场景对比,帮你设计出适合的秒杀系统。