为什么需要使用消息中间件
具体地说,中间件屏蔽了底层操作系统的复杂性,是程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担,中间件带给应用系统的,不i只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入
单体架构
存在的问题:
分布式架构
存在问题:
好处:
常见的消息中间件
ActiveMQ、RabbitMQ、Kafka、RocketMQ等
消息中间件的使用
消息中间件的本质及设计
它是一种接收数据,接收请求、存储数据、发送数据等功能的技术服务
消息中间件的核心组成部分
什么是协议
所谓协议是指:
网络协议的三要素
1. 语法: http 规定了请求报文和响应报文的格式
2. 语义: 客户端主动发起请求称之为请求
3. 时序: 一个请求对应一个响应 (一定现有请求再有响应,这个是时序)
常见面试题:为什么消息中间件不直接使用 http 协议?
AMQP 协议
AMQP:(全程 Advanced Message Queuing Protocol)是高级消息队列协议。由于摩根大通集团联合其他公司共同设计。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制
特性
MQTT 协议
MQTT 协议(Message Queuing Telemetry Transport)消息队列是IBM开放的一个即时通讯协议,物联网系统架构中的重要组成部分
特点
应用场景
OpenMessage 协议
是最近几年由阿里、雅虎和滴滴出行、Steamalio等公司共同参与与创立的分布式消息中间件、流处理等领域的应用开发标准
特点
Kafka 协议
Kafka 协议是基于 TCP/IP 的二进制协议,消息内部是通过长度来分割,由一些基本数据类型组成
特点
持久化
简单来说就是将数据存入磁盘,而不是存在内存中随服务重启断开而消失,使数据能够永久保存
常用的持久化方式
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
---|---|---|---|---|
文件存储 | 支持 | 支持 | 支持 | 支持 |
数据库 | 支持 | / | / | / |
MQ 消息队列有如下几个角色
一般获取数据的方式无外乎"推"(push)或者"拉"(pull)两者方式,典型的就是 git 就有推拉机制,我们发送的 http 请求就是一种典型的拉取数据库数据返回的过程。而消息队列 MQ 是一种推送的过程,这些推机制会适用到很多的业务场景,也有很多对应推机制策略
消息分发策略的机制对比
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
---|---|---|---|---|
发布订阅 | 支持 | 支持 | 支持 | 支持 |
轮询分发 | 支持 | 支持 | 支持 | / |
公平分发 | / | 支持 | 支持 | / |
重发 | 支持 | 支持 | / | 支持 |
消息拉取 | / | 支持 | 支持 | 支持 |
什么是高可用机制
高可用:是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能状态的能力
当业务量增加时,请求也过大,一台消息中间件服务器会触及硬件(CPU、内存、磁盘)的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署,来达到高可用的目的
集群模式1 - Master-Slave 主从共享数据的部署方式
解析:生产者将消费者发送到 Master 节点,所有的都连接这个消息队列共享这块数据区域,Master 节点负责写入,一旦 Master 挂掉,slave 节点继续服务。从而形成高可用
集群模式2 - Master-Slave 主从同步部署方式
解析:这种模式写入消息同样在 Master 主节点上,但是主节点会同步数据到 slave 节点形成副本,和 zookeeper 或者 redis 总从机制很类同。这样可以达到负载均衡的效果,如果消费者有多个这样就可以去不同的节点进行消费,以为消息的拷贝和同步暂用很大的带宽和网络资源
集群模式3- Master-Slave 多主集群同步部署方式
解析:和上面的区别不是很大,但是它的写入可以是任意节点去写入
集群模式4- Master-Slave 多主集群转发部署模式
解析:如果你插入的数据是 broker-1中,元数据信息会存储数据的相关描述和记录存放的位置(队列)
它会对描述信息,也就是算数据信息进行同步,如果消费者在broker-2进行消费,发现自己没有对应的消息,可以从对应的元数据信息中去查询,然后返回对应的消息信息,场景:比如买火车票或者黄牛买演唱会门票,假如第一个黄牛有顾客说要买演唱会门票,如果该黄牛没有则他回去找另外的黄牛询问,如果有就返回
集群模式5 Master-Slave与 Broker-Cluster组合的方案
解析:实现多主多从的热备机制来完成消息的高可用以及数据的热备机制,在生产规模达到一定的阶段的时候,这种使用的频率比较高
小结:要么消息共享,要么消息同步,要么元数据共享
高可靠机制
高可靠机制:系统可以无故障低持续运行,比如一个系统突然崩溃,报错,异常等等并不能影响线上业务的正常运行,出错的几率极低,就称之为:高可靠
在高并发的业务场景中,如果不能保证系统的高可靠,那造成的隐患和损失是非常严重的
保证消息中间件的可靠性可以从以下两方面考虑