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

流量削峰的由来

主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购;以及大家熟知的阿里双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等消息队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送出去。


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 基于深度序列模型的知识图谱补全

本文转载自公众号:DI数据智能。 Learning to Complete Knowledge Graphs with Deep Sequential Models作者:郭凌冰、张清恒、胡伟、孙泽群、瞿裕忠单位:南京大学供稿:胡伟引用L. Guo, Q. Zhang, W. Hu, Z. Sun, & Y. Qu. …

拨开算力的迷雾:聊聊不同 GPU 计算能力的上限

文 | 卜居知乎编 | 兔子酱通过深入了解自己手头 GPU 的计算能力上限,能够在买新卡时做出更理性判断。本文深入GPU架构,重点介绍了其中的ampere架构。另外,作者还对比了不同GPU之间的峰值计算能力,增加读者对硬件资源的了解。前言2…

LeetCode 20. 有效的括号(栈)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括…

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

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

论文浅尝 | 一种用于多关系问答的可解释推理网络

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答。来源:COLING 2018链接:https://www.aclweb.org/anthology/C18-1171问题背景与动机多关系问答(multi-relationquestion answering&#…

蚁群优化算法 ACO

群体智能(swarm intelligence) 定义: 由单个复杂个体完成的任务可由大量简单个体组成的群体合作完成,而后者往往更具有健壮性、灵活性等优势。在没有集中控制,不提供全局模型的前提下,为寻找复杂问题解决…

量化投资交易 vn.py

前言:当初接触到vnpy,一开始当然是按照该项目在GitHub上的指南,开始安装,配置,阅读Wiki,但是作为一个python新手,并不能马上利用vnpy来写策略回测甚至实盘。所以我决定还是从源码看起&#xff0…

掌握神经网络,我应该学习哪些至关重要的知识点?

人工智能作为计算机科学领域的一个分支,在互联网和大数据的时代浪潮中显现出其巨大的潜力和蓬勃的活力,类似电子医生、无人驾驶等新名词纷纷涌现。人工智能凭借着它无与伦比的发展优势,推动了各大产业和技术的革命与创新,使得生产…

LeetCode 32. 最长有效括号(栈DP)

文章目录1. 题目信息2. 栈 解题3. 动态规划 解题1. 题目信息 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1:输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2:输入: ")()())" 输…

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

前面集中谈了分布式缓存Redis系列: 高并发架构系列:分布式锁的由来、特点、及Redis分布式锁的实现详解 高并发架构系列:Redis并发竞争key的解决方案详解 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 Redis的高可用详解…

基金定投

https://www.zhihu.com/question/19909886 相信我,这篇攻略能让你彻底搞懂基金,每年大概率能赚10%左右的收益!基金定投核心要搞懂两个问题:买什么基金,什么时候买。今天我给大家一篇文章讲透这两个问题!我说…

卖萌屋学术站发布!通往高效刷论文之路

文 | 夕小瑶编 | 兔子酱学术站诞生好久没有冒泡啦,大家还记得雁栖湖畔的夕小瑶吗!(划掉(*/ω\*)趁着国庆假期,跟卖萌屋小伙伴们终于把拖延已久的《Arxiv神器》翻新了,零零星星做了几个月,最近终…

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

消息队列已经逐渐成为分布式应用场景、内部通信、以及秒杀等高并发业务场景的核心手段,它具有低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。 无论是 RabbitMQ、RocketMQ、ActiveMQ、Kafka还是其它等,都有的一些基本原理、术语、机制等&…

征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长

全国知识图谱与语义计算大会(CCKS: China Conference on Knowledge Graph and Semantic Computing)由中国中文信息学会语言与知识计算专业委员会组织和承办。全国知识图谱与语义计算大会是两个全国性会议的合并:中文知识图谱研讨会the Chines…

LeetCode 641. 设计循环双端队列

文章目录1. 题目信息2. 解题1. 题目信息 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast()&#xff…

代码逆流成河,深入C++如何又快又有效?

虽然编程语言有很多,但在需要顶级性能的项目上,基本都会使用C。尤其是机器人、自动驾驶、AI等嵌入和实时系统,都是C的主要应用方向,在这种层面,几乎没有竞争者。比如熊厂的搜索引擎、推荐引擎等核心产品,鹅…

论文浅尝 | 混合注意力原型网络的含噪音少样本的关系分类

论文笔记整理:余海阳,浙江大学硕士,研究方向为知识图谱、自然语言信息抽取。链接:https://www.aaai.org/Papers/AAAI/2019/AAAI-GaoTianyu.915.pdf动机现有的关系分类方法主要依赖于远程监控(DS)&#xff0…

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

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

LeetCode 239. 滑动窗口最大值(双端队列+单调栈)

文章目录1. 题目信息2. 解题2.1 暴力法2.2 双端队列法1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例:输入: n…

Airbnb搜索:重排序阶段如何优化搜索结果多样性?

文 | 谷育龙Eric编 | QvQ我是谷育龙Eric,研究方向有深度学习、搜索推荐,喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。本文将基于Airbnb KDD 2020年的论文,介绍Airbnb搜索排序中在重排序阶段如何解决多样性的问题,对工业…