zoukankan      html  css  js  c++  java
  • 《秒杀系统架构分析与实战》---阅读

    引用文章里的导语:伴随着电商的蓬勃发展,抢购和秒杀活动作为营销的重要手段,也对电商系统提出了越来越高的要求。当双十一已经从一个简单的噱头演变为可以让全民熬夜万众秒杀的头条事件时,电商系统所面对的高并发压力绝不亚于春节的微信红包系统。

    每年的双十一大家肯定不陌生,那么每年双十一的服务器大家关心过到底啥样吗,竟然可以支持这么大的数量,支持这么大数量的用户并发数,当然,有时候拼的也是网速。再来说一个类似的,每年春运的抢票系统。这些系统的架构到底如何设计?

    其实最关心的还是这么多并发数的前提下,如何处理负载问题?文章给出了解答:

    用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。

    解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务

    那如何确定下单情况?

    直接下单

    秒杀的游戏规则是到了秒杀才能开始对商品下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的URL,如果得到这个URL,不用等到秒杀开始就可以下单了。

    解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到

    那问题又来了,如何只允许第一个提交的订单被发送到订单子系统

    由于最终能够成功秒杀到商品的用户只有一个,因此需要在用户提交订单时,检查是否已经有订单提交。如果已经有订单提交成功,则需要更新 JavaScript文件,更新秒杀开始标志为否,购买按钮变灰。事实上,由于最终能够成功提交订单的用户只有一个,为了减轻下单页面服务器的负载压力, 可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束页面。

    解决方案:假设下单服务器集群有10台服务器,每台服务器只接受最多10个下单请求。在还没有人提交订单成功之前,如果一台服务器已经有十单了,而有的一单都没处理,可能出现的用户体验不佳的场景是用户第一次点击购买按钮进入已结束页面,再刷新一下页面,有可能被一单都没有处理的服务器处理,进入了填写订单的页面,可以考虑通过cookie的方式来应对,符合一致性原则。当然可以采用最少连接的负载均衡算法,出现上述情况的概率大大降低。

    上面说的只是对流程的几个问题,最重要的还是秒杀一般是定时上架:该功能实现方式很多。不过目前比较好的方式是:提前设定好商品的上架时间,用户可以在前台看到该商品,但是无法点击“立即购买”的按钮。但是需要考虑的是,有人可以绕过前端的限制,直接通过URL的方式发起购买,这就需要在前台商品页面,以及bug页面到后端的数据库,都要进行时钟同步。越在后端控制,安全性越高。

    定时秒杀的话,就要避免卖家在秒杀前对商品做编辑带来的不可预期的影响。这种特殊的变更需要多方面评估。一般禁止编辑,如需变更,可以走数据订正多的流程。

    所以说一个好的架构决定了一个系统的成败!

  • 相关阅读:
    EP-N8530S USB WIFI 驱动移植
    MySQL(十三)事务处理和字符集
    MySQL(十二)游标和触发器
    《Google软件测试之道》测试工程师
    jmeter(十二)关联之正则表达式提取器
    MySQL(十一)视图及存储过程
    jmeter(十一)JDBC Request之Query Type
    MySQL(十)操纵表及全文本搜索
    MySQL(九)插入、更新和删除
    MySQL(八)子查询和分组查询
  • 原文地址:https://www.cnblogs.com/mm20/p/11032939.html
Copyright © 2011-2022 走看看