怎样算是理解了一套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消息中间件的更多相关文章

  1. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  2. IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?

    1.前言 在IM这种讲究高并发.高消息吞吐的互联网场景下,MQ消息中间件是个很重要的基础设施,它在IM系统的服务端架构中担当消息中转.消息削峰.消息交换异步化等等角色,当然MQ消息中间件的作用远不止于 ...

  3. IBM MQ消息中间件jms消息中RHF2消息头的处理

    公司的技术平台在和某券商对接IBM MQ消息中间件时,发送到MQ中的消息多出了消息头信息:RHF2,造成消息的接收处理不正常.在此记录此问题的处理方式. 在IBM MQ中提供了一个参数 targetC ...

  4. 【绝对有收获】看看?必须告诉你为什么要使用MQ消息中间件(图解版)

    欢迎关注文章系列 ,关注我 <提升能力,涨薪可待> <面试知识,工作可待> <实战演练,拒绝996> 也欢迎关注微信公众号[Ccww笔记],原创技术文章第一时间推出 ...

  5. MQ消息中间件,面试能问些什么?

    MQ消息中间件,面试能问些什么? 为什么使用消息队列?消息队列的优点和缺点? kafka.activemq.rabbitmq.rocketmq都有什么优缺点? 面试官角度分析: (1)你知不知道你们系 ...

  6. 理解JAVA MQ消息中间件

    MQ的几种消息传递方式 发布订阅模式 发布订阅模式有点类似于我们日常生活中订阅报纸.每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个.在这个表里头列了所有出版发行的报纸,那么对于我们每一 ...

  7. MQ消息中间件

    MQ是什么? MQ是Message Queue消息队列的缩写.消息队列是一种应用程序对应用程序的通信方法.应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它们. ...

  8. 为什么要使用MQ消息中间件?

    在面试大型互联网公司的时候,很可能会被问到消息队列的问题: 1.在何种场景下使用了消息中间件? 2.为什么要在系统里引入消息中间件? 3.如何实现幂等? 链式调用是我们在写程序时候的一般流程,为了完成 ...

  9. 为什么要使用MQ消息中间件?这3个点让你彻底明白!

    前言 一个用消息队列的人,不知道为啥用,有点尴尬.没有复习这点,很容易被问蒙,然后就开始胡扯了. 回答:这个问题,咱只答三个最主要的应用场景,不可否认还有其他的,但是只答三个主要的,即以下六个字: 解 ...

随机推荐

  1. 我的Python升级打怪之路【一】:python的简单认识

    Python的简介 Python与其他语言的对比: C和Python.Java.C# C语言:代码直接编译成了机器码,在处理器上直接执行 Python.Java.C#:编译得到相应的字节码,虚拟机执行 ...

  2. php+windows环境安装

    1.下载并安装phpstorm 2.查找激活码激活phpstorm 3.由于php官方没有提供exe版本,安装phpstudy,获得windows下exe编译版本的php 4.安装VisualSVN ...

  3. selenium IDE 命令二(断言、验证、等待、变量)

    测试用例需要做断言和验证,在seleniumIDE中提供了断言和验证来对结果进行比较 首先通过打开seleniumIDE,在页面任意一个元素右键,选择最后一个选项“show all available ...

  4. FFmpeg的H.264解码器源代码简单分析

    本文简单记录FFmpeg中libavcodec的H.264解码器(H.264 Decoder)的源代码.这个H.264解码器十分重要,可以说FFmpeg项目今天可以几乎“垄断”视音频编解码技术,很大一 ...

  5. c++ 网络编程(八) LINUX-epoll/windows-IOCP下 socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html 锲子:关于并发服务器中的I/O复用实现方式,前面在网络编程系列四还是五来 ...

  6. ORA-XXXX错误集合

    第一.ORA-12514:listener does not currently know of service requested in connect descriptor 监听器巴拉巴拉一堆,然 ...

  7. PHP自然排序,非自然排序(未完成)

    还要研究一下,暂时先添加个链接 参考:PHP数组的“自然”排序

  8. PHP学习5——异常处理

    主要内容: PHP错误类型 异常的产生 错误日志 日志信息记录到操作系统日志 异常处理 扩展异常处理类 PHP错误类型 语法错误 执行时错误 逻辑错误 异常的产生 如果安装了xampp之后,在php. ...

  9. jquery报表插件收藏 MARK

    Highcharts http://www.hcharts.cn/ 统计报表插件 jquery ui官网 http://jqueryui.com/selectmenu/#custom_render

  10. java 线程池(1)

    问题 : 线程池中的 coreSize 和 maxSize 的作用分别是什么? 未执行的线程池存在在哪种数据类型,为什么使用这种类型的数据结构 ThreadPoolExecutor概述 ThreadP ...