消息队列选型

一、要解决的问题

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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

x264 帧类型代价计算原理:slicetype_frame_cost 函数分析

slicetype_frame_cost 函数 函数功能 这个函数的核心是计算编码一系列帧(从 p0 到p1,以 b 为当前帧)的代价 cost,并根据这个代价 cost来辅助帧类型决策。它考虑了运动搜索的结果、帧间和帧内预测的成本,并且可以并行处理以提高效率。该函数在帧类型决策、MBtree 分析、场…

消防物资存储|基于SSM+vue的消防物资存储系统的设计与实现(源码+数据库+文档)

消防物资存储系统 目录 基于SSM+vue的消防物资存储系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1用户功能模块 2 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

天锐绿盾 | 如何防止电脑内文件遭到泄露?

天锐绿盾是一款专为企业设计的数据防泄漏软件系统,它通过一系列综合性的安全措施来有效防止电脑内文件遭到泄露。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾防止文件泄露的主要功能和方法&a…

酒店刷脸设备遭批量扔进「垃圾桶」,为啥所有人都叫好……

最近,不知道柴油们有没有关注到这么一个热点,就是大量酒店曾经动辄几千上万买来的刷脸设备,大批量的被挂在二手平台1折甩卖了…… 昔日花大几千,甚至上万买来的设备,如今年低至三四百?打折打到脚底板&#…

8.2 GOOGLE(SAML应用)登录联携AWS用户池(Amazon Cognito)

GOOGLE(SAML应用)登录联携AWS用户池(Amazon Cognito) 目录一、参考资料二、创建和配置AWS用户池1. 创建用户池2. 在用户池中创建联合身份提供商3. 在用户池中创建应用程序集成 三、创建和配置GOOGLE SAML应用1. 创建GOOGLE SAML应…

nodemon运行ts文件

https://juejin.cn/post/7035637086451400734 nodemon经常用来调试js文件,大家都是知道的,但是用nodemon来调试ts文件,大家试过吗? 如果直接运行nodemon index.ts是会报错的。 ts 复制代码 //index.ts console.log(1) 需要全局…

Find My OBD|苹果Find My技术与OBD结合,智能防丢,全球定位

OBD是英文On-Board Diagnostics的缩写,中文翻译为“车载自动诊断系统”。这个系统将从发动机的运行状况随时监控汽车是否尾气超标,一旦超标,会马上发出警示。当系统出现故障时,故障(MIL)灯或检查发动机(Check Engine)警告灯亮&…

JAVA面试库

1、基础 1.1、面向对象编程有哪些特性 1、抽象 抽象就是对同一个目标的共有的属性、特征、方法、功能、行为等进行抽取并归纳总结,它是一种将复杂现实简单化为模型的过程,它关注的是对象行为,而不用关注具体的实现细节。 在面向对象编程中…

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景创建应用平台地址随机生成快速创建应用头像应用名称应用描述…

S32K3的中断向量表

S32K312的中断向量表所在文件名称是S32K312_COMMON.h 中断向量内容是&#xff1a; /*!* addtogroup Interrupt_vector_numbers Interrupt vector numbers* {*//** Interrupt Number Definitions */ #define NUMBER_OF_INT_VECTORS 229 /**< Number of inte…

knife4j在线文档 测试框架

一、Knife4j介绍&#xff1a; 1.1.介绍&#xff1a; Knife4j是基于SpringBoot构建的一个文档生成工具&#xff0c;它可以让开发者为我们的应用生成在线API文档&#xff1b; 目的是可以更加方便的基于API文档进行测试。 生成的文档还可以导出&#xff0c;然后给到前端开发团队…

pyenv 之 python 多版本管理(win11)

1. 背景 常常会用到Python的多个版本&#xff0c;因此可以使用Pyenv来对Python版本进行管理。 2. win11下载 pyenv 在终端执行下载语句&#xff1a; pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 为你想要下载到的文件目录&#xff0c;建议在 …

党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)

目录 基于SprinBootvue的党务政务服务热线平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …

CSRF 攻击实验:更改请求方式绕过验证

前言 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;也称为XSRF&#xff0c;是一种安全漏洞&#xff0c;攻击者通过欺骗用户在受信任网站上执行非自愿的操作&#xff0c;以实现未经授权的请求。 CSRF攻击利用了网站对用户提交的请求缺乏充分验证和防范…

抖音剪辑音乐配乐音效合集,短视频制作分类配乐库素材

一、素材描述 这是一套短视频剪辑配乐库&#xff0c;包含大气震撼、儿童幽默、片头片尾、科技未来、惊险悬念、婚礼婚庆、各种各样、轻松明朗、民族风格、叙事抒情等配乐分类&#xff0c;基本上是应有尽有了。本套配乐库素材&#xff0c;大小18.18G&#xff0c;5个分卷压缩文件…

Git使用(3):版本管理

一、查看历史 编写一个java类进行测试 选择Git -> Show Git Log查看日志。 第一次修改推送到远程仓库了&#xff0c;所以有origin&#xff08;远程仓库地址&#xff09;&#xff0c;第二次修改只提交到本地仓库所以没有。 二、版本回退 1、本地回退 在要回退的版本上右键&a…

使用Flask-SocketIO构建实时Web应用

文章目录 准备工作编写代码编写HTML模板运行应用 随着互联网的发展&#xff0c;实时性成为了许多Web应用的重要需求之一。传统的HTTP协议虽然可以实现实时通信&#xff0c;但是其长轮询等机制效率低下&#xff0c;无法满足高并发、低延迟的需求。为了解决这一问题&#xff0c;诞…

计算机网络实验2:路由器常用协议配置

实验目的和要求 掌握路由器基本配置原理理解路由器路由算法原理理解路由器路由配置方法实验项目内容 路由器的基本配置 路由器单臂路由配置 路由器静态路由配置 路由器RIP动态路由配置 路由器OSPF动态路由配置实验环境 1. 硬件&#xff1a;PC机&#xff1b; 2. 软…

3588 pwm android12 的操作,包含 NDK native C++

问题&#xff1a; 客户需要在android12 的界面上操作板卡上的 PWM 蜂鸣器设备。 过程&#xff1a; 1 了解一下 3588 android12 源码的 关于PWM 的驱动。 设备树找不到 pwm 但是&#xff0c; 还不知道&#xff0c;android12 最终包含的 设备树是哪个&#xff0c;但是经过我的…

【吊打面试官系列】Java高并发篇 - 并发编程三要素?

大家好&#xff0c;我是锋哥。今天分享关于 【并发编程三要素&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 并发编程三要素&#xff1f; 1、原子性 原子性指的是一个或者多个操作&#xff0c;要么全部执行并且在执行的过程中不被其他操作打断&#xff0c;要…