mq的介绍和概述

269 阅读4分钟

title: db-mq-introduce tags:

  • work
  • mq categories:
  • db date: 2019-04-19 11:43:37

一、简述

  1. 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

二、topic和queue

  1. topic用于Pub/Sub发布订阅(广播),任意一个监听队列的消费者都会收到队列中的每一条消息,生产者只塞一条消息。是一对多的对应关系
  2. queue用于点对点的方式,一个queue可以有多个监听者,但是每个消息只会被消费一次。是一对一的对应关系。

三、优势

  1. 系统解耦,系统与系统之间没有直接的调用关系。
  2. 调用是异步,可以提高响应时间,为数据处理提高性能支持。

四、应用场景

  1. 异步
  2. 解耦
  3. 冗余:有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕
  4. 扩展性:分布式扩容,提高吞吐量
  5. 过载保护:当数据量剧增的时候,应用程序来不及处理,可以暂时缓存在mq中,等应用程序慢慢处理。
  6. 可恢复性:消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
  7. 顺序保证:在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。
  8. 缓冲:在任何重要的系统中,都会有需要不同的处理时间的元素。消息队列通过一个缓冲层来帮助任务最高效率的执行,该缓冲有助于控制和优化数据流经过系统的速度。以调节系统响应时间。
  9. 数据流处理:分布式系统产生的海量数据流,如:业务日志、监控数据、用户行为等,针对这些数据流进行实时或批量采集汇总,然后进行大数据分析是当前互联网的必备技术,通过消息队列完成此类数据收集是最好的选择。

五、常用协议

  1. AMQP协议:
    AMQP即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
  2. MQTT协议:
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
  3. STOMP协议:
    STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。STOMP提供一个可互操作的连接格式,允许客户端与任意STOMP消息代理(Broker)进行交互。命令模式(非topic\queue模式)
  4. XMPP协议:
    (可扩展消息处理现场协议,Extensible Messaging and Presence Protoco)核心是基于XML流传输
  5. 自定义:
    有些特殊框架(如:redis、kafka、zeroMq等)根据自身需要未严格遵循MQ规范,而是基于TCP\IP自行封装了一套协议,通过网络socket接口进行传输,实现了MQ的功能。

六、五种中间件的对比

rocketMq rabbitMq activeMq zeroMq kafka
支持语言 只有java 语言无关 语言无关 语言无关 语言无关
消息丢失 理论no 理论no
延时 毫秒 微妙 微妙 极低,号称最快 微妙
持久化 磁盘文件 内存,文件 内存,文件,db no 文件
负载均衡 yes yes yes yes 依赖zookeeper
使用场景 企业级,大数据量 企业级 小型系统,数据量不大 多用于金融,支持复杂队列 实时处理,日志收集