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

news/2024/5/20 2:47:43/文章来源:https://blog.csdn.net/lgfeng218/article/details/96421240

什么是消息队列

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

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

消息队列的特点

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

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

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

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

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

消息队列应用场景

异步处理

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

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

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

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

应用解耦

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

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

流量削峰

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

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

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

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

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

消息通讯

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

广播

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

日志处理

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

消息队列的传输模式

点对点模式(Point to Point)

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

点对点模式特点:

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

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

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

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

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

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

发布/点阅模式特点:

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

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

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

集中消息中间件对比

目前在生产环境,使用较多的消息队列有ActiveMQRabbitMQZeroMQKafkaMetaMQRocketMQ等。


好文推荐:

  • 一篇文章带你快速搞懂HBase RowKey设计

  • 带你快速上手HBase | HBase列族优化

  • 带你快速上手HBase | HBase读写性能优化

  • Spark快速入门 | Spark任务调度

  • Spark快速入门 | Spark执行过程

  • Spark快速入门 | RDD操作手册

  • Spark快速入门 | RDD介绍

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

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

相关文章

大型网站技术架构核心原理剖析,文末附知识图谱下载

什么是软件架构 维基百科定义:软件架构是指有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 软件架构5大要素: 性能可用性伸缩性扩展性安全性 可以通过考察这5大要素来衡量一个软件架构设计的优劣。 高性能 网站性能…

NodeJs实战-Express构建照片存储网站(3)-下载图片

NodeJs实战-Express构建照片存储网站3-下载图片 页面增加下载链接增加下载对应的路由效果图项目地址 页面增加下载链接 修改 index.ejs 视图文件增加链接标签 a <!DOCTYPE html> <html><head><title><% title %></title><link relsty…

电商小学期 - 智能家居网站结项报告

前言&#xff1a; 「 Design & Build 」 三个专业三个方向&#xff0c;共同完成一个项目&#xff0c;分别为&#xff1a; 物联网 数据库的搭建及管理员相关 电管 硬件设施的实现 电商 用户方面的前后端 在本次项目开发中&#xff0c;自身经历了从0到对前后端…

httpd加DNS搭建Web网站访问,添加虚拟目录访问

安装httpd yum install httpd -y 配置httpd.conf&#xff0c;添加或修改一下配置 vim /etc/httpd/conf/httpd.conf Listen 80 ServerName www.studylinux.con:8080 DocumentRoot "/var/www/html" DirectoryIndex index.html index.html.var创建主页文件&#xff0c;并…

京东一面,面试官问我如何用 Nginx 禁止国外 IP 访问网站,我直接凉凉!

上周去京东面试了&#xff0c;本来觉得自己准备好好的&#xff0c;多数面试问题都回答的比较流畅&#xff0c;有时候甚至觉得自己已经可以和面试官谈笑风生了&#xff0c;结果接下来的一个问题直接把我拍死在凳子上。 问&#xff1a; 我在看 Nginx 访问日志的时候&#xff0c…

宝塔面板网站上传成功文件内无显示问题

在刚安装完宝塔面板并用其建站时有时会出现文件系统无显示问题&#xff0c;处理方式很简单如下&#xff1a; 等修复完成问题得到解决

C# 网站 获取客户端IP地址详细信息

IP地址详情 /// <summary> /// 获取web客户端ip地址详细信息 /// </summary> /// <returns></returns> public static string GetClientIPKLocationKV() {string ret string.Empty;string LocationKV string.Empty;List<string> KVs new List…

将网页/网站嵌入再SAP GUI主屏幕

Note 1387086 - HTML viewer in SAP Easy Access screen 将网页/网站嵌入再SAP GUI主屏幕 步骤: 1,Tcode:SM30->表/视图:SSM_CUST 2,新增/修改:名称:SESS_URL 值:要嵌入的 网页/网站 地址。 3,效果 修改前

将PHP做的web网站封装成桌面客户端,也可将打包成安装文件

电脑需要安装node.js。 1:npm install nativefier -g #安装nativefier 2:输入nativefier检测是否安装成功 3:nativefier --name "YouForever" "http://www.xxxx.cn" #生成程序,YouForever是自定义名字 4&#xff1a;完成 官网https://www.npmjs.…

chrome无法从该网站添加应用、扩展程序和用户脚本

问题&#xff1a; 为chrome添加infinity插件时提示无法从该网站添加应用、扩展程序和用户脚本 解决方法&#xff1a; 1、在地址栏输入&#xff1a;chrome://flags/#extensions-on-chrome-urls并按回车键 2、在Extensions on chrome:// URLs选项选择Enabled 3、在弹出框选择rel…

易优(eyoucms)CMS网站搬家教程

1、网站数据备份 进入网站网站后台-更多功能-备份还原&#xff1b;选择全部数据表单&#xff0c;然后点击数据备份&#xff0c;等待备份完成&#xff0c;然后进行下一步&#xff1b; 2、查看网站程序所使用的版本号 进入你的服务器或者虚拟主机&#xff0c;找到网站根目录&…

人人站CMS模板安装后打开网站报错如何解决?

各位站长如果安装模板后遇到网站如上图错误&#xff0c;首先要打开系统调试模式查看是什么原因导致。 打开调试模式步骤&#xff1a; 1.找到模板根目录找到文件 .env 2.将第一行修改为&#xff1a;APP_DEBUG true 3.重新访问网站就能看到真实错误了。可以复制错误到百度搜…

人人站CMS-备案号等网站公共信息修改了,但前台页面没改过来怎么处理

最近收到不少新手站长反馈&#xff1a;例如 备案号&#xff0c;网站标题&#xff0c;logo等等修改了但前台没更新。 一般出现这个情况有两个原因&#xff1a; 1.后台修改后没有清理缓存(这一点大家基本都知道&#xff0c;往往遇到是第二点) 2.不同模板页面调取使用“站点设置”…

人人站CMS更新工业和生物科技类网站模板

本周&#xff0c;我们更新了两种不同行业的模板&#xff0c;分别是压缩干燥机设备类、生物科技保健品类。一起看一下吧&#xff01; 模板一&#xff1a;压缩干燥机设备类 此模板以白色为主基调&#xff0c;辅以黑红配色&#xff0c;简洁明快&#xff0c;结构分明&#xff01;…

网站手机模板

实用的装修装饰企业网站手机模板&#xff0c;手机版装修工程公司网站模板。主要页面有&#xff1a;品牌介绍、装修风格、设计团队、装修百科、促销活动、客户服务、视频展区、五星工程、联系我们等总共14个页面html下载。 模版来源&#xff1a;http://sc.dede58.com/wapsc/sjmb…

给大家介绍几个PPT网站

一、无忧PPThttp://www.51ppt.com.cn/top_rank/welcome.html 这是一个综合性的PPT网站&#xff0c;在里面不仅有海量好看的PPT模板&#xff0c;而且还有制作PPT时需要的素材、图标等等&#xff0c;还是免费的哟~ 二&#xff0c;优品PPThttp://www.ypppt.com/一个有情怀的免费…

模仿CSDN网站——环境搭建

一、git clone代码 在码云上创建开源项目CSDN2&#xff0c;点击“克隆/下载”&#xff0c;选择HTTPS方式&#xff0c;赋值链接&#xff0c;然后在本地git clone代码。 二、安装vue-cli 选中CSDN2项目文件夹&#xff0c;右键Git Bash here&#xff0c;执行以下操作&#xff1a…

模仿CSDN网站——Element-UI安装

Element-UI官网地址&#xff1a;https://element.eleme.cn/#/zh-CN 一、安装 在项目根目录下运行 npm i element-ui -S 二、完整引入 在main.js中写入以下内容&#xff1a; import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/in…

网站搭建:CSS之布局

CSS在整个网站搭建过程中起到了布局和修饰的重要作用&#xff0c;如果把一个网页比作是一个人&#xff0c;那么HTML算是肌肉&#xff0c;JavaScript负责了其中血液的作用&#xff0c;而CSS则通过大量的属性负责了网页的骨骼和皮肤两项功能 这里先把CSS的布局或者网页骨骼的功能…

大型网站架构体系的演变

互联网上有很多关于网站架构的各种分享&#xff0c;有些主要是从运维和基础架构的角度去分析的&#xff08;堆机器&#xff0c;做集群&#xff09;&#xff0c;太关注技术细节实现&#xff0c;普通的开发人员基本看不太懂。 本文上篇将主要介绍大型网站基础架构的扩展&#xff…