zoukankan      html  css  js  c++  java
  • [梁山好汉说IT] 梁山好汉和秒杀系统

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

    0x00 摘要

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

    0x01 IT背景知识

    文章摘录

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

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

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

    “热场”

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

    风控过滤

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

    限流削峰

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

    数据库

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

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

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

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

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

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

    1. 热场

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

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

    2. 系统隔离

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

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

    3. 系统搭建

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

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

    4. 风控过滤

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

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

    5. 削峰

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

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

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

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

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

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

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

    0x03 参考

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

  • 相关阅读:
    java.util.date java.sql.date java.sql.timestamp
    javadoc生成文档时,编码 GBK 的不可映射字符
    java关于ServletConfig FilterConfig什么用
    在项目中用run as java aplication调试类
    replace和replaceAll
    在easyui中的datagrid中使用行内编辑时textarea的换行保存到mysql数据库为\n
    [转] 设计模式另类版
    [转] 不错的俄罗斯方块程序代码(VC++版)
    [转] 30道模拟经典题(JDK1.4)(附解答)
    [转] C#排序算法
  • 原文地址:https://www.cnblogs.com/rossiXYZ/p/11914614.html
Copyright © 2011-2022 走看看