关闭

秒杀系统的一点思考

18450人阅读 评论(7) 收藏 举报
分类:

秒杀系统难点往往是短时间内对数据进行读写,然后造成读写上的一些冲突,甚至锁非常严重.当然知道难点在哪里,我们自然就有办法解决,人类智慧无限,办法总比困难多. 简单说来也就两点,限流和提升关键点的性能.

 

(1)限流,将请求尽量拦截在系统上游,流量层层过滤,当请求到达稀缺资源比如数据库的时候,流量变小,数据库的压力已经可以忽略.传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。

(2)提升关键点的性能,充分利用缓存便是一个不错的提升性能的方式.因为数据库的性能提升往往比较困难,而人们换个思考问题的方式, 既然数据库性能提升不容易,那换一个性能高的数据存储的地方总可以,缓存便是这种思路下产生的,缓存数据存放在内存中,处理的速度远大于数据库,这样便换角度的提升了数据访问的性能

 

常见的站点架构基本是这样的,这个图主要展示为了能够架构秒杀系统所需要改变的点.


浏览器端,最上层,会执行到一些JS代码,这个地方往往进行第一次流量过滤,主要是过滤重复提交的数据

代理,再一次对流量进行过滤

网站,这一层会访问后端数据,拼html页面返回给浏览器,这里再次对流量进行过滤

服务层,向上游屏蔽底层数据细节,提供数据访问

数据层,最终的库存是存在这里的,缓存也是使用在这里,传统的是使用数据库

 

各层次优化细节

客户端怎么优化(浏览器层,APP层)

  • 设计:用户点击一次提交以后不再允许能够提交,比如将按钮置灰.
  • 技术:可以使用js限制用户点击,提交的次数,例如一分钟之内只能点击一次.

这样在最上层,通过设计与技术手段就能够阻拦80%以上的流量,虽然如何但剩余的流量依然很大.所以还需要继续阻击.

 

代理层面的请求拦截

这里我们为了分担后端服务器压力,往往使用反向代理服务器,例如nginx, 这个地方可以配置nginx限流措施,比如单位时间只能有5万的访问量,这个时候再一次的阻拦了一部分流量.

 

站点层面的请求拦截

在站点层面,对用户id(当然需要登录)进行请求计数和去重。一个用户id,单位时间内(比如5)只准透过1个请求,这样又能拦住一大部分的请求。只透过一个请求,其余的请求怎么办?缓存,页面缓存,同一个用户id,限制访问频度,做页面缓存,单位时间内到达站点层的请求,均返回同一页面。同一个item的查询。 

 

服务层来拦截

对于写请求,做请求队列,每次只透有限的写请求去数据层 

对于读请求,用缓存,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的。如此限流,只有非常少的写请求,和非常少的读缓存mis的请求会透到数据层去,又有99.9%的请求被拦住了。

 

数据库层

当数据经过层层阻击到达数据层的时候,流量已经过滤掉了绝大部分,服务层又做了写请求队列与数据缓存,每次透到数据库层的请求都是可控的。db基本就没什么压力了,闲庭信步,单机也能扛得住. 

 

总结

秒杀系统是对单个请求的无限放大,解决方式总结一句话,限流与增加性能.

14
0
查看评论

如何设计一个秒杀系统

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

秒杀系统总结

挑战与解决策略 压力挑战: 短暂的高流量,对现有网站业务造成冲击 秒杀是一个网站营销的一个附加活动,时间短,并发量大。 如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。 高并发,数据库高负载 ...
  • he90227
  • he90227
  • 2017-09-11 13:56
  • 493

淘宝秒杀系统内幕

导读:最初的秒杀系统的原型是淘宝详情上的定时上架功能,由于有些卖家为了吸引眼球,把价格压得很低。但这给的详情系统带来了很大压力,为了将这种突发流量隔离,才设计了秒杀系统,文章主要介绍大秒系统以及这种典型读数据的热点问题的解决思路和实践经验。 一些数据 大家还记得2013年的小米秒杀吗?三款小...
  • xuefengmiao
  • xuefengmiao
  • 2016-03-13 12:45
  • 6803

面试中的一个问题---秒杀架构

淘宝秒杀架构 题目来自一家游戏公司笔试题   由于自己重为做过电商方面性能要求如此高的项目,拿到这个题的时候是一头雾水,只有参考一些项目随便写了一点。   下面是我回答的(实在很烂,抛砖引玉): 一、模块分解 :     1)秒杀商品管...
  • xuanhan112
  • xuanhan112
  • 2014-03-08 21:50
  • 2603

秒杀系统的设计猜想

秒杀系统的设计猜想 首先声明,本人没有设计过秒杀系统。 只是今天在面试时,
  • hanIyan
  • hanIyan
  • 2014-11-19 20:40
  • 3079

秒杀系统架构分析与实战

1 秒杀业务分析 正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高; 2 秒杀技术挑战 假设某网站秒杀活动只推出一...
  • u012515285
  • u012515285
  • 2016-05-13 14:21
  • 8069

秒杀系统实现

  • 2017-10-20 08:31
  • 84KB
  • 下载

从秒杀架构引起的一些思考

从秒杀架构引起的一些思考本周的命题分享题目是秒杀架构。秒杀是大规模分布式系统最激烈的一种方式,对系统的承压能力是一个极大的考验。先看看国内最著名的两个例子(数据来源于网络): 2015-12-17 当天pv 25,900,000,000,卖出900多万张票 2015-11-11 高峰qps600,0...
  • fang_sh_lianjia
  • fang_sh_lianjia
  • 2016-08-18 16:47
  • 1029

秒杀系统 咋做

一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。 例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。 又例如12306抢票,亦与秒杀类似,瞬时流量更甚。 二、常见架构   流量到了亿级别,常见站点架构如上: 1)浏览器...
  • hu948162999
  • hu948162999
  • 2015-09-06 17:12
  • 753

秒杀系统架构

一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但...
  • WuLex
  • WuLex
  • 2017-04-18 22:45
  • 1025
    个人资料
    • 访问:777521次
    • 积分:14899
    • 等级:
    • 排名:第932名
    • 原创:231篇
    • 转载:14篇
    • 译文:6篇
    • 评论:2512条
    欢迎联系我
    Email: bemavery@163.com
    文章分类
    最新评论