消息中间件

概述

  • 消息队列是分布式系统的主要组件
  • 主要优势:
    • 通过异步处理提高系统性能(1、削峰,通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务;2、减少响应所需时间)
    • 降低系统耦合性(消息发送者和消息接受者之间没有直接耦合,新增业务只要对该消息感兴趣即可订阅)
  • 问题:
    • 系统可用性降低(需要考虑消息丢失、MQ挂掉等)
    • 系统复杂度提升(保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等)
    • 一致性问题(消息的真正消费者并没有正确消费消息)

组成

  • Broker
    消息服务器,作为server提供消息核心服务
  • Producer
    消息生产者,业务的发起方,负责生产消息传输给broker
  • Consumer
    消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
  • Topic
    主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
  • Queue
    队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收
  • Message
    消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输

模式

  • 点对点
    使用queue作为通信载体
  • Pub/Sub发布订阅
    使用topic作为通信载体

协议

协议特点优势
AMQP协议提供统一消息服务的应用层标准高级消息队列协议可靠、通用
MQTT协议IBM开发的一个即时通讯协议格式简洁、占用带宽小、移动端通信、PUSH、嵌入式系统
STOMP协议流文本定向消息协议命令模式(非topic\queue模式)
XMPP协议基于可扩展标记语言(XML)的协议通用公开、兼容性强、可扩展、安全性高,但XML编码格式占用带宽大
其他基于TCP/IP自定义的协议基于TCP\IP自行封装了一套协议,通过网络socket接口进行传输,实现了MQ的功能

消息中间件

  • 老牌的ActiveMQ
  • RabbitMQ
  • 炙手可热的Kafka
  • 阿里巴巴自主开发RocketMQ
多语言支持
RocketMQ阿里参照kafka设计思想自主开发能够保证严格的消息顺序;提供针对消息的过滤功能;提供丰富的消息拉取模式;高效的订阅者水平扩展能力;实时的消息订阅机制;亿级消息堆积能力只支持java
RabbitMQ支持AMQP,XMPP, SMTP,STOMP等协议;实现了Broker架构语言无关
ActiveMQApache下,少量代码实现应用支持,java优先
redis本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
KafkaApache下,使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化;高吞吐:在一台普通的服务器上既可以达到10W/s的吞吐速率;高堆积:支持topic下消费者较长时间离线,消息堆积量大;完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现复杂均衡;支持Hadoop数据并行加载:对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。支持,java优先
ZeroMQ高吞吐量/低延迟的场景ZeroMQ仅提供非持久性的队列,如果down机,数据将会丢失
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值