高性能网站实用技巧之消息队列

news/2024/5/11 14:52:44/文章来源:https://blog.csdn.net/congdi4518/article/details/100304778

什么是消息队列?

aeqY733.png!web

消息队列(  Message Queue  )是一种进程间通信或同一进程的不同线程间的通信方式。进程或者线程之间通过  消息  进行通信,消息发送后可以立即返回,由消息系统来确保信息的可靠传递,消息发布者(生产者)只管把消息发布到消息队里中而不用管谁来消费,消息使用者(消费者)只管从消息队列中获取消息以进一步处理而不用管理谁发布的消息,这样发布者和使用者都不用知道对方的存在。

消息(  Message  )是指在应用之间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以很复杂,如嵌入对象。

消息队列的特点

通过提供  消息传递  和  消息排队  模型,它可以在  分布式环境  下提供  应用解耦  、  弹性伸缩  、  冗余存储  、  流量削峰  、  异步通信  、  数据同步  等等功能,其作为  分布式系统架构  中的一个重要组件,有着举足轻重的地位。消息队列主要特点有:

  • 异步性:将耗时的同步操作,通过以发送消息的方式,进行了异步化处理。减少了同步等待的时间。

  • 松耦合:消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节,只要定义好消息的格式就行

  • 分布式:通过对消费者的横向扩展,降低了消息队列阻塞的风险,以及单个消费者产生单点故障的可能性。

  • 可靠性:消息队列一般会把接收的消息存储到本地硬盘上(当消息被处理完之后,存储信息根据不同的消息队列实现,有可能将其删除),这样即使应用挂掉或者消息队列本身挂掉,消息也能够重新加载。

消息队列应用场景

异步处理

同步处理是指从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞等待调用的处理完成。

异步处理处理是指在请求发起的处理过程中,客户端的代码已经返回了,它可以继续进行自己的后续操作,而不需要等待调用处理完成。

对一些比较耗时且不需要即时(同步)返回操作结果的操作,可以把处理过程通过消息队列进行异步处理。这样做可以推迟耗时操作的处理,使耗时操作异步化,而不必阻塞客户端程序,客户端的程序在得到处理结果之前可以继续执行,从而提高客户端程序的处理性能。

异步处理的主要目的是  减少请求响应时间  ,实现非核心流程异步化,提高系统响应性能。

应用解耦

使用消息队列,可以有多个生产者发布消息,多个消费者消费消息,共同完成整个的业务处理逻辑,生产者只关心是否正确将消息写入消息队列,消费者只关心从消息队列中获取消息,然后进行处理逻辑,生产者和消费者之间不需要直接的交互调用,没有代码的依赖耦合。

耦合度越低程序代码越容易维护,也容易进行扩展。

流量削峰

一般在秒杀活动中广泛使用。

在秒杀活动中,一般由于瞬时访问量过大,服务器瞬间接收了大量的请求,流量暴增,这种情况下很有可能导致相关系统无法处理请求甚至崩溃。为了解决这个问题,一般会在应用的前端加入消息队列。

  • 请求先写入消息队列,而不是由业务系统直接处理,做了一次缓冲,极大的减少了业务处理系统的压力。

  • 队列的长度可以做限制,一般秒杀活动都是有数量限制的,后写入队列的用户无法秒杀到商品,这样的请求可以直接被抛弃,可以直接返回活动已结束或商品已售完。

使用消息队列,即便是访问流量持续的增长,系统依然可以持续的接收请求。虽然生产者生成的消息比消费者消费的速度快,但是通过消息队列进行了缓冲,在短时间内,生产者和消费者之间处理能力不会互相影响,同样也可以保证系统的稳定性。

消息通讯

消息队列一般都内置了高效的通信机制,因此可以用于单纯的消息通讯,比如实现点对点消息队列或者聊天室。

广播

如果没有消息队列,每当一个新的业务方介入,那都需要联调一次接口。有了消息队列,只需要关系消息是否送达了队列,至于谁希望订阅,是下游的事情,无疑极大地减少了开发和联调的工作量。

日志处理

将消息队列用在日志处理中,解决了大量日志传输的问题(如Kafka)。

消息队列的传输模式

点对点模式(Point to Point)

点对点模式用于  消息生产者  和  消息消费者  之间  点到点  的通信。消息生产者将消息发送到由某个名字标识的特定队列(  Queue  )。在消息传递给消费者之前它被  存储  在这个队列中。  队列消息  可以放在  内存  中也可以  持久化  ,以保证在消息服务出现故障时仍然能够传递消息。

aYfqEnn.png!web

点对点模式特点:

  • 每个消息只有一个消费者(Consumer),即一旦消息被消费,消息就不再在消息队列中。

  • 生产者和消费者之间没有依赖性,生产者发送消息之后,不管有没有消费者在运行,都不会影响到生产者下次发送消息。

  • 消费者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息。

发布/订阅模式(Publish/Subscribe)

发布者/订阅者模型支持向一个特定的  消息主题  生产消息。  0 或多个 订阅者  可能对接收来自  特定消息主题  的消息感兴趣。

在这种模型下,发布者和订阅者彼此不知道对方。多个消费者可以获得消息,在  发布者  和  订阅者  之间存在  时间依赖性  。发布者需要建立一个  订阅  (  subscription  ),以便能够消费者订阅。  订阅者  必须保持  持续的活动状态  并  接收消息  。

Ezmiqi3.png!web

发布/点阅模式特点:

  • 每个消息可以有多个订阅者。

  • 发布者和订阅者之间有时间上的依赖性,针对某个主题(Topic)的订阅者,它必须创建一个订阅之后,才能消费发布者的消息。

  • 为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行。

集中消息中间件对比

目前在生产环境,使用较多的消息队列有  ActiveMQ  、  RabbitMQ  、  ZeroMQ  、  Kafka  、  MetaMQ  、  RocketMQ  等。

ZfIJniu.jpg!web


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31545684/viewspace-2649115/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31545684/viewspace-2649115/

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

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

相关文章

现实世界的Windows Azure:专访PrivacyCentral网站创始人、CEO Zoiner Tejada

作为现实世界Windows Azure博客系列中的一部分,我联系了PrivacyCentral网站创始人、CEO Zoiner Tejada,来探寻该公司是如何利用Windows Azure平台及Ruby语言来搭建其强大的在线隐私服务。点击这里来了解PrivacyCentral的成功案例。下面我们来看看Tejada先…

后台网站制作步骤

撰写时间:2019年5月14日 星期二 作者:邱锡纶 首先我们可以看见这个后台网站我已经做好了,现在我就来总结一下这个后台网站的制作步骤,这个网站是我慢慢的一步一步慢慢的想,慢慢的改,改出来的,…

网站的设计构思

(撰写时间:2019年5月20日星期一 作者:邱锡纶)网站的好坏,除了外观,还有所实现的功能。还有安全性等。一般的企业网站要 实现的功能较少,应该价格比较低。但因为是企业,所以做网…

如何制作一个好网站

(作者:邱锡纶 撰写时间:2019年7月10日星期三)根据我在网上查到“怎么制作一个高端的好网站”的结果是高端网站建设没有那么简单,需要做市场调研、营销策划、搜索引擎优化、品牌视觉设计,还有用户体验&am…

用php写的亲亲鲜花网站_文案写的好的大佬,原来是用了这14个文案网站?

越来越多的人在自媒体文案上有一定的造诣,文案功底越来越强,当然也是他们不断的学习和利用好的平台工具让自己站的更高,借力就可以四两拨千斤,原来是他们用对了文案网站和视频软,建议你也赶紧收藏,文案写作…

增加索引会锁表吗_网站百度排名,内容增量一定要是权重指标吗?

声明:本文来自于微信公众号 蝙蝠侠IT(ID:batmanit),作者:蝙蝠侠IT,授权站长之家转载发布。如果你在长期做百度SEO一定会有这样一个明显的感觉,通过每天大量的输出相关性的内容,实际上是有利于提高网站的抓取频率与整站的权重。而对…

mongodb上一篇下一篇_一篇SEO领域的文章,直接被送上首页了

前几天写了一篇关于SEO优化的文章,今天无意间发现,这篇文章居然被放到首页了。以下是截图:那么我是怎么做到的呢?这样做有什么好处呢?这样做好处就是,可以提高你的品牌词曝光率,有一定的几率会让…

代理ip网站的ip怎么来的_代理IP的三大功能

使用代理IP来工作的人越来越多,许多用户都体验到了代理IP的便利和优势,特别是它变换IP地址的功能,对很多网络行业都有着非常大的帮助。除了变换IP地址之外,代理IP还有哪些高端大气上档次的功能呢?下面就由天启代理IP来…

educoder java答案数组进阶_十个适用于Java高级开发人员的交流网站

下面这些是我收藏的适合高级Java程序员去的网站,这些网站的内容包括了IT新闻、问题解答和职业面试等信息。好网站的核心在于其高质量的内容。在我看来,这些都属于最优秀的网站。我在介绍这些网站的同时也会分享一些自己的学习方式。你可能会认为其实任何…

如何将瀑布流里的图片加链接_如何提高网站建设效率

互联网时代,当我们在进行项目开发的时候,我们都在注重效率的提升,毕竟时间就是金钱。如何在有效的时间内进行高效率的开发建设,是我们从业者应该重视的问题。我们很多时候都注重网站建设本身,想着如何进行界面、代码优…

网站建设中 模板_使用模板建设网站有哪些弊端?

在最近一段时间内,我们曾经收到过了好几位新客户的请求,在这些请求中有很多都是来要求我们去帮助他们修改现在的已有网站。首先来说我们公司主要是定制和开发网站。在我们公司里也拥有很多非常专业的程序人员,无论是前端的设计和开发还是在后…

850是什么意思_850万人被丑拒!想加入这个交友网站咋这么难?

美国有一个交友网站,特别特别看脸。其实在交友网站上,大家注重颜值是很正常的啦。但这个网站已经把“看脸”做到了极致,域名就显示了它的核心精神:beautifulpeople.com(美人)。很多人都被它主打的会员高颜值特点吸引过来&#xff…

Linux环境下网站部署常用命令

1. 查看当前文件夹下面文件夹的大小 分析:除了常规查看,还可以通过分析文件夹,磁盘不够可以清理缓存。 du -h --max-depth1 2. 拷贝文件到指定的文件夹下面 分析:移动文件,不多说。 cp -R /data/www/public/images…

PHP结合阿里云实现网站滑块验证码的具体实例

目录滑块验证码样例关于滑块验证码开发准备系统编码附录滑块验证码样例 关于滑块验证码 滑块验证码主要的作用是方便用户进行快捷验证操作,但是同时要合理的辨别到底是机器操作还是人工操作,这一点显得难度比较大,是属于人机识别的智能开发范…

WEB网站常见受攻击方式及解决办法讲解

系统安全是一个经久不衰的话题,也是一个中大型系统必须考虑的问题,这是一门专门的学问,无数专家学者都在为之努力,今天小编就来向大家介绍一下常见的网站攻击方式以及避免攻击的方案。 跨站脚本攻击(XSS) XSS(Cross Site Scripti…

网站优化之文章

如何让所写文章被百度收录? 1、为什么自己原创高质还不收录? 提高收录量的前题两个,一是文章内容独特,二是网站本身权重高。谁说原创百度一定收录呢,你说的高质量原创,对于搜索引擎未必(或者说…

网站优化之百度推送代码

百度推送代码: 作用: 当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。 注:放在之前

网站优化之文章收录问题

文章有无被收录 直接将网址写入百度搜索栏,对于 未收录的文章 ,进行 站长后台 链接提交 。 国内几大搜索引擎网站提交收录地址: 百度:http://ziyuan.baidu.com/linksubmit/url 搜狗:http://fankui.help.sogou.com/ 36…

网站被腾讯判定为危险网站,怎么办?

如果你的网站有一段时间被腾讯判定为危险网站, 只要你在QQ里面或者微信里面输入网址, 就会显示:网站被大量用户举报,含有未经证实的信息,可能造成您的损失,建议谨慎访问 申诉地址:https://guan…