一、前言
在前面的文章中,详细阐述了建设秒杀系统的目标与存在的挑战,并且简单罗列了如何应对这些挑战的方式。本章,就详细阐述对秒杀系统存在挑战的应对之道,最终构建出兼具高并发、高性能和高可用的秒杀系统。心中不仅了解建设秒杀系统存在的挑战,更清楚的知道这些挑战的应对之道,正所谓:知己知彼,百战不殆,方案了然于胸,自然有应对之法。
二、本章诉求
一般一套成熟并且稳定、经得起实际大促场景考验的秒杀系统,都是经过不断迭代、优化和演化而来的。对于设计和研发秒杀系统的技术人员来说,心中一定要清晰的知晓建设秒杀系统存在的挑战,以及针对这些挑战的应对之法。
三、应对之道
对于秒杀系统,站在技术人员的角度,相信大家多多少少对秒杀系统有所了解了。既然建设秒杀系统存在着种种的困难和挑战,那我们就需要从整体上分析这些挑战的应对之法,而不是在真正开发秒杀系统时,再去临时想方案,查漏补缺,切忌头痛医头、脚痛医脚。
从总体上说,我们应对秒杀系统挑战时,心中要有一杆秤,在设计秒杀系统时,一定要做到分离、削峰限流、快速响应、准确一致、稳定可靠、全链路压测。
接下来,就针对每种应对之道进行详细的阐述。
四、分离之道
分离之道中,重点在于一个“分”字,主要包括:前后端资源分离、接口分离,数据分离、业务分离、系统分离、流量分离。
4.1 资源分离
资源分离,主要指的是前后端的资源分离。目前,除了一些非常老旧的系统之外,一般在开发互联网项目过程中,都会采用前后端分离的架构模式,这也是比较普遍的做法。在秒杀系统中,将前端资源分离出来,部署时可以直接推送到CDN服务器,CDN服务器全国各地都有,用户在访问系统时,可以从就近的CDN服务器上拉取对应的资源,能够极大的增强系统的性能。
4.2 接口分离
接口分离包含两个方面:一个是秒杀接口与其他接口分离,一个是高频访问接口与低频访问接口分离。
对于秒杀系统的接口来说,在设计上一定要与其他的接口进行分离,不要让秒杀系统的接口与其他业务的接口互相关联引用,避免秒杀系统的瞬时高并发流量对其他接口造成影响。
就秒杀系统而言,并不是每个接口的访问频次都一样,一本情况下,商品详情页、结算页和秒杀下单接口的访问频次要远远大于支付接口的访问频次。在设计上一定要将这些接口进行区分隔离,对高频访问的接口进行单独的性能优化。
4.3 数据分离
数据分离也会包含两个方面:一个是秒杀数据与其他数据分离,一个是动态数据与静态数据分离。
一般情况下,秒杀数据瞬时的增长率会远远大于其他数据,在数据上进行分离,可以对秒杀数据的存储设施进行单独的针对性优化,不能让秒杀数据对其他数据产生影响,在数据层面对秒杀系统进行专有部署。
就秒杀系统而言,本身也会存在着动态数据和静态数据。动态数据在秒杀期间会容易发生变更,比如秒杀系统的品类、商品的库存和上下架的状态等,都是的动态数据,这些动态数据对时间比较敏感。而像秒杀结果等与用户本身相关的一些数据,可以称为静态数据,因为这些数据在整个秒杀活动期间,基本不会发生变化。
在设