消息队列的五个使用场景
一、简介
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题;
实现高性能,高可用,可伸缩和最终一致性架构;
使用较多的消息队列有ActiveMQ,RabbitMQ,RocketMQ,Kafka。
二、消息队列使用场景
以下介绍消息队列在实际应用中常用的使用场景。应用解耦,异步处理,流量削锋、日志处理和消息通讯五个场景。
1、应用解耦
场景说明:像我们公司的统一的管理平台系统,与各种子系统打交道。传统的做法是,各个系统调用平台系统的接口。如下图
平台管理系统发送个数据到下面各个子系统,接口调用发送,那如果其他系统也要这个数据呢?那如果HOUP系统现在不需要了呢?现在平台管理系统又要发送第二种数据了呢?平台管理系统负责人估计会奔溃吧。再来点更加崩溃的事儿,平台管理系统要时时刻刻考虑那些子系统如果挂了咋办?我要不要重发?我要不要把消息存起来?负责人估计跑路的心都有了。。。
传统模式的缺点:
- 假如平台管理系统无法访问,则所有的子系统读取消息将失败。
- 平台管理系统与各个子系统耦合。
如何解决以上问题呢?引入应用消息队列后的方案,如下图:
引入消息队列的优点:
- 平台管理系统完成持久化处理,将消息写入消息队列。
- 各个子系统:采用拉/推的方式,进行消费消息。
- 假如子系统挂了不能正常使用了,也不影响用户在平台管理系统的正常业务的操作,因为操作完的数据写入消息队列不再关心后续的其他操作了。实现了平台管理系统与各个子系统的应用解耦。
2、异步处理
场景说明:用户对平台发起了一次请求,平台与各个子系统操作各自的数据库来完成用户的这一次请求。
假设用户的这次请求,平台需要HOUP、CMO和CMC三个子系统交互,从图中看出,不难算出用户的这次请求需要的总耗时是:720ms,可能网络波动的时候,可能达到1s。一般的互联网企业,对用户的直接操作,一般要求是200ms以内完成,对用户几乎是无法感知到的,对于很多产品来说,用户体验是至关重要的。
那如何解决这种性能的问题呢?
引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:
引入消息队列后,用户把消息写入消息队列后,直接返回,因此用户的响应时间是:25ms,性能提高了好几倍。
3、流量削锋
应用场景:某个时间点高峰期,大量用户涌入系统进行相应的业务操作。
4、日志处理
以下是新浪kafka日志处理应用案例
(1)、Kafka:接收用户日志的消息队列
(2)、Logstash:做日志解析,统一成JSON输出给Elasticsearch
(3)、Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能
(4)、Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因
5、消息通讯
消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等
点对点通讯:
客户端A和客户端B使用同一队列,进行消息通讯。
聊天室通讯:
客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。
消息队列的五个使用场景相关推荐
- 消息队列的五种使用场景
场景一:异步处理 场景二:应用解耦 场景三:流量削峰 场景四:日志处理 场景五:消息通讯 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩 ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ
RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...
- 消息队列使用的四种场景介绍
一.简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,Zer ...
- 消息队列的四大典型使用场景
关键词: 消息队列 业务解耦 最终一致性 错峰流控 日志同步 Kafka RabbitMQ 声明:本文并非原创,转自华为云帮助中心的分布式消息服务(DMS)的用户指南.客户端连接方法通用,故摘抄过 ...
- python中队列的应用用场景_消息队列使用的四种场景介绍
四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JavaMessage Service,Java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送.接 ...
- 【消息队列】五个问题详解消息中间件
1.消息中间件是什么 消息队列,又叫做消息中间件.是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程 ...
- java onmessage监听消息队列_消息队列(MQ)功能场景
来自公众号:京东技术 消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法.应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用链接来连接它们.消息传递指的是程序之间通过在消息中发 ...
- 面试官:说出八种消息队列的应用场景。啊?八种?
本文来源于公众号:胖滚猪学编程.转载请注明出处! 一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向她走来,看着铮亮的头,胖滚猪心想,这肯定是尼玛顶级架构师吧!完了要挂了. 结果面试官第 ...
- 为什么使用消息队列、消息队列优缺点和适用场景?
一.为什么使用消息队列? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...
最新文章
- linux守护实例有什么用,linux中的信号及进程守护的应用实例分享
- intellij idea建立maven项目
- tf.device()指定tensorflow运行的GPU或CPU设备
- elasticsearch不能使用root启动问题解决
- Redis 未授权访问缺陷可轻易导致系统被黑
- .NET+Sqlite如何支持加密
- 编译原理—词法分析器(Java)
- 不好意思昨天断更了,今天聊聊创业
- Java or PHP? 谈谈高并发网站的技术选型和架构设计
- Android中ListView复用导致布局错乱的解决方案
- 7.1-7.31推荐文章汇总
- vue 组件 not defined_Vue、Spring Boot开发小而完整的Web前后端分离项目实战10
- Pixhawk-姿态解算源码注释
- 相机变焦与对焦方法及原理
- uniapp editor编辑器
- 软件测试面试考什么综合素质,综合素质测评都考了啥
- Arcgis ToolBOx学习之五——Analysis——Proximity工具
- 爬虫时候遇到python connection error max retries exceeded whith url 怎么解决?
- 使用lua配置neovim所需的一切
- Office噩梦公式远程代码执行漏洞