RabbitMQ 0 中间件 消息中间件常用协议 特点
uwupu 啦啦啦啦啦

中间件

分布式消息中间件

当前

  • ActiveMQ

  • RabbitMQ

    • 在AMQP基础上完成
    • 优点:
      • 基于erlang语言,高并发特性
      • 吞吐量万级
      • MQ功能完善
      • 支持多种编程语言
      • 开源管理界面完善
      • 社区活跃度高
    • 缺点
      • 商业版收费
      • 学习成本高
  • Kafka

    • 优点:性能很强,单机写入TPS约百万条/s。
    • 缺点:
      • 在单机超过64队列/分区,Load会发生明显的飙高现象。队列越多,load越高,发送响应时间变长;
      • 一台宕机,就会产生消息乱序。
      • 消费失败不支持重试
  • RocketMQ

    • 阿里、滴滴开发的国产分布式消息中间件
    • 优点:
      • 单机吞吐量十万级,
      • 消息可以做到0丢失,
      • 支持分布式,扩展性好。
      • 支持10亿级别消息堆积;
      • 支持自定义
    • 缺点:
      • 支持的客户端不多。

场景

  • 消息中间件监控数据
  • 异步数据传输场景
  • 削峰填谷场景
  • 任务调度场景
  • 海量数据同步场景
  • 分布式事务场景
  • 日记管理场景
  • 大数据分析场景

要求

  • AMQP
  • MQTT
  • 持久化设计
  • Kafka协议
  • 消息分发设计
  • 高可用
  • 可靠性
  • 容错

负载均衡中间件

  • Nginx
  • LVS负载均衡
    • 对Nginx进行集群
  • KeepAlive
    • 保持心跳,保持高可用
  • CDN
    • 加速

缓存中间件

  • MemCache
  • Redis

数据库中间件

Mysql不保证高可用性

数据库中间件:实现Mysql集群,高可用性

  • Mycat
  • ShardingJdbc

使用案例

  • 异步数据保存
    • 实现削峰
  • 订单数据的消息分发
  • 分布式事务
  • 消息的容错
  • 分布式锁
  • 分布式会话
  • 分库分表

消息中间件核心组成

  • 消息的协议
  • 消息的持久化机制
  • 消息的分发策略
  • 消息的高可用,高可靠
  • 消息的容错机制

网络协议三要素

  • 语法:语法是用户数据与控制信息的结构与格式以及数据出现的顺序
  • 语义:语义是解释控制信息的每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应
  • 时序:时序是对事件发生顺序的详细说明。

面试:为什么消息中间件不直接使用http协议?

  • 因为http请求报文头和响应报文头是比较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加功能,对于一个消息而言,不需要这些复杂的功能,,消息只需要负责数据传递,存储,分发就可以,且追求高性能,进行简洁,快速;
  • 大部分http使用的是短连接,在实际交互过程中,一个请求到响应很有可能会中断,中断后就不会进行持久化,造成请求的丢失,这样不利于消息中间件的业务场景。消息中间件可能是一个长期获取消息的过程,出现问题和故障要对数据或消息进行持久化等,目的是为了保证消息和数据的高可靠和稳健的运行。

消息中间件常用协议

  • OpenWire,AMQP,MQTT,Kafka,OpenMessage协议

AMQP

全称:Advanced Message Queuing Protocol

高级消息队列协议。

特性

  • 分布式事务支持
  • 消息持久化支持
  • 高性能和高可靠的消息处理优势

支持者

  • RabbitMQ,ActiveMQ

MQTT

Message Queuing Telemetry Transport

是IBM开放的一个即时通讯协议,物联网系统架构的重要组成部分

特点

  • 轻量
  • 结构简单
  • 速度快,不支持事务
  • 没有持久化设计

应用场景

  • 计算能力有限
  • 低带宽
  • 网络不稳定场景

支持者

  • RabbitMQ,AvtiveMQ
    • 默认关闭MQTT协议,需要手动打开

OpenMessage

Apache RocketMQ

由阿里、雅虎、滴滴、Stremalio等公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准;

特点:

  • 结构简单
  • 解析速度快
  • 支持事务和持久化设计

Kafka协议

Kafka

基于TCP/IP的二进制协议,消息内部通过长度来分割,由一些基本数据类型组成

特点

  • 结构简单
  • 解析速度快
  • 无事务支持
  • 有持久化设计

消息队列持久化

将数据存入磁盘,而不是存在内存中,使数据永久保存

消息队列分发策略

角色:生产者,存储消息,消费者;

执行过程

  • 生产者生成消息
  • MQ进行存储
  • 消费者通过PUSH推或PULL拉的方式获取消息

多个消息中间件消息分发策略的机制和对比

ActiveMQ RabbitMQ Kafka RocketMQ
发布订阅 支持 支持 支持 支持
轮询分发 支持 支持 支持 /
公平分发 / 支持 支持 /
重发 支持 支持 / 支持
消息拉取 / 支持 支持 支持
  • 轮询分发:每个服务器分配到的消息数量一致

  • 公平分发:每个服务器分配到的消息数量不一致,能者多劳 ;

  • 消息拉取:很少使用,RPC

消息队列高可用和高可靠

高可用

即:集群。

是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能状态的能力;

当业务量增加时,请求也过多,一台消息中间件服务器会触及硬件(CPU,内存,磁盘)的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署,来达到高可用的目的。

集群模式1,Master-Slave主从共享数据的部署方式

image

集群模式2,Master-Slave主从同步部署模式

集群模式3,多主集群同步部署模式

集群模式4,多主集群转发部署模式

集群模式5,Master-Slave与Breok-Cluster组合方案

总结

  1. 消息共享
  2. 消息同步
  3. 元数据共享

高可靠

指系统可以无故障持续运行

比如一个系统崩溃,报错,异常等不影响线上业务的正常运行,出错率极低,就称之为:高可靠。

如何保证中间件消息的可靠性?

  1. 消息的传输:通过协议来保证系统间数据解析的正确性
  2. 消息的存储可靠:通过持久化来保证消息的可靠性
 评论