如何深入理解一套MQ消息中间件
怎样算是理解了一套MQ中间件呢?原来一知半解的我列了几个维度:demo跑起来,理解其投递次数的语义,理解其事务的特性等等。这是一种角度,但总有种看山不是山的一知半解的感觉。再问一层,比如为什么Kafka吞吐量远胜于其他中间件,为什么说适合日志采集和流式计算的场景?就回答不上来了。学习终归是个积累的过程。
直到某一天看到阿里一篇挺常规的关于Notify和MetaQ的介绍,却突然茅塞顿开。当然了,其中不乏是做了一两个需求的缘故。故事是围绕着一下几个疑问展开的。
1.什么是消息中间件,解决了什么问题?Message Queue嘛,顾名思义就是排队。打个比方去快餐店点餐,每个人点餐可能只要10s,但如果三个人同时向服务员点餐,服务员就可能会乱了,三个顾客还可能会吵起来,这件事就没法30s内解决,那么很简单,排队点餐就好办了。所以MQ最核心的功能就是削峰蓄洪。其他特征则是围绕这一功能衍生出来的,比如如何维持排队的人不乱套(持久化和重发和事务支持),如何容纳更多的人排队(堆积能力),如果实在接待不了这么多人怎样让后来的人去其他地方安置(限流机制)等等。
2.MetaQ与Kafka的对比。名字缘由是说Metamorphosis变形记是向卡夫卡致敬。明明Kafka性能远胜于MetaQ,为什么还要造出个MetaQ呢?因为支持了tag过滤了啊,过滤的特性放在电商系统里对性能的提升比单机的吞吐量和堆积能力还更重要。也就是说,MetaQ加入的是更场景化的特性。
3.MetaQ与ActiveMQ的对比。侧重谈前者,后者遵循AMQP协议。MetaQ串行化写盘快(随机读可以做内存缓存),pull拉式订阅解放了broker的路由压力,逻辑队列只存索引信息非常轻。这里解决的问题,是性能的问题,持久化时如何写得快而准、如何读得快,消息堆积时如何能堆更多,投递时如何又灵活又快又省资源(cpu和带宽)。
4.JMS与AMQP。JMS是java接口规范。AMQP是跨越语言的MQ标准,并规划了路由到投递的分层设计。
5.共性。投递次数的语义完全是共性,基本都是至少投递一次的语义,要支持至多投递一次并不难但是场景很少,要支持准确投递一次很难且代价太大,何不让应用自己去做接口幂等。事务则是取舍,能支持事务的都会牺牲一些性能,不支持事务的一般都会更轻快。广播等其他特性,要看具体的应用场景。
所以,如何深入学习一套MQ中间件?围绕其持久化的形式(kv或串行写盘等等)、堆积的能力(队列的底层数据结构)、投递方式(push的路由规则或pull的寻址及过滤)就已经是很了解了。再加上个高可用主从模式,就几乎完全掌握了。
如何深入理解一套MQ消息中间件的更多相关文章
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?
1.前言 在IM这种讲究高并发.高消息吞吐的互联网场景下,MQ消息中间件是个很重要的基础设施,它在IM系统的服务端架构中担当消息中转.消息削峰.消息交换异步化等等角色,当然MQ消息中间件的作用远不止于 ...
- IBM MQ消息中间件jms消息中RHF2消息头的处理
公司的技术平台在和某券商对接IBM MQ消息中间件时,发送到MQ中的消息多出了消息头信息:RHF2,造成消息的接收处理不正常.在此记录此问题的处理方式. 在IBM MQ中提供了一个参数 targetC ...
- 【绝对有收获】看看?必须告诉你为什么要使用MQ消息中间件(图解版)
欢迎关注文章系列 ,关注我 <提升能力,涨薪可待> <面试知识,工作可待> <实战演练,拒绝996> 也欢迎关注微信公众号[Ccww笔记],原创技术文章第一时间推出 ...
- MQ消息中间件,面试能问些什么?
MQ消息中间件,面试能问些什么? 为什么使用消息队列?消息队列的优点和缺点? kafka.activemq.rabbitmq.rocketmq都有什么优缺点? 面试官角度分析: (1)你知不知道你们系 ...
- 理解JAVA MQ消息中间件
MQ的几种消息传递方式 发布订阅模式 发布订阅模式有点类似于我们日常生活中订阅报纸.每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个.在这个表里头列了所有出版发行的报纸,那么对于我们每一 ...
- MQ消息中间件
MQ是什么? MQ是Message Queue消息队列的缩写.消息队列是一种应用程序对应用程序的通信方法.应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它们. ...
- 为什么要使用MQ消息中间件?
在面试大型互联网公司的时候,很可能会被问到消息队列的问题: 1.在何种场景下使用了消息中间件? 2.为什么要在系统里引入消息中间件? 3.如何实现幂等? 链式调用是我们在写程序时候的一般流程,为了完成 ...
- 为什么要使用MQ消息中间件?这3个点让你彻底明白!
前言 一个用消息队列的人,不知道为啥用,有点尴尬.没有复习这点,很容易被问蒙,然后就开始胡扯了. 回答:这个问题,咱只答三个最主要的应用场景,不可否认还有其他的,但是只答三个主要的,即以下六个字: 解 ...
随机推荐
- (转)nmon和nmon analyser的下载和使用
原文:https://blog.csdn.net/a7442358/article/details/50186283 nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能 ...
- mongodb3.4 远程连接认证失败
mongodb开启或者关闭授权功能时还是挺麻烦的,需要新建服务键入mongod --auth.为了方便,我这里是建了两个服务,用到哪个就切换至哪个服务. --需要授权 mongod --logpath ...
- css用hover制作下拉菜单
首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...
- java获取request的头信息
1.获取全部头信息: //get request headers private Map<String, String> getHeadersInfo() { Map<String, ...
- 了解下C#异常时的输出
Sample Code: try { string re = "1.1".Substring(1,4); } catch (Exception ex) { logger.Error ...
- php对图片加水印--将一张图片作为水印加到另一张图片
代码如下: /** * 图片加水印(适用于png/jpg/gif格式) * * @param $srcImg 原图片 * @param $waterImg 水印图片 * @param $s ...
- Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)
Silverlight的基础动画包括偏移.旋转.缩放.倾斜和翻转动画,这些基础动画毫无疑问是在Silverlight中使用得最多的动画效果,其使用也是非常简单的.相信看过上一篇<偏移动画(Tra ...
- NoSQL集锦
1. http://blog.nosqlfan.com/,有不少Redis.CouchDB.MongoDB的电子书和文章,但没有Memcached的.
- golang学习之闭包
匿名函数不能够独立存在,但可以被赋值于某个变量,即保存函数的地址到变量中:fplus := func(x, y int) int { return x + y },然后通过变量名对函数进行调用:fpl ...
- json数据发送时浏览器提示“保存”解决
数据以json形式发送的时候,部分浏览器不能直接解析,而是提示是否保存,nodejs的express应用中可以通过如下代码解决该问题: router.get('/', function (req, r ...