博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
秒杀系统
阅读量:4070 次
发布时间:2019-05-25

本文共 1016 字,大约阅读时间需要 3 分钟。

秒杀系统:
1. 秒杀技术挑战
   1)对现有网站业务造成冲击,解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。
   2)高并发下的应用会对应用服务器和数据库服务器造成负载压力,解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化
   3)突然增加的网络及服务器带宽,解决方案:和运营商重新购买或者租借服务器,将秒杀商品页面缓存在CDN
   4)如何控制秒杀商品页面购买按钮的点亮购,解决方案:使用JavaScript脚本控制,加上随机版本号,每次浏览器刷新都访问JavaScript文件服务器
   5)如何只允许第一个提交的订单被发送到订单子系统,解决方案:虑通过cookie的方式来应对,符合一致性原则
   6)库存会带来“超卖”的问题:售出数量多于库存数量,解决方案:采用乐观锁
   7)使用验证码应对秒杀器
2. 秒杀架构原则
    1)尽量将请求拦截在系统上游传统
    2)读多写少的常用多使用缓存
3.秒杀架构设计
   1)前端层设计:
      (1)页面静态化,页面上各类静态资源分开存放,然后放到cdn节点上分散压力;
      (2)倒计时出于性能原因一般由js调用客户端本地时间,客户端与服务器时钟不一致可以采用客户端定时和服务器同步时间;    
      (3)浏览器层请求拦截,用户点击“查询”或“购票”后,按钮置灰,禁止用户重复提交请求,限制用户 在x秒之内只能提交一次请求;
   2)站点层设计:
      (1)同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面
      (2)同一个item的查询限制访问频度
   3)服务层设计:
      (1)对于写请求,做请求队列,每次只透过有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”;
      (2)对于读请求,cache来抗,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的;
               用户请求分发模块:cdn分发,dns轮询,使用Nginx或Apache将用户的请求分发到不同的机器上
       并发队列的选择:Java的并发包提供了三个常用的并发队列实现,分别是:ConcurrentLinkedQueue 、 LinkedBlockingQueue 和 ArrayBlockingQueue;由于我们的系统入队需求要远大于出队需求,一般不会出现队空的情况,所以我们可以选择ConcurrentLinkedQueue来作为我们的请求队列实现
 

转载地址:http://yihji.baihongyu.com/

你可能感兴趣的文章
星环后台研发实习面经
查看>>
大数相乘不能用自带大数类型
查看>>
字节跳动后端开发一面
查看>>
CentOS Tensorflow 基础环境配置
查看>>
centOS7安装FTP
查看>>
FTP的命令
查看>>
CentOS操作系统下安装yum的方法
查看>>
ping 报name or service not known
查看>>
FTP 常见问题
查看>>
zookeeper单机集群安装
查看>>
do_generic_file_read()函数
查看>>
Python学习笔记之数据类型
查看>>
Python学习笔记之特点
查看>>
Python学习笔记之安装
查看>>
shell 快捷键
查看>>
VIM滚屏操作
查看>>
EMC 2014存储布局及十大新技术要点
查看>>
linux内核内存管理(zone_dma zone_normal zone_highmem)
查看>>
将file文件内容转成字符串
查看>>
循环队列---数据结构和算法
查看>>