IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【RabbitMQ】RabbitMQ 学习教程(零)认识中间件 -> 正文阅读

[大数据]【RabbitMQ】RabbitMQ 学习教程(零)认识中间件

中间件

“中间件”对于初学者而言,这是一个很抽象的概念。那么,到底什么是中间件呢?我其实,我也不知道,但我可以帮你去理解它。

简单来说,就一个公式:中间件 = 平台 + 通信

那么,如何来解读这个公式呢?

一般,一个平台是包含多个子系统,而用来开发这些子系统的编程语言可能是多种(Java、Go、C++),但这些子系统通过中间件、操作系统进行通信(如:一个电商平台,订单系统是由 Java 语言开发,而支付系统是由 Go 语言开发。当一个用户下完单准备支付时,此时,支付系统是要和订单系统进行通信的,订单系统要告诉支付系统该支付多少钱嘛)

子系统通过中间件进行数据通信:

在这里插入图片描述
中间件的特点

那么,从上面的描述来看,中间件有哪些特点呢:

  1. 遵循某种规范、协议,这样,彼此双方才能互通(通信能力)
  2. 具有存储功能,能持久化到磁盘(持久性、可靠性)
  3. 跨平台(微服务 订单系统用 Java 语言,支付系统用 Go 语言,但这两个系统要进行交互)
  4. 一台机器性能达到物理极限,能支持集群(高可用)

常用的中间件:

  1. MYSQL
  2. MQ
  3. REDIS
  4. NGINX

中间件的优势

使用中间件,有什么优势?

  1. 中间件屏蔽了操作系统的复杂性(如:MySql 数据库的持久化。你并不需要知道它是如何持久化到磁盘的,它都已经帮你做好了)
  2. 屏蔽软件架构的局限性(平台中的子系统可以使用多种开发语言。如: Java、Go)

中间件的分类

常用的中间分为以下几类:消息中间件、负载均衡中间件、缓存中间件、数据库中间件

每一类中间对应的产品如下:

分布式消息中间件负载均衡中间件缓存中间件数据库中间件
RabbitMQ:滴滴、美团公司使用;和Spring 是同一家公司开发出来的,Spring 框架支持NginxRedisMyCat
RocketMQKeepAliveMemCacheShardingJdbc
Kafka:传输二进制,最接近底层,性能最高CDN
ActiveMQ:老技术了LVS负载均衡软件

这里重点讲述的是消息中间件哈。

消息中间件

什么是消息中间件?

消息中间件 又称 消息队列,简称 MQ。指:利用高效、可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

消息中间件一般有两种传递模式:点对点模式;发布/订阅模式

  • 点对点:基于队列。消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能
  • 发布/订阅(一对多广播):消息发布者将消息发布到某个主题 topic,而消息订阅者从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递

目前,比较主流的消息中间件有:RabbitMQ、Kafka、ActiveMQ、RocketMQ。面向消息的中间件提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送。即:应用程序彼此间不直接通信,而是与作为中介的消息队列通信。

消息中间件的工作流程

消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件的系统中,不同对象之间通过传递消息来激活对方的时间,已完成相应的操作。

发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽各种平台及协议之间的特性,实现应用程序之间的协同。其优点在于:能够在客户和服务器之间提供同步、异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发。

如下图,应用程序 A 与应用程序 B 通过消息中间件的应用程序编程接口(API,Application Program Interface)发送消息进行通信:
在这里插入图片描述
应用程序 A 通过 API 将消息发送给消息中间件,而消息中间件将消息路由给应用程序 B。这样,消息就可存在于完全不同的计算机上。消息中间件负责处理网络通信,如果网络连接不可用,消息中渐渐会存储消息,直至连接变得可用,再将消息转发给应用程序 B。

灵活性的另一方面体现在:当应用程序 A 发送消息时,应用程序 B 甚至可以处于不运行状态,消息中间件将保留这份消息,直至应用程序 B 开始执行并消费消息。这样,还防止了应用程序 A 因为等待应用程序 B 消费消息而出现阻塞。

消息中间件的核心架构

  1. 协议:数据的存储、分发遵循着某种协议(AMQP 协议,架构在 TCP/IP 之上)。为什么不用 HTTP 协议?HTTP 协议请求头/响应头复杂,包含了 Cookie、状态码、响应码等附加功能,对于消息而言,并不需要这么复杂,只是进行着数据的传递、存储、分发,它一定追求高性能,尽量地简洁、快速;HTTP 协议是短连接,在实际的交互过程中,一个请求很有可能中断,中断后不会进行持久化,就会造成请求的丢失,这不利于消息中间件的业务场景。因为消息中间件是一个长期获取消息的过程,出现问题/故障,就要对数据/消息进行持久化,目的是为了保证消息/数据的高可用和稳健的运行。
  2. 持久化:以文件的形式持久化到磁盘
  3. 分发策略:
  4. 高可用、高可靠

协议

关于消息中间件的协议有: AMQP 协议、 MQTT 协议、OpenMessage 协议、Kafka 协议

  • AMQP 协议:高级消息队列协议,由 Erlang 语言实现(底层由 C 语言开发,性能极高),RabbitMQ 是由 Erlang 语言开发的

    它的特点如下:

    1. 支持分布式事务
    2. 支持消息的持久化
    3. 高性能、高可靠
  • MQTT:即时通讯协议,物联网系统架构的重要组成部分

    它的特点如下:

    1. 轻量、结构简单
    2. 不支持事务,传输快
    3. 不支持持久化
  • OpenMessage:阿里、雅虎等公司创立的分布式消息中间件、流处理等领域的应用开发标准

    它的特点如下:

    1. 结构简单
    2. 解析速度快
    3. 支持事务、持久化
  • Kafka:基于 TCP/IP 的二进制协议,消息内容是通过长度来分割,由一些基本数据类型组成

    它的特点如下:

    1. 结构简单
    2. 解析速度快
    3. 不支持事务、
    4. 支持持久化

消息中间件的分发策略

分发策略的机制和对比:

?ActiveMQRabbitMQKafkaRocketMQ
发布订阅支持支持支持支持
轮询分发支持支持支持?
公平分发?支持支持?
重发支持支持?支持
消息拉取?支持支持支持

以上内容,大家留下个印象就行了哈。如果是刚入手,理解起来有点困难,但没关系,不影响后续的学习哈~~

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:24:49  更:2021-08-28 09:25:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:38:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码