如何设计一个秒杀系统

.Der_Rabe      2022-02-16     197

关键词:

什么是秒杀

秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。

文章转载:乐字节

秒杀系统场景特点

秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。

秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。

秒杀业务流程比较简单,一般就是下订单减库存。

秒杀架构设计理念

限流: 鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。

削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。

异步处理:秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量,其实异步处理就是削峰的一种实现方式。

内存缓存:秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大地提升。

可拓展:当然如果我们想支持更多用户,更大的并发,最好就将系统设计成弹性可拓展的,如果流量来了,拓展机器就好了。像淘宝、京东等双十一活动时会增加大量机器应对交易高峰。

架构方案 一般秒杀系统架构 如何设计一个秒杀系统_项目实战 设计思路

将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。

充分利用缓存:利用缓存可极大提高系统读写速度。

消息队列:消息队列可以削峰,将拦截大量并发请求,这也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取请求消息进行业务处理。

前端方案

浏览器端(js)

页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。

禁止重复提交:用户提交之后按钮置灰,禁止重复提交

用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流

后端方案 服务端控制器层(网关层)

限制uid(UserID)访问频率:我们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。

服务层

上面只拦截了一部分访问请求,当秒杀的用户量很大时,即使每个用户只有一个请求,到服务层的请求数量还是很大。比如我们有100W用户同时抢100台手机,服务层并发请求压力至少为100W。

    1.采用消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一下,数据库层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。

     2.利用缓存应对读请求:对类似于12306等购票业务,是典型的读多写少业务,大部分请求是查询请求,所以可以利用缓存分担数据库压力。

     3.利用缓存应对写请求:缓存也是可以应对写请求的,比如我们就可以把数据库中的库存数据转移到Redis缓存中,所有减库存操作都在Redis中进行,然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。

数据库层

数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担“能力范围内”的访问请求。所以,上面通过在服务层引入队列和缓存,让最底层的数据库高枕无忧。

案例:利用消息中间件和缓存实现简单的秒杀系统

Redis是一个分布式缓存系统,支持多种数据结构,我们可以利用Redis轻松实现一个强大的秒杀系统。

我们可以采用Redis 最简单的key-value数据结构,用一个原子类型的变量值(AtomicInteger)作为key,把用户id作为value,库存数量便是原子变量的最大值。对于每个用户的秒杀,我们使用 RPUSH key value插入秒杀请求, 当插入的秒杀请求数达到上限时,停止所有后续插入。

然后我们可以在台启动多个工作线程,使用LPOP key 读取秒杀成功者的用户id,然后再操作数据库做最终的下订单减库存操作。

当然,上面Redis也可以替换成消息中间件如ActiveMQ、RabbitMQ等,也可以将缓存和消息中间件 组合起来,缓存系统负责接收记录用户请求,消息中间件负责将缓存中的请求同步到数据库。

文章转载:乐字节

参考视频教程:

https://www.bilibili.com/video/BV1i64y1q7oi?from=search&seid=1142458046457280754

需要源码资料可以+裙自取:

https://jq.qq.com/?_wv=1027&k=MhLoDvcz备注:秒杀 

如何设计一个秒杀系统

什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来... 查看详情

从全局角度,如何设计一个秒杀系统?

大家好,我是树哥。秒杀系统的设计是高级职位面试中非常高频的一道题目,它可以较好地考察候选人的知识体系情况。对于我们来说,学习秒杀系统的设计,能够让我们学以致用,设计系统的时候考虑得更加全面。今天就让树... 查看详情

如何设计一个秒杀系统(代码片段)

什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大... 查看详情

2017-5-26/描述一个高性能高可靠的网站架构——如何设计一个秒杀系统

一、秒杀的应用场景电商网站的抢购活动、12306网站的抢票、抢红包。 二、秒杀的特点1、秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。2、数据库的并发读写冲突以及资源的锁请求冲突非常严重。3、... 查看详情

如何设计一个高可用高并发秒杀系统

作者:vincentsu,腾讯PCG后台开发工程师如今的互联网已经在海量服务领域有了很成熟的理论,因此自己也很庆幸,能够从0到1完整践行海量服务。微视春节项目中的集卡瓜分活动,是一个典型的秒杀场景,自己参与其中,分享一... 查看详情

阿里最后一面,高并发下如何设计一个秒杀系统?

近年来,随着“双十一”购物节和抖音等直播平台带货的热潮,大批促销活动涌现,「秒杀」这个词也越来越频繁地出现在我们的生活里。除了那些头部的电商公司,某宝、某东,还有各种街、某说、某会、... 查看详情

如何设计一个秒杀系统----学习总结

第一章学习总结——概览https://time.geekbang.org/column/article/401531.秒杀主要解决问题——并发读和并发写。并发读的核心优化理念是尽量减少用户到服务端来读取数据,或者让他们读更少的数据。并发写的处理原则是在数据库层面独... 查看详情

谈如何设计一个秒杀系统(重点)(代码片段)

概述并发读写秒杀要解决的主要问题是:并发读与并发写。并发读的优化理念是尽量减少用户到服务端来读数据,或者让他们读更少的数据;并发写的处理原则一样,要求我们在数据库层面独立出一个库,做特殊的处理。其次,... 查看详情

如何设计一个秒杀系统

...高可用的分布式系统。高并发环境下的系统稳定性:如何保证系统在面对巨大的流量情况下,不被打崩?两个问题并发读核心优化理念:减少用户到服务端来读数据。或者让他们读取更少的数据。并发写核心优化... 查看详情

如何设计一个秒杀系统

...高可用的分布式系统。高并发环境下的系统稳定性:如何保证系统在面对巨大的流量情况下,不被打崩?两个问题并发读核心优化理念:减少用户到服务端来读数据。或者让他们读取更少的数据。并发写核心优化... 查看详情

秒杀系统设计方案

秒杀系统设计方案一、秒杀系统架构设计关键点1.两个问题,一个备选方案(1)秒杀其实主要解决两个问题一个是并发读,并发读的核心理念是尽量减少用户到服务端来“读”数据,或者读更少的数据。一个是并发写,并发写... 查看详情

如何设计一个秒杀系统?

...–>高性能:涉及大量秒杀的并发读和并发写,如何支持高并发?1.设计数据动静分离2.热点的发现与隔离3.请求的削峰与分层过滤4.服务端的极致优化一致性:核心:如何设计秒杀减库存方案高可用:planB... 查看详情

一个秒杀系统的设计思考,超详细!(代码片段)

前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是12306抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性... 查看详情

十万级低成本超详细的秒杀高并发设计,快收藏起来(代码片段)

...秒杀,小米手机的秒杀,那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢?对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统?本文我们就来探讨一下这个问题。秒杀应该考... 查看详情

秒杀的设计思路

电商:如何设计一个秒杀系统  什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这... 查看详情

秒杀系统设计(代码片段)

高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(... 查看详情

京东高并发秒杀解决方案

...间流量峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高峰流量变成一段时间内的平稳流量是设计秒杀系统很重要的思路,实现削峰的常用的方法是利用缓存和消息中间件等技术。超卖设计:库存数量有限,如何... 查看详情

网站抢购秒杀系统设计简析

秒杀是电子商务网站常见的一种营销手段。原则不要整个系统宕机。即使系统故障,也不要将错误数据展示出来。尽量保持公平公正。实现效果秒杀开始前,抢购按钮为活动未开始。秒杀开始时,抢购按钮可以点击下单。秒杀结... 查看详情