[梁山好汉说IT] 梁山好汉和秒杀系统

0x00 摘要

今天看了一篇好文章,里面一些思路颇值得借鉴。先摘录总结精华。然后看看梁山好汉如何处理秒杀系统(系统隔离/系统搭建/风控过滤/削峰/信号广播......)。

0x01 IT背景知识

文章摘录

1. 总体思路 --- 系统隔离

因为秒杀活动是有计划的,并且在短时间内会爆发大量的请求。为了不影响现有的业务系统的正常运行,我们需要把它和现有的系统做隔离。即使秒杀活动出现问题也不会影响现有的系统。隔离的设计思路可以从三个维度来思考:业务隔离/技术隔离/数据库隔离。

2. 值得借鉴的特色思路方法

“热场”

在秒杀活动开始之前,可以设计一个“热场”。“热场”的形式多种多样,例如:分享活动领优惠券,领秒杀名额等等。“热场”的形式不重要,重要的是通过它获取一些准备信息。例如:有可能参与的用户数,他们的地域分布,他们感兴趣的商品。为后面的技术架构提供数据支持。

风控过滤

为了避免恶意程序参与秒杀,在客户端会设计一些问答或者滑块的功能,减少此类机器人对服务器的压力。 服务器也会过滤一些疑似机器人或者恶意请求。例如:从固定 IP 过来的,频率过高的请求。

限流削峰

瞬时的海量请求好比请求的“高峰”,我们架构系统的目的就是“削峰”。 需要使用服务集群和水平扩展,让“高峰”请求分流到不同的服务器进行处理。同时,还会利用缓存和队列技术减轻应用处理的压力,通过异步请求的方式做到最终一致性。由于是多线程操作,而且商品的额度有限,为了解决超卖的问题,需要考虑进程锁的问题。

数据库

秒杀活动持续时间短,瞬时数据量大。为了不影响现有数据库的正常业务,可以建立新的库或者表来处理。在秒杀结束以后,需要把这部分数据同步到主业务系统中,或者查询表中。 我们在秒杀之前,需要通过业务的手段,例如:热场活动,问卷调查,历史数据分析。通过他们去估算这次秒杀可能需要存储的数据量。

0x02 梁山好汉如何处理秒杀系统(呼延灼三千连环甲马)

我看到秒杀这个概念,第一时间就想到了"呼延灼三千连环甲马"。这古今两个系统的特点非常相似。

  • 秒杀特点:秒杀时大量用户会在同一时间,抢购同一商品,网站瞬时流量激增。

  • 三千连环马特点:“每一队三十匹马,一齐跑发,不容你不向前走。那连环马军,漫山遍野,横冲直撞将来”。

梁山的秒杀系统实现得非常好,很多手法暗合我们如今的处理机制。

1. 热场

梁山也有“热场”。秒杀系统的“热场”是我们事先主动设计执行的。但梁山就是遭遇战变成了“热场”。通过“热场”活动,梁山发现确实挡不住这个连环马的冲击,也对连环马这个秒杀活动的特点有了深入的了解。

"前面五队军马望见,便乱跑了,策立不定;后面大队人马,拦当不住,各自逃生。就水寨里整点人马,折其大半,却喜众头领都全;虽然折了些马匹,都救得性命。" 。

2. 系统隔离

梁山专门打造了秒杀系统来对付连环马,这个是专门秒杀系统,不是梁山常规战斗序列。

"每十个会使钩镰枪的,间着十个挠钩手,但见马到,一搅钩翻,便把挠钩搭将入去捉了"。

3. 系统搭建

梁山专门从硅谷招聘了世界顶尖技术高手徐宁携带技术入股。

"当下徐宁选军已罢,便下聚义厅来,拿起一把钩镰枪,自使一回。众人见了喝采" "众军汉见了徐宁使钩镰枪,都喜欢。就当日为始,将选拣精锐壮健之人,晓夜习学。又教步军藏林伏草,钩蹄拽腿,下面三路暗法。不到半月之间,教成山寨五七百人"

4. 风控过滤

梁山为了防止连环马在秒杀活动未开始时候恶意侵入,进行了风控过滤,打造了防御系统。

"山寨中只教水军头领牢守各处滩头,水底钉了暗桩。呼延灼虽是在山西山北两路出哨,决不能够到山寨边"

5. 削峰

梁山也有削峰操作,分别是"分流削峰"/"限流削峰"

"今将步军下山,分作十队诱敌"

这就是"分流削峰,服务集群和水平扩展,让“高峰”请求分流到不同的服务器进行处理"

"但见军马冲掩将来,都望芦苇荆棘林中乱走。平川窄路,也如此埋伏。"

这就是"限流削峰",而且连环马面对"芦苇/荆棘林/窄路",只能在这种地形前面排队依次通过,这不就相当于用队列进行削峰嘛。

6. 居然还有信号广播,协调整体系统

"说犹未了,只听得北边一声炮响。呼延灼骂道:“这炮必是凌振从贼,教他施放" "正欲分兵之际,只见西边又是四队人马起来,呼延灼心慌;又听的正北上连珠炮响,一带直接到土坡上"

0x03 参考

这一次,彻底弄懂“秒杀系统” http://www.sohu.com/a/341289196_728045

[梁山好汉说IT] 梁山好汉和秒杀系统的更多相关文章

  1. [梁山好汉说IT] 梁山好汉和抢劫银行

    [梁山好汉说IT] 梁山好汉和抢劫银行 0x00 摘要 今天看了一篇文章<史上最有学问的银行劫匪,教你如何把握人生重大机会>.先摘录精华如下,然后看看梁山好汉在类似情况下如何处理 (东京汴 ...

  2. 【Todo】秒杀系统材料

    秒杀系统:Link <一个经验证可落地的秒杀系统实践思路> 主要依赖于Redis进行处理. http://geek.csdn.net/news/detail/59847   淘宝大秒系统设 ...

  3. PHP秒杀系统-高并发高性能的极致挑战

    慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...

  4. 用Redis轻松实现秒杀系统

    秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应 ...

  5. Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE

    初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目.本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文 ...

  6. PHP秒杀系统全方位设计(一)

    秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...

  7. PHP秒杀系统全方位设计(二)

    商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...

  8. Java高并发秒杀系统【观后总结】

    项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...

  9. SSM实现秒杀系统案例

    ---------------------------------------------------------------------------------------------[版权申明:本 ...

随机推荐

  1. ssh scp nc

    ssh远程连接 ssh root@192.168.111.11 scp数据传输,(secure copy) 1.下载.拉取 scp root@192.168.111.11:/root/database ...

  2. iOS如何才能在招聘中表现得靠谱?

    http://www.cocoachina.com/programmer/20150707/12414.html 近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受. ...

  3. Vue.js 第4章 组件与路由

    组件 什么是组件:组件就是一些标签结构的封装,同时为这些结构添加需要的业务逻辑,设置你想要的样式 一个组件中一般可以设置:结构,功能和样式 为什么要使用组件: 使用方便 复用 组件的创建和使用 组件的 ...

  4. hdu 4128 Running relay (线性规划转半平面交)

    Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...

  5. oracle函数 SUBSTRB(c1,n1[,n2])

    [功能]取子字符串 [说明]多字节符(汉字.全角符等),按2个字符计算 [参数]在字符表达式c1里,从n1开始取n2个字符;若不指定n2,则从第y个字符直到结束的字串. [返回]字符型,如果从多字符右 ...

  6. Python深入:Distutils安装包

    一:简介 尽管Python标准库已经支持很多的功能,但是有时还是会需要以第三方模块的形式添加新的功能到Python中. 在最简单的场景中,是你要安装的模块,已经有了针对你的平台的安装版本,因此只需要像 ...

  7. oracle函数 round(x[,y])

    [功能]返回四舍五入后的值 [参数]x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则四舍五入为y位小数,如果y小于0则四舍五入到小数点向左第y位. [返回]数字 [示例] se ...

  8. Wood Processing牛客第十场 斜率优化DP

    卧槽我感觉写的是对的,但是就是样例都过不了...留坑 #include<iostream> #include<stdio.h> #include<string.h> ...

  9. 整理了一下 ThinkPHP 历史 (2019-07-01)

    整理了一下 ThinkPHP 历史 ThinkPHP 一款国内最流行的 PHP 开源框架. 版本 发布日期 最后更新日期 总天数 ThinkPHP(FCS) 0.6 2006-01-15 2006-0 ...

  10. JavaScript 数组去重和对象相等判断

    前几天电话面试问到了数组去重和两个对象相等判断,当时回答的不是特别好,都过去好几天了,总结下. 1.数组去重 当时的问题是这样的有个简单的数组[1,1,2,3],去重后的结果是[1,2,3],怎么实现 ...