当前位置: 首页 > news >正文

消息队列选型

一、要解决的问题

1.1 异步

分析: 需要根据场景来判断。若整体链路的逻辑中,某些逻辑是不需要强实时的,滞后一段时间是允许的,同时又不会对用户带来不好的体验,那么可以使用MQ完成异步操作。

例如:秒杀场景,是有限资源,同时用户可以接受某些逻辑的延迟,比如生成订单,发送积分等逻辑

1.2 流量控制 - 削峰

分析: 服务器的资源是有限的,同时高峰流量不是一直持续的,且为了保护后端的服务不被打垮,因此,需要对后端服务进入的请求流量进行限制,提高了吞吐量。
缺点:

  1. 由于在网关层将请求放入了消息队列,整体的请求耗时将会变长,降低了用户的体验;
  2. 下游服务都需要将同步请求修改为异步请求,增加了系统的复杂度。

改进方案:若能预估出秒杀服务的处理能力,可采用令牌桶策略,网关在调用秒杀服务之前,先获取令牌桶,获取不到,则直接拒绝请求,这样用户可以快速的得到秒杀结果。
在这里插入图片描述

1.3 解耦

实现服务之间的解耦。已电商的下单为例:

  1. 下单后,会调用支付服务发起支付请求;
  2. 下单后,会调用风控服务发起订单合法性的校验;
  3. 下单后,会调用数仓服务更新数据

如果后续增加新的下游服务,那么订单服务每次都需要调整接口,都需要适配接口,影响开发效率。因此,可以使用MQ来进行解耦。

其他的应用场景:

  1. 实现系统间的观察者模式;
  2. 可以将消息广播给大量的消费者

使用MQ带来的问题:

1. 会带来延迟问题;
2. 数据存在短时间内的不一致问题
3. 系统复杂度上升

二、主流技术解决方案

2.1 MQ选型的考虑因素

1. 是否开源。后续出现bug,可以通过修改源代码来进行解决
2. 社区是否活跃。出现bug,能够找到解决方案;
3. 生态兼容性。与主流技术栈的兼容性,若兼容性不好,则需要耗费精力去和技术栈进行融合。
4. 消息不丢失;
5. 高可用:支持集群模式,保证MQ时时可用
6. 性能。能够满足绝大多数场景的需求。

2.2 主流MQ

2.2.1 Rabbit MQ

特点

  1. 开箱即用,非常轻量化;
  2. 支持非常灵活的路由配置,和其他消息队列不同的是,它在生产者(Producer)和队列(Queue)之间增加了一个Exchange模块,你可以理解为交换机;
  3. 基于elang语言开发,底层是采用了AMQP协议。
  4. 可用性:基于主从架构

核心架构:
在这里插入图片描述
缺点:

  1. 消息堆积处理不好。RabbitMQ认为消息堆积是异常情况,因此大量消息堆积下,性能下降的厉害;
  2. 性能差。每秒钟仅能处理大概几万条消息;
  3. 语言壁垒高

2.2.2 RocketMQ

在这里插入图片描述
RocketMQ是阿里开源的消息中间件,它是一个开源的分布式消息传递和流式数据平台。总共有四大部分:NameServer,Broker,Producer,Consumer

  • NameServer:用来管理brokers以及路由信息。broker服务器启动时会注册到NameServer上,并且两者之间保持心跳监测机制,以此来保证NameServer知道broker的存活状态。而且,每一台NameServer都存有全部的broker集群信息和生产者/消费者客户端的请求信息。
  • Broker:负责管理消息存储分发,主从数据同步,为消息建立索引,提供消息查询等能力。

优点:

  1. 每秒钟大概能处理几十万条消息
  2. 消息零丢失
  3. 高性能:毫秒级的时延
  4. 可用性:分布式架构

2.2.3 Kafka

最初设计的目的是处理海量的日志。整体架构图:
在这里插入图片描述
核心原理: 一个Kafka集群由多个Broker和一个ZK集群组成,Broker作为Kafka节点的服务器。同一个消息主题Topic由多个分区Partition组成,分区物理存储在Broker上。为了负载均衡,同一个Topic的多个分区存储在不同的Broker上;为了提高可靠性,每个分区在不同的Broker上会存在副本。Kafaka里的ZK主要有以下作用:

1. Broker注册:当Broker故障时能及时感知;
2. 元数据管理:存储BrokerTopicPartitions的配置信息,能感知信息的变化;
3. 消费者组管理:维护消费者的订阅信息,偏移量等,实现负载均衡;
4. Leader选举:Kafka中的每个Partition分区都会有一个leader,zk可以负责leader的选举,确保在leader宕机后,集群可以快速选择新的leader进行服务。

Kafka的分区和RockerMQ的队列是类似的。
优缺点:

  1. 异步性能高。底层大量采用了批量和异步的思想;
  2. 时延:毫秒级
  3. 每秒钟可以处理几十万条消息;
  4. 生态兼容性好
  5. 同步收发消息响应时延高。底层原理:当Kafka接收到消息时,并不会立即发送出去,而是等一会攒一批再发送。因此,当每秒钟消息没有那么多时,等的时间就比较长,时延就很长,因此不适合在线业务场景。

2.2.4 pulsar

新兴的MQ产品,采用存储与计算分离的架构。

2.3 各种MQ适用场景

● 若对消息队列功能和性能要求不高,建议选择RabbitMQ,开箱即用且易于维护
● 若处理在线业务,建议选择RockMQ,低延迟和金融级的稳定性是非常nice的;
● 若处理海量消息,例如日志,监控或埋点信息,建议选择Kafaka。

相关文章:

消息队列选型

一、要解决的问题 1.1 异步 分析: 需要根据场景来判断。若整体链路的逻辑中,某些逻辑是不需要强实时的,滞后一段时间是允许的,同时又不会对用户带来不好的体验,那么可以使用MQ完成异步操作。 例如:秒杀场…...

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪,未在虚拟环境中安装包 解决办法1&#xff1…...

力扣127.单词接龙讲解

距离上一次刷题已经过去了.........嗯............我数一一下............整整十天,今天再来解一道算法题 由于这段时间准备简历,没咋写博客。。今天回来了!!!!!!!&…...

latex笔记

双列排版,右端margin不对齐怎么解决 如下图这种情况, 解决方法: 在文档开头引入ragged2e包 \usepackage{ragged2e}然后在子章节的开头添加 \justifying\subsection{camouflaged object detection based on coarse-to-fine strategy} \just…...

秋招算法——AcWing101——拦截导弹

文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法,就是创建链表记录每一个最长下降子序列所对应的节点的链接,然后逐个记录所有结点的访问情况,直接所有节点都被访问过。这个方法不是很好,因为需…...

IDEA不能创建新项目和新模块

问题: IDEA不管是创建新项目还是新模块都创建不成功,会报如下图错误 解决方案: 在电脑设置里搜索 “防火墙和网络保护” ,打开如下图所示 找到你所安装的IDEA,更改设置,选中IDEA 最后,确定&am…...

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…...

LeetCode hot100-39-N

101. 对称二叉树给你一个二叉树的根节点 root , 检查它是否轴对称。做不出来哇,递归一生之敌 普通的对一棵树的递归遍历根本没办法只接比较左子树的左和右子树的右这样来比较,所以这题比较巧妙的是把这棵树当做两棵树一样去遍历比较。 官方…...

NumPy常用操作

目录 一:简介 二:NumPy 常用操作 三:总结 一:简介 是一个开源的Python库,它为Python提供了强大的多维数组对象和用于处理这些数组的函数。NumPy的核心是ndarray,它是一个高效的多维数组容器,用于存储和处理大规模的数据。NumPy还提供了许多数学函数,用于数组之间的操…...

学习笔记——字符串(单模+多模+练习题)

单模匹配 Brute Force算法(暴力) 算法思想 母串和模式串字符依次配对,如果配对成功则继续比较后面位置是否相同,如果出现匹配不成功的位置,则j(模式串当前的位置)从头开始,i&…...

DOT + graphviz 轻松画图

GraphViz:2 DOT语法和相关应用_graphviz dot-CSDN博客 图可视化之Graphviz - 知乎 Graphviz 是由AT&T Research、Lucent Bell实验室开源的可视化图形工具,可以很方便的用来绘制结构化的图形网络。具体地,其使用一种名为dot语言的DSL来编…...

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …...

Unity使用sherpa-onnx实现离线语音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相关dll和lib库拷进Unity&#xff0c;官方示例代码稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…...

Elasticsearch入门基础和集群部署

Elasticsearch入门基础和集群部署 简介基础概念索引&#xff08;Index&#xff09;类型&#xff08;Type&#xff09;&#xff08;逐步弃用&#xff09;文档&#xff08;Document&#xff09;字段&#xff08;Field&#xff09;映射&#xff08;Mapping&#xff09;分片&#x…...

12、24年--信息系统治理——IT治理

主要考选择题,2分左右,案例、论文涉及概率不大,需要认证读课本原文。 1、IT治理基础 IT治理是描述组织采用有效的机制对信息技术和数据资源开发利用,平衡信息化发展和数字化转型过程中的风险,确保实现组织的战略目标的过程。 1.1 IT治理的驱动因素 1)存在很多问题: 信…...

Electron学习笔记(三)

文章目录 相关笔记笔记说明 五、界面1、获取 webContents 实例&#xff08;1&#xff09;通过窗口对象的 webContent 属性获取 webContent 实例&#xff1a;&#xff08;2&#xff09;获取当前激活窗口的 webContents 实例&#xff1a;&#xff08;3&#xff09;在渲染进程中获…...

【Redis】Redis键值存储

大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#xff0c;但是也想日更的人。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa…...

C++系统编程篇——Linux初识(系统安装、权限管理,权限设置)

(1)linux系统的安装 双系统---不推荐虚拟机centos镜像&#xff08;可以使用&#xff09;云服务器/轻量级云服务器&#xff08;强烈推荐&#xff09; ①云服务器&#xff08;用xshell连接&#xff09; ssh root公网IP 然后输入password ①添加用户&#xff1a; addus…...

No Cortex-M SW Device Found

将DIO和CLK管脚调换一下...

提升写作效率的秘密武器:一个资深编辑的AI写作体验

有句话说:“写作是一项你坐在打字机前流血的工作。”而如今,各类生成式软件的涌现似乎打破了写作这一古老的艺术形式壁垒。过去,作家们独自在书桌前冥思苦想,如今,一款名为“玲珑AI工具”的ai写作助手正悄然改变着文案写作行业的创作生态,成为提升写作效率的秘密武器。 在传统…...

2.Pandas在电商数据处理中的核心价值

第1章 Pandas在电商数据处理中应用 1.1 为什么Excel不够用&#xff0c;需要Pandas Pandas是Python里的数据分析核心库。它的名字来自“Panel Data”&#xff08;面板数据&#xff09;&#xff0c;专门处理表格型数据。电商数据分析里&#xff0c;Pandas主要解决三类问题&#x…...

iPhone上跑Transformer太慢?试试EfficientFormer-L1,实测延迟比MobileViT快一倍

iPhone端Transformer模型加速实战&#xff1a;EfficientFormer-L1性能优化解析 移动端AI开发者常面临一个核心矛盾&#xff1a;如何在有限的计算资源下&#xff0c;既保持模型精度又实现实时推理&#xff1f;传统方案往往需要在MobileNet等轻量卷积网络和视觉Transformer&#…...

多层PCB结构设计与过孔工艺全解析

1. 多层PCB内部结构全解析作为一名硬件工程师&#xff0c;第一次拆解十层PCB板时&#xff0c;那种震撼感至今难忘。密密麻麻的过孔像微型城市的地下管网&#xff0c;精密排布的走线堪比神经脉络。今天我就用最直观的立体解剖图&#xff0c;带你看透这些"电子乐高"的搭…...

2025最权威的降AI率网站实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 有的技术方案&#xff0c;其旨在减低文本人工智能生成特征&#xff0c;这就是降AIGC工具。它…...

秒杀系统主库宕机不丢单方案-02-半同步AFTER_SYNC

秒杀系统主库宕机不丢单方案&#xff1a;半同步AFTER_SYNC&#xff08;主从确认再提交&#xff09; 方案概述 半同步复制AFTER_SYNC方案是MySQL 5.7版本引入的高级复制机制&#xff0c;通过主从节点之间的确认机制确保数据不丢失。该方案在主库提交事务前&#xff0c;等待至少一…...

【数据结构】红黑树(Red-Black Tree)

前言在上一篇博客中&#xff0c;我们学习了 AVL 树&#xff0c;为了保持绝对的平衡&#xff0c;它在插入和删除时会疯狂地进行左旋和右旋。但在现代的Java集合框架中&#xff08;如 TreeMap、TreeSet&#xff0c;以及 Java 8 之后的 HashMap&#xff09;&#xff0c;并没有选择…...

开源工具TranslucentTB启动错误0x800401E3完整解决方案

开源工具TranslucentTB启动错误0x800401E3完整解决方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款广受欢迎的Wi…...

编程小白的第一课:用快马AI零代码基础创建个人技能展示网站

作为一个刚接触编程的新手&#xff0c;我最近尝试用InsCode(快马)平台做了一个个人技能展示网站。整个过程比我预想的简单很多&#xff0c;特别适合零基础的同学上手。下面分享我的具体实现过程和心得&#xff1a; 项目规划与结构设计 刚开始完全不懂代码结构&#xff0c;但平台…...

Transformer 从0到1:注意力机制的数学形式——Query, Key, Value 三元组

# Transformer 从0到1&#xff1a;注意力机制的数学形式——Query, Key, Value 三元组## 1. 引言&#xff1a;从序列建模的困境到注意力机制的诞生在深度学习的发展历程中&#xff0c;处理序列数据&#xff08;如文本、音频、时间序列&#xff09;一直是核心挑战之一。早期的循…...

如何用滑模控制(SMC)解决机器人轨迹跟踪中的抖动问题?5个实战技巧分享

如何用滑模控制&#xff08;SMC&#xff09;解决机器人轨迹跟踪中的抖动问题&#xff1f;5个实战技巧分享 当机械臂在执行高精度焊接任务时&#xff0c;末端执行器突然出现5Hz的高频震颤——这种场景对工业机器人工程师而言绝不陌生。滑模控制&#xff08;SMC&#xff09;因其强…...