澳门美高梅

您的位置: 首页 > 解决方案

【高并发解决方案】5、如何设计一个秒杀系统

开始下载
  • 软件大小:[!--filesize--]
  • 软件类别: [!--softtype--] | 解决方案
  • 软件语言: [!--language--]
  • 运行环境: [!--softfj--]
  • 软件评级:
  • 更新时间: 2019-05-28 13:46:31
  • 软件授权: [!--softsq--]
  • 插件情况: 无插件,请放心使用
  • 相关链接: 无相关信息
  • 安全检测: 瑞星:安全 江民:安全 卡巴:安全

src="/img/ad415.png"

软件介绍

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

  削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。

  异步处理:秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量,其实异步处理就是削峰的一种实现方式。

  内存缓存:秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大地提升。

  可拓展:当然如果我们想支持更多用户,更大的并发,最好就将系统设计成弹性可拓展的,如果流量来了,拓展机器就好了。像淘宝、京东等双十一活动时会增加大量机器应对交易高峰。

  将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。

  消息队列:消息队列可以削峰,将拦截大量并发请求,这也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取请求消息进行业务处理。

  页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。

  限制uid(UserID)访问频率:我们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。

  上面只拦截了一部分访问请求,当秒杀的用户量很大时,即使每个用户只有一个请求,到服务层的请求数量还是很大。比如我们有100W用户同时抢100台手机,服务层并发请求压力至少为100W。

  采用消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一下,数据库层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。

  利用缓存应对读请求:对类似于12306等购票业务,是典型的读多写少业务,大部分请求是查询请求,所以可以利用缓存分担数据库压力。

  数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担“能力范围内”的访问请求。所以,上面通过在服务层引入队列和缓存,让最底层的数据库高枕无忧。

  Redis是一个分布式缓存系统,支持多种数据结构,我们可以利用Redis轻松实现一个强大的秒杀系统。

  我们可以采用Redis 最简单的key-value数据结构,用一个原子类型的变量值(AtomicInteger)作为key,把用户id作为value,库存数量便是原子变量的最大值。对于每个用户的秒杀,我们使用RPUSH key value插入秒杀请求, 当插入的秒杀请求数达到上限时,停止所有后续插入。

  然后我们可以在台启动多个工作线程,使用LPOP key读取秒杀成功者的用户id,然后再操作数据库做最终的下订单减库存操作。

  当然,上面Redis也可以替换成消息中间件如ActiveMQ、RabbitMQ等,也可以将缓存和消息中间件 组合起来,缓存系统负责接收记录用户请求,消息中间件负责将缓存中的请求同步到数据库。

预留广告位置

下载地址

相关说明

  • 推荐使用 网际快车 下载本站软件,用 WinRAR最新版 进行解压.
  • 目前很多国产软件以及汉化等安装程序捆绑流氓插件,大家在安装的时候务必留意每一个安装步骤.都客网不会接任何捆绑插件的广告.
  • 如果您发现此软件无法下载,请稍后再次尝试.
  • 【高并发解决方案】5、如何设计一个秒杀系统 已通过本站测试,测试结果请参看说明及截图.
  • 【高并发解决方案】5、如何设计一个秒杀系统 为网上收集,若无意中侵犯了您的版权,请与我们联系.
  • 本站为非营利性站点,所有资源均是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担.
字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z