[梁山好汉说IT] 梁山好汉和秒杀系统
[梁山好汉说IT] 梁山好汉和秒杀系统
0x00 摘要
今天看了一篇好文章,里面一些思路颇值得借鉴。先摘录总结精华。然后看看梁山好汉如何处理秒杀系统(系统隔离/系统搭建/风控过滤/削峰/信号广播......)。
0x01 IT背景知识
文章摘录
1. 总体思路 --- 系统隔离
因为秒杀活动是有计划的,并且在短时间内会爆发大量的请求。为了不影响现有的业务系统的正常运行,我们需要把它和现有的系统做隔离。即使秒杀活动出现问题也不会影响现有的系统。隔离的设计思路可以从三个维度来思考:业务隔离/技术隔离/数据库隔离。
2. 值得借鉴的特色思路方法
“热场”
在秒杀活动开始之前,可以设计一个“热场”。“热场”的形式多种多样,例如:分享活动领优惠券,领秒杀名额等等。“热场”的形式不重要,重要的是通过它获取一些准备信息。例如:有可能参与的用户数,他们的地域分布,他们感兴趣的商品。为后面的技术架构提供数据支持。
风控过滤
为了避免恶意程序参与秒杀,在客户端会设计一些问答或者滑块的功能,减少此类机器人对服务器的压力。 服务器也会过滤一些疑似机器人或者恶意请求。例如:从固定 IP 过来的,频率过高的请求。
限流削峰
瞬时的海量请求好比请求的“高峰”,我们架构系统的目的就是“削峰”。 需要使用服务集群和水平扩展,让“高峰”请求分流到不同的服务器进行处理。同时,还会利用缓存和队列技术减轻应用处理的压力,通过异步请求的方式做到最终一致性。由于是多线程操作,而且商品的额度有限,为了解决超卖的问题,需要考虑进程锁的问题。
数据库
秒杀活动持续时间短,瞬时数据量大。为了不影响现有数据库的正常业务,可以建立新的库或者表来处理。在秒杀结束以后,需要把这部分数据同步到主业务系统中,或者查询表中。 我们在秒杀之前,需要通过业务的手段,例如:热场活动,问卷调查,历史数据分析。通过他们去估算这次秒杀可能需要存储的数据量。
0x02 梁山好汉如何处理秒杀系统(呼延灼三千连环甲马)
我看到秒杀这个概念,第一时间就想到了"呼延灼三千连环甲马"。这古今两个系统的特点非常相似。
秒杀特点:秒杀时大量用户会在同一时间,抢购同一商品,网站瞬时流量激增。
三千连环马特点:“每一队三十匹马,一齐跑发,不容你不向前走。那连环马军,漫山遍野,横冲直撞将来”。
梁山的秒杀系统实现得非常好,很多手法暗合我们如今的处理机制。
1. 热场
梁山也有“热场”。秒杀系统的“热场”是我们事先主动设计执行的。但梁山就是遭遇战变成了“热场”。通过“热场”活动,梁山发现确实挡不住这个连环马的冲击,也对连环马这个秒杀活动的特点有了深入的了解。
"前面五队军马望见,便乱跑了,策立不定;后面大队人马,拦当不住,各自逃生。就水寨里整点人马,折其大半,却喜众头领都全;虽然折了些马匹,都救得性命。" 。
2. 系统隔离
梁山专门打造了秒杀系统来对付连环马,这个是专门秒杀系统,不是梁山常规战斗序列。
"每十个会使钩镰枪的,间着十个挠钩手,但见马到,一搅钩翻,便把挠钩搭将入去捉了"。
3. 系统搭建
梁山专门从硅谷招聘了世界顶尖技术高手徐宁携带技术入股。
"当下徐宁选军已罢,便下聚义厅来,拿起一把钩镰枪,自使一回。众人见了喝采" "众军汉见了徐宁使钩镰枪,都喜欢。就当日为始,将选拣精锐壮健之人,晓夜习学。又教步军藏林伏草,钩蹄拽腿,下面三路暗法。不到半月之间,教成山寨五七百人"
4. 风控过滤
梁山为了防止连环马在秒杀活动未开始时候恶意侵入,进行了风控过滤,打造了防御系统。
"山寨中只教水军头领牢守各处滩头,水底钉了暗桩。呼延灼虽是在山西山北两路出哨,决不能够到山寨边"
5. 削峰
梁山也有削峰操作,分别是"分流削峰"/"限流削峰"
"今将步军下山,分作十队诱敌"
这就是"分流削峰,服务集群和水平扩展,让“高峰”请求分流到不同的服务器进行处理"
"但见军马冲掩将来,都望芦苇荆棘林中乱走。平川窄路,也如此埋伏。"
这就是"限流削峰",而且连环马面对"芦苇/荆棘林/窄路",只能在这种地形前面排队依次通过,这不就相当于用队列进行削峰嘛。
6. 居然还有信号广播,协调整体系统
"说犹未了,只听得北边一声炮响。呼延灼骂道:“这炮必是凌振从贼,教他施放" "正欲分兵之际,只见西边又是四队人马起来,呼延灼心慌;又听的正北上连珠炮响,一带直接到土坡上"
0x03 参考
这一次,彻底弄懂“秒杀系统” http://www.sohu.com/a/341289196_728045
[梁山好汉说IT] 梁山好汉和秒杀系统的更多相关文章
- [梁山好汉说IT] 梁山好汉和抢劫银行
[梁山好汉说IT] 梁山好汉和抢劫银行 0x00 摘要 今天看了一篇文章<史上最有学问的银行劫匪,教你如何把握人生重大机会>.先摘录精华如下,然后看看梁山好汉在类似情况下如何处理 (东京汴 ...
- 【Todo】秒杀系统材料
秒杀系统:Link <一个经验证可落地的秒杀系统实践思路> 主要依赖于Redis进行处理. http://geek.csdn.net/news/detail/59847 淘宝大秒系统设 ...
- PHP秒杀系统-高并发高性能的极致挑战
慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...
- 用Redis轻松实现秒杀系统
秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应 ...
- Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE
初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目.本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文 ...
- PHP秒杀系统全方位设计(一)
秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...
- PHP秒杀系统全方位设计(二)
商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...
- Java高并发秒杀系统【观后总结】
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...
- SSM实现秒杀系统案例
---------------------------------------------------------------------------------------------[版权申明:本 ...
随机推荐
- 动态设置iframe高度
<%//动态设置iframe高度 %><script language="javascript" type="text/javascript" ...
- 云上快速搭建Serverless AI实验室
Serverless Kubernetes和ACK虚拟节点都已基于ECI提供GPU容器实例功能,让用户在云上低成本快速搭建serverless AI实验室,用户无需维护服务器和GPU基础运行环境,极大 ...
- 2019-8-31-dotnet-使用-MessagePack-序列化对象
title author date CreateTime categories dotnet 使用 MessagePack 序列化对象 lindexi 2019-08-31 16:55:58 +080 ...
- 2018-9-4-Roslyn-通过-nuget-统一管理信息
title author date CreateTime categories Roslyn 通过 nuget 统一管理信息 lindexi 2018-09-04 08:55:19 +0800 201 ...
- [***]HZOJ 哪一天她能重回我身边
%%%神仙题. 居然是图论,我还一直以为是二分图或者啥数据结构. 直接说正解了,将数看作节点,牌看做边,从牌的正面的数想反面连边权为1的边,反面向正面连边权为0的边(注意用到成对存储的技巧,之后会非常 ...
- 全文检索 java Lucene
索引文件:[D:\luceneDemo\data\TXT小说\陛下是妻迷.txt] 大小:[1185.0 KB] 索引文件:[D:\luceneDemo\data\TXT小说\随身空间重生在七十年代. ...
- 整理了一下 ThinkPHP 历史 (2019-07-01)
整理了一下 ThinkPHP 历史 ThinkPHP 一款国内最流行的 PHP 开源框架. 版本 发布日期 最后更新日期 总天数 ThinkPHP(FCS) 0.6 2006-01-15 2006-0 ...
- 2019-7-29-NetBIOS-计算机名称命名限制
title author date CreateTime categories NetBIOS 计算机名称命名限制 lindexi 2019-07-29 09:59:17 +0800 2018-12- ...
- 如何在git中删除指定的文件和目录
部分场景中,我们会希望删除远程仓库(比如GitHub)的目录或文件. 具体操作 拉取远程的Repo到本地(如果已经在本地,可以略过) $ git clone xxxxxx 在本地仓库删除文件 $ gi ...
- PythonWeb框架之Django
Django 简介: Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型Model,模板Template和视图View.此框架设计模式借鉴了MVC框架的思 ...