当前位置:首页 > 技术文章 > 秒杀架构优化的核心原则

秒杀架构优化的核心原则

go1232周前 (12-05)技术文章92

尽量将请求拦截在系统的上游,而不要压到库存数据。知其然,知其所以然。思路比结论更重要。

秒杀系统为什么难做?

根本原因,是库存访问集中在一个地方,所有请求会在集中的时间读写库存数据,导致系统锁死。

比如说:华为抢手机,可能库存只有5K部,但瞬时进入的流量可能是十万百万。

又比如说,12306抢票,余票很少,瞬时流量会更高。

怎么优化?
最核心的优化思路是:尽量将请求拦截在系统的上游,而不要压到库存数据。

怎么拦截?
图片
常见的分层架构如上,从上到下逐层拦截。

首先,端上拦截。
产品层面:用户点击“查询”或者“抢购”后,按钮置灰,禁止用户重复提交请求。

技术层面:前APP端,或者H5端,限制同一个用户在10秒之内只能向服务端提交一次请求,重复的请求前端直接返回。

如此限流,可拦截不少流量。

有人要说了,这个可行吗?端上拦截,只能拦住小白用户,大部分流量都是程序员抓包写脚本,for循环,直接调用后端的HTTP接口访问,那怎么办?

第二步,web-server站点层拦截。
秒杀类的电商场景,用户需要登录,登录就有token,有uid的唯一标识。

在站点层,同一个uid,做限速,限制同一个用户在10秒之内只能向service提交一次请求,重复的请求直接返回。

如此限流,用脚本写for循环抢购的请求,99%又被拦住了。

又有人要说了,同一个uid确实被拦住了,那万一有一个黑客,控制了10W个账号,10W个uid同时抢手机,该怎么办呢?

第三步,service服务层拦截。
系统上线,一般都做过压测,对service的服务能力是清楚的,假如每秒只能服务1W的吞吐,中间可以加一个MQ,采用拉模式来做削峰填谷,service根据自己的服务能力去处理请求,对自己实施保护。

又有人要说了,万一没做过压测,不知道service的服务能力怎么办?

业务层面,我们知道手机的库存量,假如库存只有5K部手机,放过去10W个请求,没有意义。还是加一个MQ,还是采用拉模式来做削峰填谷,service根据库存情况去处理请求,对自己实施保护。

如此限流,只有非常少的读写请求,会压到后端数据层。

最后,数据层怎么优化?
如果做了前端,站点层,服务层的优化,数据库上的压力就很小了:
1. 没有数据量大的问题,不需要做水平切分;
2. 没有吞吐量大的问题,系统根据自身压力,根据业务库存来保护自己;

数据库层闲庭信步,最多加加缓存抗一下查询压力,单机也能扛得住。

如果有多SKU,可以根据压力情况与SKU情况加机器拆分,总之系统具备线性扩容能力。

总结
还是那句话:尽量将请求拦截在系统的上游,而不要压到库存数据。

知其然,知其所以然。
思路比结论更重要。


声明:本站所有内容均为自动采集而来,如有侵权,请联系删除
标签: 拦截库存

相关文章

Redis连环五十二问!看谁顶得住?

Redis连环五十二问!看谁顶得住?

基本 1.说说什么是Redis? Redis是一种基于键...

用 PHP 处理 10 亿行数据!

用 PHP 处理 10 亿行数据!

今天,我将带大家一起走进“挑衅十亿行“数据的世界。当然,这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库。https://github.com/gunnarmorling/1brc我之所以...

2024 年的最佳 PHP 框架

2024 年的最佳 PHP 框架

在本文中,我们将预测在 2024 年持续风行的最佳 PHP 框架。我们首先将看看PHP框架是什么,什么时候该斟酌应用PHP框架,以及应用PHP框架的重要长处都是什么。我还会介绍最合适初学者的 PHP 框架以及用于 Web 开发的最佳框架。什么是PHP框架?     &...

一文读懂多家厂商的大模型训练、推理、部署策略

一文读懂多家厂商的大模型训练、推理、部署策略

4 月 20 日,第 102 期源创会在武汉胜利举行。本期邀请来自武汉人工智能研讨院、华为、MindSpore、京东云、Gitee AI 的人工智能专家,环绕【大模型竞技与性能优化】主题发表演讲。接下来就一起看看本期运动的出色瞬间吧!大合影 get ✅披萨和礼物不能少!接下来进入主题演讲回想环节。可...

请立刻停止编写 Dockerfiles 并使用 docker init

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗?我承认,我就是其中之一。我总是想知道我是否遵守了 Dockerfile、 docker-compose 文件的最佳编写实践,我畏惧在不知不觉中引入了安全破绽。但是现在,我不必再担忧这个问题了,感激...

服务器为什么大多用 Linux 而不是 Windows ?

服务器为什么大多用 Linux 而不是 Windows ?

前几天在知乎看到一个话题很有意思,且很有讨论意义。“服务器为什么大多用 Linux”,除了开源、好用等原因,回答也代表了各种不同人需求和看法,摘取一些分享给大家,也欢迎留言讨论。来自知乎好友“熊大你又骗俺”的回答首先在20年前,windows server+iis+asp+access 的方案,还是...