流量削峰的由来

主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购;以及大家熟知的阿里双11秒杀,
短时间上亿的用户涌入,瞬间流量巨大(高并发),比如:200万人准备在凌晨12:00准备抢购一件商品,但是商品的数量缺是有限的100-500件左右。

这样真实能购买到该件商品的用户也只有几百人左右, 但是从业务上来说,秒杀活动是希望更多的人来参与,也就是抢购之前希望有越来越多的人来看购买商品。

但是,在抢购时间达到后,用户开始真正下单时,秒杀的服务器后端缺不希望同时有几百万人同时发起抢购请求。

我们都知道服务器的处理资源是有限的,所以出现峰值的时候,很容易导致服务器宕机,用户无法访问的情况出现。

这就好比出行的时候存在早高峰和晚高峰的问题,为了解决这个问题,出行就有了错峰限行的解决方案。

同理,在线上的秒杀等业务场景,也需要类似的解决方案,需要平安度过同时抢购带来的流量峰值的问题,这就是流量削峰的由来。

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求,以及层层过滤用户的访问需求,遵从“最后落地到数据库的请求数要尽量少”的原则。

1.消息队列解决削峰

要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直接调用转换成异步的间接推送,中间通过一个队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送出去。

消息队列中间件主要解决应用耦合,异步消息, 流量削锋等问题。常用消息队列系统:目前在生产环境,使用较多的消息队列有 ActiveMQ、RabbitMQ、 ZeroMQ、Kafka、MetaMQ、RocketMQ 等。

在这里,消息队列就像“水库”一样,拦蓄上游的洪水,削减进入下游河道的洪峰流量,从而达到减免洪水灾害的目的。

具体的消息队列MQ选型和应用场景可以参考(点击查看):高并发架构系列:分布式之消息队列的特点、选型、及应用场景详解


2.流量削峰漏斗:层层削峰

针对秒杀场景还有一种方法,就是对请求进行分层过滤,从而过滤掉一些无效的请求。

分层过滤其实就是采用“漏斗”式设计来处理请求的,如下图所示:

这样就像漏斗一样,尽量把数据量和请求量一层一层地过滤和减少了。

1)分层过滤的核心思想

  • 通过在不同的层次尽可能地过滤掉无效请求。
  • 通过CDN过滤掉大量的图片,静态资源的请求。
  • 再通过类似Redis这样的分布式缓存,过滤请求等就是典型的在上游拦截读请求。

2)分层过滤的基本原则

  • 对写数据进行基于时间的合理分片,过滤掉过期的失效请求。
  • 对写请求做限流保护,将超出系统承载能力的请求过滤掉。
  • 涉及到的读数据不做强一致性校验,减少因为一致性校验产生瓶颈的问题。
  • 对写数据进行强一致性校验,只保留最后有效的数据。

最终,让“漏斗”最末端(数据库)的才是有效请求。例如:当用户真实达到订单和支付的流程,这个是需要数据强一致性的。

流量削峰总结

1.对于秒杀这样的高并发场景业务,最基本的原则就是将请求拦截在系统上游,降低下游压力。如果不在前端拦截很可能造成数据库(mysql、oracle等)读写锁冲突,甚至导致死锁,最终还有可能出现雪崩等场景。

2.划分好动静资源,静态资源使用CDN进行服务分发。

3.充分利用缓存(redis等):增加QPS,从而加大整个集群的吞吐量。

4.高峰值流量是压垮系统很重要的原因,所以需要Kafka等消息队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送出去。

你可能也喜欢:

  1. 消息中间件系列(八):Kafka、RocketMQ、RabbitMQ等的优劣势比较
  2. 消息中间件系列(四):消息队列MQ的特点、选型、及应用场景详解
  3. 消息中间件系列(三):主流的消息队列中间件有哪些?
  4. 消息中间件系列(五):MQ消息队列的12点核心原理总结
  5. 消息中间件系列(七):如何从0到1设计一个消息队列中间件
  6. 消息中间件系列(一):消息中间件介绍、典型使用场景、以及使用原则

消息中间件系列(六):什么是流量削峰?如何解决秒杀业务的削峰场景相关推荐

  1. 高并发架构系列:什么是流量削峰?如何解决秒杀业务的削峰场景

    流量削峰的由来 主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购:以及大家熟知的阿里双11秒杀, 短时间上亿的用户涌入,瞬间流量巨大(高并发),比如: ...

  2. 消息中间件系列(三):主流的消息队列中间件有哪些?

    消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一. 当今市面上有很多主流的消息中间件,如老牌的Activ ...

  3. 消息中间件系列(七):如何从0到1设计一个消息队列中间件

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...

  4. 消息中间件系列(四):消息队列MQ的特点、选型、及应用场景详解

    前面集中谈了分布式缓存Redis系列: 高并发架构系列:分布式锁的由来.特点.及Redis分布式锁的实现详解 高并发架构系列:Redis并发竞争key的解决方案详解 高并发架构系列:Redis缓存和M ...

  5. 消息中间件系列(九):详解RocketMQ的架构设计、关键特性、与应用场景

    内容大纲: RocketMQ的简介与演进 RocketMQ的架构设计 RocketMQ的关键特性 RocketMQ的应用场景 RocketMQ的简介 RocketMQ一个纯java.分布式.队列模型的 ...

  6. 消息中间件系列(八):Kafka、RocketMQ、RabbitMQ等的优劣势比较

    在高并发业务场景下,典型的阿里双11秒杀等业务,消息队列中间件在流量削峰.解耦上有不可替代的作用. 之前介绍了MQ消息队列的12点核心原理总结,以及如何从0到1设计一个MQ消息队列,以及RPC远程调用 ...

  7. kafka创建topic_ELK-基础系列(六)-ELK加入消息队列-Kafka部署

    Kafka集群部署指南 一.前言 1.Kafka简介 Kafka是一个开源的分布式消息引擎/消息中间件,同时Kafka也是一个流处理平台.Kakfa支持以发布/订阅的方式在应用间传递消息,同时并基于消 ...

  8. 消息中间件系列 - RabbitMQ

    前言 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习视频:https://www.bilibili.com/video/BV1cb4y1o7zz?spm_id_from=333.337.searc ...

  9. 消息中间件系列(五):MQ消息队列的12点核心原理总结

    消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...

最新文章

  1. 《Arduino开发实战指南:机器人卷》一3.3 直流电机驱动电路原理
  2. 查询oracle中所有用户信息
  3. 远程值守_北京静态交通公司首个远程值守停车场投入使用
  4. axure类型app项目rp文件_Python编程快速上手实践项目--选择性拷贝指定类型文件到目的目录...
  5. MsWord 操作总结
  6. 过滤DataTable中的指定字段重复的行
  7. javascript单例模式【转载】
  8. “配置系统未能初始化” 异常解决
  9. PS技巧分享,不容错过
  10. Android P 正式到来
  11. 问题-ListView 使用的时候,已经遇到的问题;
  12. 怎么运用苹果手机拍出好的照片,这些技巧少不了
  13. win10笔记本外接显示器后,微信界面字体模糊问题的解决方案
  14. Netfilter 内核数据包过滤框架
  15. k8s(六):配置管理与集群安全机制
  16. python学习02:利润计算
  17. 搭建p2p视频vod点播站点
  18. 微软认证考试心得:微软认证考试的几种形式
  19. 如何备份网站到本地电脑(适用虚拟主机)
  20. 教你如何自动回复微信消息并定时发朋友圈?

热门文章

  1. java获取插入数据库表中的自增列值的一个简单方法
  2. C语言 二维数组做函数参数的几种情况
  3. MySQL一张innodb表列个数的限制和engine的选择
  4. UDT源代码下载链接
  5. 嘉立创又搞大事情了,与你我相关!
  6. python modbus控制plc_python Modbus基础
  7. java生成flash_web-flash发布了代码生成插件
  8. mysql整数索引没用到_MYSQL 索引无效和索引有效的详细介绍
  9. 二十四、PHP框架Laravel学习笔记——模型的数据集合
  10. LeetCode 698. 划分为k个相等的子集(回溯)