RabbitMQ(一)【概述】

      最后更新:2022-07-24 07:19:22 手机定位技术交流文章

      为什么使用中间消息

      具体地说,中间部分屏蔽了基础操作系统的复杂性,程序开发者面临一个简单的统一的开发环境,减少程序设计的复杂性,集中精力做生意,不需要在不同的系统软件上重复过程。这大大降低了技术负担,中间部分是应用系统,它不仅仅是简单的发展,缩短了发展周期,它还减少了系统维护、操作和管理的工作量,它还降低了计算机的总成本

      单体架构

      存在的问题:

      • 耦合度太高
      • 运维成本过高
      • 不宜维护
      • 服务器的成本高
      • 提高建筑的复杂性将增加

      分布式架构

      存在问题:

      • 学习花费太多,技术堆积太多
      • 运营和服务器成本上升
      • 人员的成本增高
      • 项目的负载度上升
      • 遇到的错误和容许也会翻倍
      • 占用服务器端口和通信选项的高成本
      • 安全考虑和限制可能迫使选择与RMI/MQ有关的服务器通信

      好处:

      • 服务系统的独立性、服务器资源的减少和硬件成本的降低
      • 独立的系统维护和部署,减少耦合,互连性
      • 系统框架和技术堆栈的选择可灵活
      • 灵活部署不会使平台因部署而瘫痪或失效

      常见的消息中间件

      ActiveMQ, RabbitMQ, Kafka, RocketMQ等。

      消息中间件的使用

      1. 使用可靠消息传输机制的系统和系统直接通信
      2. 通过提供消息传输和消息队列机制,可以扩展分布式系统环境中的进程之间的通信

      在这里插入图片描述

      在这里插入图片描述

      消息中介的本质和设计

      它是接收数据、接收请求、存储数据、发送数据等技术服务。

      消息中介的核心组成部分

      1. 消息的协议
      2. 消息的持久化机制
      3. 消息的分发策略
      4. 消息的高可用性和可靠性
      5. 消息的容错机制

      一、消息队列概述

      1.1消息队列协议

      什么是协议

      在这里插入图片描述

      所谓协议是指:

      • 计算机底层操作系统和应用程序通讯时共同遵守的一组约定,只有遵循共同的约定和规范,系统和底层操作系统之间才能相互交流
      • 与一般的网络应用不同,它主要负责接收和传输数据,因此性能相对较高
      • 协议必须严格遵守数据格式和计算机间数据交换的标准

      网络协议的三要素

      • 语法:用户数据和控制信息的结构和格式,以及数据出现的顺序
      • 语义:语义解释了控制信息的每个部分的意义,说明了发送任何控制信息的必要性,以及要完成哪些行动和反应
      • 时间序列:时间序列是事件序列的详细描述

      常见问题:为什么消息中间人不直接使用 http 协议?

      • 因为 http 请求项和响应项更复杂,包括cookie、数据加密和解密、状态代码、响应代码等。但有一个信息,并不需要这么复杂,也灭有这个必要性,它实际上负责数据传输、存储和分发同时。必须追求高性能。尽量简洁,快速
      • 在大多数情况下,http是一个短的链接,实际上整个过程,请求答复可能会被中断,停顿后不会持续,会造成请求的丢失。这不利于消息中介商的业务模式,因为信息中介可能是获取信息的长期过程,当数据或消息持续存在时会出现问题和故障等。目的在于确保消息和数据的高可靠性和鲁棒运行

      AMQP 协议

      AMQP:(Full Advanced Message Queuing Protocol)是一个先进的消息队列协议。它由摩根公司和其他公司共同设计。这是一个标准的高级消息队列协议,提供统一消息服务。是一个开放的应用程序层协议标准,为面向消息的中间件设计。基于此协议的客户端和消息中介人可以发送消息,不接受客户/中介要求,例如不同的产品、不同的开发语言

      特性

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

      MQTT 协议

      MQTT协议(Message Queuing Telemetry Transport) 消息队列是一个开放的即时消息协议,是IoT系统架构的重要组成部分

      特点

      • 轻量
      • 结构简单
      • 传输快,不支持事务
      • 没有持久化技术

      应用场景

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

      OpenMessage协议

      近年来,包括阿里、雅虎、D-Bus和Steamalio在内的多家公司合作开发分布式消息中心和流处理标准

      特点

      • 结构简单
      • 解析速度快
      • 支持服务及可持续发展设计

      Kafka 协议

      Kafka协议是一个基于TCP/IP的二进制协议,消息由长度分开,由一些基本数据类型组成

      特点

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

      1.2消息队列持久性

      持久化

      它只是在重新启动服务时将数据存储在磁盘上,而不是在内存中消失,从而使数据永久存储

      在这里插入图片描述

      常用的持久化方式

      ActiveMQ RabbitMQ Kafka RocketMQ
      文件存储 支持 支持 支持 支持
      数据库 支持 / / /

      1.3消息分配策略

      MQ消息队列有多个角色

      • 生产者
      • 存储消息
      • 消费者

      一般获取数据的方式无外乎"推"(push)或者"拉"(pull)两者方式,通常,Git有一个拉动机制。我们发送的http请求是检索和返回数据库数据的典型过程。消息队列MQ是一个传送的过程,这些推力机制可以适用于许多商业场景,还有许多反压力机制的策略

      消息分配策略的机制比较

      ActiveMQ RabbitMQ Kafka RocketMQ
      发布订阅 支持 支持 支持 支持
      轮询分发 支持 支持 支持 /
      公平分发 / 支持 支持 /
      重发 支持 支持 / 支持
      消息拉取 / 支持 支持 支持

      1.4消息队列高可用性和高可靠性

      什么是高可用机制

      高可用性是指产品能在特定条件下和特定时间或时间执行特定功能的能力。

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

      类别模式1-对类别数据共享的 Master-Slave部署

      在这里插入图片描述

      解析:生产者将消费者发送到 Master 节点,所有的都连接这个消息队列共享这块数据区域,Master 节点负责写入,一旦 Master 挂掉,slave 节点继续服务。从而形成高可用

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

      在这里插入图片描述

      解析:这种模式写入消息同样在 Master 主节点上,但主节点将将数据同步到奴隶节点以形成复制,动物园keeper或 redis一般从机制上类似.这样可以达到负荷平衡的效果,如果消费者有多个,他们可以到不同的地点去消费,考虑到复制和同步消息暂时使用大带宽和网络资源

      集群模型3-多级集群的 Master-Slave同步部署方法

      在这里插入图片描述

      分析:与上述不同之处并不大,但可以在任何节点上写

      集群模式4- Master-Slave 多主集群转发部署模式

      在这里插入图片描述

      分析:如果插入的数据是 broker-1中,元数据信息存储数据的相应描述,并记录存储位置(列)

      它会对描述信息,即,计算数据信息以同步,如果消费者在经纪人2处消费,发现你没有相应的消息,你可以从相应的元数据信息中查询,然后返回相应的消息信息,场景: 例如,买火车票或在黄溪举办音乐会的票,如果第一个黄牛有一个顾客说他想买一张音乐会票,如果牛没有,他就会回到另一个牛那里去问,如果有就返回

      集群模型5 Master-Slave和 Broker-Cluster组合

      在这里插入图片描述

      解析:实现多主多从的热备机制来完成消息的高可用以及数据的热备机制,在生产规模达到一定的阶段的时候,这种使用的频率比较高

      结论:消息共享、消息同步或元数据共享

      高可靠机制

      高可靠机制:系统可以无故障低持续运行,比如一个系统突然崩溃,报错,异常等等并不能影响线上业务的正常运行,出错的几率极低,就称之为:高可靠

      在高耦合业务场景中,未能确保系统高可靠性造成的风险和损失非常严重

      确保消息中介人可靠可从两个方面考虑

      • 消息传输:通过协议确保系统间数据分析的准确性
      • 可靠消息存储:通过持久性确保消息可靠性

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30577.html

          热门文章

          文章分类