消息队列和分布式消息队列

news2024/11/29 2:44:33

文章目录

  • 分析系统现状不足
  • 中间件
  • 消息队列
    • 什么是消息队列?
    • 应用场景
    • 消息队列的模型
    • 为什么不直接传输,而要用消息队列?
    • 为什么要用消息队列?
    • 消息队列的缺点?
  • 分布式消息队列
    • 分布式消息队列的优势?
    • 消息队列应用场景
    • 主流分布式消息队列选型

分析系统现状不足

现状:目前的异步是通过本地的线程池实现的
1) 无法集中限制(分布式),只能单机限制
解决方案:在一个集中的地方去管理下发任务
2) 任务由于是放在内存中执行的,可能会丢失
解决方案:把任务放在一个可以持久化存储的硬盘
3)优化:如果你的系统功能越来越多,长耗时任务越来越多,系统会越来越复杂
服务拆分(应用解耦):可以把长耗时,消耗很多的任务把它单独抽成一个程序,不要影响主业务
解决方案:可以有一个中间人,让中间人帮我们去连接两个系统(比如核心系统和智能生成业务)

中间件

连接多个系统,帮助多个系统紧密协作的技术(或者组件)
比如:Redis,消息队列,分布式存储Etcd
image.png

消息队列

什么是消息队列?

存储消息的队列。
存储:存数据
消息:某种数据结构。比如字符串,对象,二进制数据,JSON等等
队列:先进先出的数据结构

应用场景

在多个不同的系统,应用之间实现消息的传输(也可以存储),不需要考虑传输应用的编程语言,系统,框架等等

消息队列的模型

生产者,消费者,消息,消息队列

为什么不直接传输,而要用消息队列?

生产者不用关心你的消费者要不要消费,什么时候才消费,我只需要把东西给消费队列,我的工作就算完成了,生产者和消费者实现了解耦,互不影响

为什么要用消息队列?

1)异步处理
生产者发送完消息之后,可以继续去忙别的,消费者想什么时候消费都可以,不会产生阻塞
2)削峰填谷
先把用户的请求放到消息队列中,消费者可以按照自己的需求,慢慢去取
原本:12 点时来了 10 万个请求,原本情况下,10万个请求都在系统内部立刻处理,很快系统压力过大就宕机了。
现在:把这 10万个请求放到消息队列中,处理系统以自己的恒定速率(比如每秒 1 个)慢慢执行,从而保护系统、稳定处理

消息队列的缺点?

增加成本(开发,维护,部署),消息丢失,顺序性,重复消费,数据一致性(分布式系统需要考虑)

分布式消息队列

分布式消息队列的优势?

1)数据持久化:可以把消息集中存储到硬盘里,服务器重启就不会丢失
2)可扩展性:可以根据需求,随时增加(或减少)节点,继续保持稳定的服务
3)应用解耦:可以连接各个不同的语言,框架开发的系统,让这些系统能够灵活传输读取数据
应用解耦的优点:
以前,把所有功能放到同一个项目中,调用多个子功能时,一个环节出错,系统就整体出错
image.png
使用消息队列进行解耦:

  1. 一个系统挂了,不影响另一个系统
  2. 系统挂了并恢复后,仍然可以取出消息,继续执行业务
  3. 只要发送消息到队列,就可以立即返回,不用同步调用所有系统,性能更高image.png

4)发布订阅
如果一个非常大的系统要给其他子系统发送通知,最简单直接的方式是大系统直接依次调用子系统
问题:

  1. 每次发通知都要调用很多系统,很麻烦,有可能失败
  2. 新出现的项目无法得到通知

image.png
解决方案:大的核心系统始终往一个地方(消息队列)去发消息,其他的系统都去订阅这个消息队列(读取消息队列中的消息)
image.png打个比喻,老板(发布者)要通知一件事情给员工(消费者),方式1 :给员工依次发通知;方式2 :建个群(消息队列)发通知。方式一不仅非常麻烦耗时,有时候网不好(服务器压力大时)还发不出去。方式2呢就是老板只需要把消息发送到群里(消息队列),员工打开查看即可。

消息队列应用场景

  1. 耗时的场景(异步)
  2. 高并发场景(异步,削峰填谷)
  3. 分布式系统协作(跨团队,跨业务协作,应用解耦)
  4. 强稳定性的业务(比如金融业务,持久化,可靠性,削峰填谷)

主流分布式消息队列选型

主流技术

  1. activemq
  2. rabbitmq
  3. kafka
  4. rocketmq
  5. zeromq
  6. pulsar(云原生)
  7. Apache InLong(Tube)

技术对比
技术选型指标:

  • 吞吐量:IO,高并发
  • 时效性:类似延迟,消息的发送,到达时间
  • 可用性:系统可用的比率
  • 可靠性:消息不丢失,功能正常完成
技术名称吞吐量时效性可用性可靠性优势应用场景
activemq万级简单易学中小型企业、项目
rabbitmq万级极高(微秒)生态好(基本什么语言都支持)、时效性高、易学适合绝大多数分布式的应用,这也是先学他的原因
kafka十万级高(毫秒以内)极高极高吞吐量大、可靠性、可用性,强大的数据流处理能力适用于 大规模处理数据的场景,比如构建日志收集系统、实时数据流传输、事件流收集传输
rocketmq十万级高(ms)极高极高吞吐量大、可靠性、可用性,可扩展性适用于 金融 、电商等对可靠性要求较高的场景,适合 大规模 的消息处理。
pulsar十万级高(ms)极高极高可靠性、可用性很高,基于发布订阅模型,新兴(技术架构先进)适合大规模、高并发的分布式系统(云原生)。适合实时分析、事件流处理、IoT 数据处理等。

由此看来RabbitMQ不仅应用广泛,而且易于学习,下期分享RabbitMQ入门实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1599110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC远程通信:实现工业自动化的关键技术

在当今高度信息化和自动化的时代,工业领域对于实时数据的准确传输和迅速响应提出了更高要求。而PLC(可编程逻辑控制器)远程通信技术,正是能够实现工业自动化的关键技术之一。 首先,我们需要了解PLC远程通信的原理。PLC作为一种专用计算机控制…

设计模式代码实战-组合模式

1、问题描述 小明所在的公司内部有多个部门,每个部门下可能有不同的子部门或者员工。 请你设计一个组合模式来管理这些部门和员工,实现对公司组织结构的统一操作。部门和员工都具有一个通用的接口,可以获取他们的名称以及展示公司组织结构。…

学习BOM

目录 前言: 1. BOM组成: 1.1Window 对象: 1.1Location 对象: 1.2Navigator 对象: 1.2.1 navigator 对象包含了关于浏览器的信息包括: 1.3History 对象: 1.4常用的history的方法和属性: 1.4Document…

氟化钙与盐酸反应

结论:可以反应 参考链接 为什么盐酸,硝酸不能溶解氟化钙呢?氢氟酸可是弱酸啊。。。_百度知道 (baidu.com)https://zhidao.baidu.com/question/421110040.html特此记录 anlog 2024年4月16日

中医圆运动规律

目录 人体圆运动营气在十二经脉的运行规律子午流注与圆运动升降结合图 人体圆运动 营气在十二经脉的运行规律 营气在脉中,卫气在脉外 这个顺序也是子午流注的顺序 子午流注与圆运动升降结合图

【论文阅读02】一种基于双通道的水下图像增强卷积神经网络

来源:海洋论坛▏一种基于双通道的水下图像增强卷积神经网络 当前不会的 一、背景: 水下图像增强方法包含有无水下成像模型的水下图像增强方法、基于水下成像模型的水下图像恢复方法、水下成像模型与深度学习相结合的方法以及完全采用深度学习的方…

数据结构与算法——22.哈希算法

这篇文章我们来讲一下哈希表中较为关键的部分——哈希算法 目录 1.哈希算法的介绍 2.hash算法的使用 2.1 Object.hashCode 2.2 String.hashCode 3.关于哈希表及哈希算法的一些思考 1.哈希算法的介绍 问题:什么是哈希算法?哈希算法有哪些&#xff…

【算法一则】做算法学数据结构 - 简化路径 - 【栈】

目录 题目栈代码题解 题目 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.)表…

兔C_Java集:Java 语言简介

文章目录 1. Java简介历史简介问:Oracle 为什么收购 SUN 公司关于三个分支语言特性: 2. JDK 的安装与配置安装的官网链接配置环境变量 3. 第一个Java程序4. 第一个程序解释关于类的定义 5. CLASSPATH命令自动配置CLASSPATH 与 JVM 的关系CLASSPATH 的手动…

OM3 与 OM4:主要区别和实际应用

OM3 和 OM4 都是激光优化的多模光纤,具有 50/125μm 光纤芯,专为满足 ISO 11801 标准而开发。它们在光纤连接器和应用场景上具有相似性,这往往会导致用户之间的混淆。这些光纤主要设计用于数据中心、局域网 (LAN) 和其…

500以内的不入耳运动耳机推荐,首推五大业内顶级优品

不入耳式运动耳机因其独特的佩戴方式和设计,能够在运动过程中保持对周围环境的警觉,避免因音乐沉浸而忽视潜在的安全隐患,同时它们还能有效减少对耳道的压迫,让运动更加舒适自在,接下来,就让我为大家推荐一…

MAC系统安装PHP、Java、Python、mysql、Composer等环境无权限问题的详细操作方法说明。

本篇文章主要讲解MAC系统安装PHP、Java、Python、mysql、Composer等环境无权限问题的详细操作方法说明。通过本篇文章你可以快速掌握brew安装相对应环境的能力。 作者:任聪聪 日期:2024年4月12日 一、brew介绍及安装说明 官网地址:https://b…

分布式数据库Polardb-X架构及特点

PolarDB-X架构 计算节点(Compute Node,CN)是系统的入口,采用无状态设计的sql引擎提供分布式路由和计算,包括SQL解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务2PC协调…

VLAN Mapping原理描述

基本原理 路由器收到带Tag的数据报文后,根据配置的VLAN Mapping方式,决定替换外层Tag中的VLAN ID或优先级;然后进入MAC地址学习阶段,根据源MAC地址映射后的VLAN ID刷新MAC地址表项;根据目的MAC映射后VLAN ID查找MAC地…

【电控笔记2.3】速度回路+系统延迟

2.3.1速度回路pi控制器设计 pi伯德图近似设计(不考虑延时理想情况下) Tl:负载转矩 PI控制器的转折频率:Ki/Kp

用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

在实际项目中,从Kafka到HDFS的数据是每天自动生成一个文件,按日期区分。而且Kafka在不断生产数据,因此看看kettle是不是需要时刻运行?能不能按照每日自动生成数据文件? 为了测试实际项目中的海豚定时调度从Kafka到HDF…

Django中的定时任务与后台任务队列的实践【第164篇—Django】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Web开发中,处理定时任务和后台任务队列是很常见的需求。Django作为一个功能强…

隐私保护?还是安全漏洞?邮箱分身双重身份及创建攻略解析!

很多人只知道微信、QQ等应用分身,对于邮箱分身并不是很了解。邮箱分身和他们的不同点在于我们直接在原有邮箱的基础上创立新的虚拟邮箱地址,并且密码一致,在我们需要运营多个社交媒体账号或者管理多个项目的情况下,邮箱分身是一个…

为什么物联网安全性引发了对身份盗窃的担忧?

物联网是连接互联网的设备和传感器的统称,它代表了一个新的技术时代。这种硬件利用了连接性、硬件、小型化、云计算、数据处理、集成等方面的进步,为消费者和企业带来了好处,同样的物联网方面的威胁也是不断的在增加。 物联网是连接互联网的设…

【面试经典 150 | 链表】分隔链表

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…