消息中间件选型分析
目录
一、概述
什么是消息中间件?
二、消息队列的使用场景
为什么使用消息队列?
消息队列有什么优缺点?
三、目前流行的消息队列优缺点对比
四、总结
一、概述
什么是消息中间件?
消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。个人感觉比价场景应用核心的有三个:解耦、异步、削峰。
二、消息队列的使用场景
为什么使用消息队列?
其实这个话题也是面试官经常问询的问题,问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么
期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处
现在你可以下想想你如何回答上述问题,想不起来? 好吧我这里先介绍几个常见使用场景,提醒下。。。
A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都白了啊。。。
这是你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里(做过微服务项目的同学这里是不是考虑下 消息总线 搭配Rabbitmq 做解耦 用于广播配置文件的更改或者服务间的通讯?),是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。
异步:现场画个图来说明一下,
A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库,自己本地写库要3ms,BCD三个系统分别写库要300ms、450ms、200ms。最终请求总延时是3 + 300 + 450 + 200 = 953ms,接近1s,用户感觉搞个什么东西,慢死了慢死了。
更改为 异步后当消息发送到消息队列 自行让对应系统进行消费即可 所以给用户的体验为20 + 5 = 25ms ,快 好快!
削峰:每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11点~1点,每秒并发请求数量突然会暴增到1万条。但是系统最大的处理能力就只能是每秒钟处理1000个请求啊。。。尴尬了,系统会死。。。
高级java免费课程:https://ke.qq.com/course/131889?flowToken=1006149
全套java资料领取QQ: 514683544