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

文章目录

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

分析系统现状不足

现状:目前的异步是通过本地的线程池实现的
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.mzph.cn/news/820243.shtml

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

相关文章

LeetCode55题:跳跃游戏(原创)

【题目描述】 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1&am…

Oracle 19c补丁升级(Windows)

文章目录 一、打补丁前备份检查1、补丁包获取2、备份数据包以及数据库软件3、检查OPatch版本 二、补丁升级1、更新OPatch2、关闭监听以及服务3、补丁升级过程4、启动监听以及服务 三、数据库补丁应用 一、打补丁前备份检查 1、补丁包获取 补丁包: 百度网盘链接&am…

甘特图使用小诀窍,项目把控游刃有余

在项目管理过程中,掌握甘特图的使用技巧可以让你事半功倍,高效规划和监控项目进度。作为一种视觉化的工具,甘特图直观地展示了任务的开始和结束时间、持续时间以及任务之间的依赖关系,有助于预测和优化资源分配。掌握以下几个小诀窍,你就能驾驭甘特图,游刃有余地把控整个项目。…

运营商三要素验证API接口怎么对接

运营商三要素验证API接口又叫手机三要素验证API接口、运营商实名认证接口,这个接口是验证姓名、身份证号、手机号三者是否一致,返回验证结果,如果一致则说明三者信息匹配,可以有效确认当前注册用户的身份信息,那么运营…

山姆·奥特曼是如何成为亿万富豪的?

2017年夏天,Superhuman公司首席执行官拉胡尔沃拉(Rahul Vohra)开始疯狂向投资者一一发消息,缘由是他的初创公司尝试了谷歌浏览器Chrome的一项即将推出的更新。由于一个看似无害的代码更改,Superhuman的智能电子邮件服务…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

vs配置opencv找不到opencv_world480d.dll的问题

如下图所示 博主附加依赖项加了,但是运行程序的时候就是跳出来找不到opencv_world480d.dll。 最后是在电脑环境变量中添加了opencv安装后cv15文件夹中的bin目录的路径得以解决。 【此电脑】→【属性】→【高级系统设置】→【环境变量】→【系统变量】→【PATH】…

【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一

目录 引言 1 -> C语言传统的处理错误的方式 2 -> C异常概念 3 -> 异常的使用 3.1 -> 异常的抛出和捕获 3.2 -> 异常的重新抛出 3.3 -> 异常规范 4 -> 自定义异常体系 5 -> C标准库的异常体系 6 -> 异常的优缺点 引言 在C编程中&#xff…

冯喜运:4.16中东对抗风暴下,黄金原油市场何去何从?

黄金行情走势分析:4小时图布林道开始收口,昨日下探至下轨附近,也是此前的起涨低点2320启稳上升,十字K线配合单阳拉起,重新去摸高上轨。目前4小时图处于摸高当中。周线和日线留意多空转换,摸高之后是强势延续…

Codeforces Round 926 (Div. 2) ---- E. Sasha and the Happy Tree Cutting ----题解

E. Sasha and the Happy Tree Cutting: 题目大意: 思路解析: 现在有一颗树,然后给出了k对路径,然后要求路径上至少有一个结点是被染色了的,如果这k对路径没有共用边,那我们至少需要染色k条边。…

Docker安装及开启远程访问

这几天有人问我docker是怎么开启远程服务的? 正好之前我做过这件事情,并且写了相关的笔记,现在整理为一篇博客发出来。 安装Docker 首先更新一下自己的yum版本 yum update安装一下所需要的软件包 yum install -y yum-utils device-mappe…

MySQL进阶-----limit、count、update优化

目录 前言 一、limit优化 1. 未优化案例 2.优化后案例 二、count优化 count用法 三、update优化 1.锁行情况(有索引) 2.锁表情况(无索引) 前言 上一期我们学习了order by优化和group by优化,本期我们就继续学习…

Pytorch-张量形状操作

😆😆😆感谢大家的观看😆😆 🌹 reshape 函数 transpose 和 permute 函数 view 和 contigous 函数 squeeze 和 unsqueeze 函数 在搭建网络模型时,掌握对张量形状的操作是非常重要的&#xff…

AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3,贾佳亚团队新作开源:识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…

【VIC水文模型】模型原理简介

VIC水文模型原理 VIC水文模型概述土壤(Soil)积雪(Snow)动态湖和湿地模型动态湖(Lake Model)湿地模型(Wetland Model) 1 VIC模型陆面水文过程(产流过程)1.1 能…

PyQt5设计师QtDesigner控件箱控件介绍及讲解

QtDesigner Qt Designer 是一个由Qt官方提供的图形用户界面设计工具,旨在帮助开发者快速、方便地设计和布局Qt应用程序的用户界面。Qt Designer提供了一个直观的可视化界面,开发者可以通过拖放、设置属性等方式设计界面,而无需编写繁琐的布局…

007 springboot整合mybatis-plus 增删改查 ModelAndView jsp 分页

文章目录 MybatisplusConfig.javaReceiveAddressController.javaReceiveAddress.javaReceiveAddressMapper.javaReceiveAddressServiceImpl.javaIReceiveAddressService.javaServerResult.javaServletInitializer.javaSpringbootDemoApplication.javareceive_address.sqlReceiv…

【canvas】canvas基础使用(九):文本绘制

简言 canvas除了能够绘制图形外,也可以绘制文本。 绘制文本 fillText() 填充文本 CanvasRenderingContext2D 对象的方法 fillText() 是 Canvas 2D API 的一部分,它在指定的坐标上绘制文本字符串,并使用当前的 fillStyle 对其进行填充。存…

论文解读:FREE LUNCH FOR FEW-SHOT LEARNING: DISTRIBUTION CALIBRATION

文章汇总 问题 学习到的模型很容易因为只有少数训练样本形成的有偏分布而变得过拟合。 动机 我们假设特征表示中的每个维度都遵循高斯分布,因此分布的均值和方差可以借鉴类似类的均值和方差,这些类的统计量可以通过足够数量的样本得到更好的估计。 …

11.盛最多水的容器(Java,双指针)

目录 题目描述:输入:输出:代码实现: 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同…