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

ryanlamp ryanlamp     2023-02-05     417

关键词:

第一章学习总结——概览https://time.geekbang.org/column/article/40153
1.秒杀主要解决问题——并发读和并发写。并发读的核心优化理念是尽量减少用户到服务端来读取数据,或者让他们读更少的数据。并发写的处理原则是在数据库层面独立出一个库,做特殊的处理。另外针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。

2.从一个架构师的角度来看,要想打造并维护一个超大流量并发读写、高性能、高可用的系统,在整个用户请求路径上从浏览器到服务端我们要遵循几个原则,就是要保证用户请求的数据尽量少、请求数尽量少、路径尽量短、依赖尽量少,并且不要有单点。

3.秒杀的整体架构可以概括为“稳、准、快”(高可用、一致性、高性能)几个关键字。
所谓“稳”,就是整个系统架构要满足高可用,流量符合预期时肯定要稳定,就是超出预期时也同样不能掉链子,你要保证秒杀活动顺利完成,即秒杀商品顺利地卖出去,这个是最基本的前提。

“准”,就是秒杀 10 台 iPhone,那就只能成交 10 台,多一台少一台都不行。一旦库存不对,那平台就要承担损失,所以“准”就是要求保证数据的一致性。

“快”,“快”其实很好理解,它就是说系统的性能要足够高,否则你怎么支撑这么大的流量呢?不光是服务端要做极致的性能优化,而且在整个请求链路上都要做协同的优化,每个地方快一点,整个系统就完美了。

所以从技术角度上看“稳、准、快”,就对应了我们架构上的高可用、一致性和高性能的要求。

高性能:
秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。主要包含数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这 4 个方面。

一致性:
秒杀中商品减库存的实现方式同样关键。有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性。

高可用:
现实中总难免出现一些考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个 PlanB 来兜底,以便在最坏情况发生时仍然能够从容应对。
——————————————————————————————————————————————————————————————————————————————————
第二章学习总结——设计秒杀系统应该注意的五个(4要1不要)架构原则。https://time.geekbang.org/column/article/40726
1.数据量尽量少:请求数据和返回数据都要尽量少,以减少CPU使用。

2.请求数要尽量少:减少额外请求,如合并js、css等,首屏HTML内联所需的CSS、JS。

3.路径要尽量短:减少节点数,相互强依赖的应用合并部署。节点越少出错概率就越小,可用性就越高。所以缩短请求路径不仅可以增加可用性,同样可以有效提升性能(减少中间节点可以减少数据的序列化与反序列化),并减少延时(可以减少网络传输耗时)。

4.强依赖尽量少:给数据重要性分等级,尽量减少所要加载的数据。

5.不要有单点,要有备份,如设计分布式系统,关键点是把服务无状态话,避免将服务的状态和机器绑定,使服务可以在机器中随意移动。

架构是一种平衡的艺术,而最好的架构一旦脱离了它所适应的场景,一切都将是空谈。所以设计架构时上面几点只是方向,应该根据实际情况适当取舍。

补充:
答疑:
1 .本地cache用什么实现好呢?
本地cache一般就是用内存实现,如java用集合类型就行

  1. 通过什么方式往本地cache 写数据呢?
    用订阅的方式,在初始化时加载到内存
  2. 秒杀系统的及时性非常高,把库存写进cache ,怎么及时更新呢?
    有两种方法,一是定时更新取3秒,二是,主动更新,数据库字段更新后发消息更新缓存,这个需要用到一个组件阿里叫metaq就是就是数据库字段更新会产生一条消息。另外cache里库存不需要100%和数据库一致,最终强一致性即可
    4.各QPS级别架构可能瓶颈点?
    不同QPS量级下瓶颈也会不一样,10w级别可能瓶颈就在数据读取上,通过增加缓存一般就能解决,如果要到100w那么,可能服务端的网络都是瓶颈,所以要把大部分的静态数据放到cdn上甚至缓存在浏览器里。
    5.单点是什么?
    单点就是一个状态值存储在一台机器上,这台机器挂了,这个状态就丢了,导致整个服务不可用。最常用的就是本机存储数据,而这个数据没有备份的情况

架构示例:
1-10万QPS级别架构设计示例图:



















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

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

10-3系统设计思考题:如何设计一个秒杀系统

难点:如何应对高并发的用户请求1.什么是秒杀系统?你有没有使用过?2.如何根据我们提到的三个要素来设计秒杀系统?3.秒杀系统涉及到哪些后端组件(你可以参考网上资料思考如何设计) 查看详情

10-3系统设计思考题:如何设计一个秒杀系统

难点:如何应对高并发的用户请求1.什么是秒杀系统?你有没有使用过?2.如何根据我们提到的三个要素来设计秒杀系统?3.秒杀系统涉及到哪些后端组件(你可以参考网上资料思考如何设计) 查看详情

如何设计一个秒杀系统

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

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

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

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

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

实战高并发大流量秒杀系统

目录php的视频go视频数据库层:案例:秒杀系统的设计和分层介绍:第一个版本秒杀模块的划分秒杀接入层核心功能php的视频学习地址:https://ke.qq.com/course/1586364?tuin=30289dc0go视频学习地址:https://ke.qq.com/course/314678?taid=219870972325407... 查看详情

2018-2019-120165202《信息安全系统设计基础》第一周学习总结(代码片段)

...编写makefile,让代码编译。二、教材学习提问一个C文件是如何变成一个可执行程序的?整数运算在计算机中的溢出是怎 查看详情

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

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

实战高并发大流量秒杀系统

目录php的视频go视频数据库层:案例:秒杀系统的设计和分层介绍:第一个版本秒杀模块的划分秒杀接入层核心功能php的视频学习地址:https://ke.qq.com/course/1586364?tuin=30289dc0go视频学习地址:https://ke.qq.com/course/314678?taid=219870972325407... 查看详情

秒杀系统

...,取不出来则秒杀失败之后异步存入数据库一些错误过度设计想设计一个秒杀操作可以有不同实现的父类,发现没有必要,我能想到就这一个方案。秒杀工厂UML用Redis事务控制秒杀数量思路是这样,开始事务控制,先get数量,后d... 查看详情

秒杀系统架构分析与实战(代码片段)

...据库负载3、突然增加的网络及服务器带宽4、直接下单5.如何控制秒杀商品页面购买按钮的点亮6.如何只允许第一个提交的订单被发送到订单子系统7.如何进行下单前置检查8.秒杀一般是定时上架9.减库存的操作10.库存会带来“超卖... 查看详情

第208天学习打卡(系统秒杀设计sentinel高并发方法论)

秒杀系统设计恶意请求是在网关处拦截秒杀链接加密:加随机码Sentinel高并发方法论简介[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqI3FXEQ-1628088021432)(C:\\Users\\HP\\AppData\\Roaming\\Typora\\typora-user-i... 查看详情

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

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

如何设计一个秒杀系统

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

如何设计一个秒杀系统

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

秒杀系统——秒杀功能设计理念(代码片段)

文章目录电商系统下单功能概述订单量:从0到1000(架构1)订单量:从1000到100万锁机制悲观锁乐观锁分布式锁消息队列消息队列:架构2从电商系统到秒杀系统流量限制热门资源隔离最终:架构3总结1.秒杀... 查看详情

秒杀系统——秒杀功能设计理念(代码片段)

文章目录电商系统下单功能概述订单量:从0到1000(架构1)订单量:从1000到100万锁机制悲观锁乐观锁分布式锁消息队列消息队列:架构2从电商系统到秒杀系统流量限制热门资源隔离最终:架构3总结1.秒杀... 查看详情