队列结构认识

· 浏览次数 : 0

小编点评

队列是一种特殊的线性表,用来存储一系列数据项,并且新数据项只能插入到列表的末尾,而且取数据项的操作是先进先出(FIFO, First In First Out)的。队列可以被视为一种先进先出的数据结构,遵循“先来先得”的原则。 常见异步消息队列框架有以下几种: 1. RabbitMQ:基于AMQP协议的消息队列,功能强大,支持复杂的路由和消息传递模式。 2. Apache Kafka:一个面向高吞吐量和实时数据流处理的分布式流平台,广泛应用于日志收集和实时分析。 3. Beanstalkd:一个简单、快速的工作队列,主要用于通过异步运行耗时任务来减少大容量Web应用程序中的页面浏览延迟。 4. Redis:一个内存数据库,同时也可以作为简单的消息队列,支持发布/订阅和列表操作。 队列数据结构的特点是先进先出(FIFO),即先进入队列的数据项会被最先处理。 队列的应用场景包括: - 业务处理:在业务中,队列可以作为一种中间件服务,在处理大量消息时,将消息存储在队列中,而不是立即对其进行处理。 - 解耦系统组件:使用队列可以将不同的系统组件解耦,使得它们可以通过传递消息进行交互,而不需要直接调用对方的处理逻辑。 - 提高系统扩展性:由于队列可以轻松添加新的处理节点来分散处理负载,因此可以提高系统的扩展性。 - 提高系统的容错能力:如果某个处理环节发生故障,那么队列中的其他消息可以继续进行处理,从而降低故障对整个系统的影响。

正文


什么是队列?

image

队列数据结构的特点:
跟排队一样:先进先出

队列的应用场景:
一般在业务中,常常把队列作为一种中间件服务,比如当要处理大量消息的时候,往往是把这些消息放入一个队列存储,这时并不需要立即对它进行处理得到结果。

最后是由订阅者(或消费者)去队列结构里取出,按顺序处理。

消息处理的触发机制

  • 死循环方式读取
    易实现,但有故障时无法及时处理和恢复。

  • 定时任务
    压力均分,有处理量上限,比如在上个定时任务没处理完的情况。

  • 守护进程
    类似PHP-FPM 和 PHP-CG机制。

  • 回调
    函数回调。

异步消息队列的概念

异步消息队列(Asynchronous Message Queue)是一种用于在分布式系统中实现异步通信的机制。它允许不同的应用程序或系统组件通过消息传递进行交互,而无需立即响应或等待对方的处理结果。这种机制有助于解耦系统组件,提高系统的扩展性和容错能力。

常见的异步消息队列框架

  • RabbitMQ:
    基于 AMQP 协议的消息队列,功能强大,支持复杂的路由和消息传递模式。
  • Apache Kafka:
    面向高吞吐量和实时数据流处理的分布式流平台,广泛用于日志收集和实时分析。
  • Beanstalkd
    Beanstalk 是一个简单、快速的工作队列。最初设计用于通过异步运行耗时任务来减少大容量 Web 应用程序中的页面浏览延迟。
  • Redis:
    是一个内存数据库,但也可以用作简单的消息队列,支持发布/订阅和列表操作。

与队列结构认识相似的内容:

队列结构认识

目录什么是队列?消息处理的触发机制异步消息队列的概念常见的异步消息队列框架 什么是队列? 队列数据结构的特点: 跟排队一样:先进先出。 队列的应用场景: 一般在业务中,常常把队列作为一种中间件服务,比如当要处理大量消息的时候,往往是把这些消息放入一个队列存储,这时并不需要立即对它进行处理得到结果。

数据结构小结

个人认为数据结构有点偏向理论知识点,从这些理论知识点,我们可以知道各种数据结构的特点,然后在特定的场景下使用对应的数据结构来存储。 基础的数据结构 从逻辑上来说基础的数据结构只有线性结构、非线性结构,也就是数组、链表。其他复杂一点的如队列、栈、树、图、hash table 都可以通过数组和链表的方式

[转帖]性能分析: 多队列的瓶颈

https://zhuanlan.zhihu.com/p/156761279 最近在性能压测时总是触发系统主动throttling, 我们都知道throttling是系统自我保护的一种手段, 大方向上可以认为这是期望的结果. 如果止步于认为这是正常现象, 就会错失很多精彩, 现象背后的逻辑是什么?

[转帖]Kafka常见使用场景与Kafka高性能之道

https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。 消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

【主流技术】聊一聊消息队列 RocketMQ 的基本结构与概念

RocketMQ 是阿里巴巴在 2012 年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于 2017 年 9 月 25 日成为 Apache 的顶级项目。 作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来...

iceoryx源码阅读(三)——共享内存通信(一)

目录0 导引1 整体通信结构2 RelativePointer2.1 原理2.2 PointerRepository2.3 构造函数2.4 get函数3 ShmSafeUnmanagedChunk3.1 队列数据3.2 RelativePointerData3.3 构造函数3.4 releaseTo

使用单调队列解决 “滑动窗口最大值” 问题

本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 私信我提问。 前言 大家好,我是小彭。 在上一篇文章中,我们介绍了单调栈这种特殊的栈结构,单调栈是一种非常适合处理 “下一个更大元素问题” 的数据结

京东云开发者| Redis数据结构(二)-List、Hash、Set及Sorted Set的结构实现

1 引言 之前介绍了Redis的数据存储及String类型的实现,接下来再来看下List、Hash、Set及Sorted Set的数据结构的实现。 2 List List类型通常被用作异步消息队列、文章列表查询等;存储有序可重复数据或做为简单的消息推送机制时,可以使用Redis的List类型。对于这

Java-全网最详细数据结构

数构&算法:数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关,以下是各种数据结构的详细说明。 线性结构:数组、队列、链表、栈 顺序存储(

文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题

三、用go语言,仿照图 10-2,画图表示依次执行操作 ENQUEUE(Q,4)、ENQUEUE(Q,1)、ENQUEUE(Q,3)、DEQUEUE(Q)、ENQUEUE(Q,8)和 DEQUEUE(Q)每一步的结果,队列初始为空,存储于数组 Q[1..6]中。 文心一言: 在这个问题中,我们尝试使