CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页
  • 资源参考
  • Big Queue
  • Messaging
  • 内存队列
  • 延迟队列

这有帮助吗?

  1. 系统设计
  2. 综合

消息队列设计

关于消息队列

上一页弹幕系统设计下一页分布式ID生成算法

最后更新于4年前

这有帮助吗?

MQ 是现代微服务架构和云原生架构的基础服务组件,主要用来做异步处理、服务解耦、流量削峰等。一个高性能、低延迟、高可用、高可靠的消息队列在互联网业务中是非常必要的。

常见的 MQ:

  1. Kafka

  2. RocketMQ

  3. RabbitMQ

  4. Pulsar

  5. paipaidai mq

  6. 去哪儿的消息队列

资源参考

  1. A big, fast and persistent queue based on memory mapped file.

  2. Notification Queue: persistent job queue, used for jobs scheduling

  3. 消息队列性能分析

博客

Big Queue

一个基于内存映射文件的大型、快速且持久的队列。

应用场景

  1. 大数据场景下的日志收集

  2. 大数据场景下的排序和搜索

  3. 作为分布式消息队列的基础组件

前置知识

  • 数据结构:队列

  • In message-oriented middleware solutions, fan-out is a messaging pattern used to model an information exchange that implies the delivery (or spreading) of a message to one or multiple destinations possibly in parallel, and not halting the process that executes the messaging to wait for any response to that message

设计

整体架构设计(模型) / 接口设计 / 使用和实现

Messaging

内存队列

  • JUC ArrayBlockingQueue

  • JUC PriorityBlockingQueue

  1. Introduction to the Disruptor

延迟队列

延迟队列场景:

  1. 订单在30分钟之内未支付则自动取消。

  2. 重试机制实现,把调用失败的接口放入一个固定延时的队列,到期后再重试。

  3. 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。

  4. 用户发起退款,如果三天内没有得到处理则通知相关运营人员。

  5. 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。

  6. 关闭空闲连接,服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。

  7. 清理过期数据业务。比如缓存中的对象,超过了空闲时间,需要从缓存中移出。

  8. 多考生考试,到期全部考生必须交卷,要求时间非常准确的场景。

解决方案:

  1. 定期轮询(数据库等)

  2. JDK DelayQueue

  3. JDK Timer

  4. ScheduledExecutorService 周期性线程池

  5. 时间轮(kafka)

  6. 时间轮(Netty的HashedWheelTimer)

  7. Redis有序集合(zset)

  8. zookeeper之curator

  9. RabbitMQ

  10. Quartz,xxljob等定时任务框架

  11. Koala(考拉)

  12. JCronTab(仿crontab的java调度器)

  13. SchedulerX(阿里)

  14. 有赞延迟队列

时间轮算法

如果一个系统中存在着大量的调度任务,而大量的调度任务如果每一个都使用自己的调度器来管理任务的生命周期的话,浪费cpu的资源并且很低效。

时间轮是一种高效来利用线程资源来进行批量化调度的一种调度模型。把大批量的调度任务全部都绑定到同一个的调度器上面,使用这一个调度器来进行所有任务的管理(manager),触发(trigger)以及运行(runnable)。能够高效的管理各种延时任务,周期任务,通知任务等等。

不过,时间轮调度器的时间精度可能不是很高,对于精度要求特别高的调度任务可能不太适合。因为时间轮算法的精度取决于,时间段“指针”单元的最小粒度大小,比如时间轮的格子是一秒跳一次,那么调度精度小于一秒的任务就无法被时间轮所调度。

什么是 Memory-Mapped file?(,,)

and

by Martin Fowler,

的主要特性是进入队列的消息会被推迟到指定的时间才出队被消费。

?

延迟队列的一个实现:, 参考了

JUC 延迟队列实现:DelayQueue, 实现思路是 lock + 优先级队列, (),

pmq
qmq
美团技术 - 消息队列设计精要
去哪儿消息队列架构设计
bigqueue
四个架构设计案例及其思维方式
PMQ 设计
killbill-commons/queue
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Fdigitalscholarship.unlv.edu%2Fcgi%2Fviewcontent.cgi%3Farticle%3D4749%26context%3Dthesesdissertations
https://digitalscholarship.unlv.edu/cgi/viewcontent.cgi?article=4749&context=thesesdissertations
https://github.com/obsidiandynamics/meteor
金融级别:新一代云原生消息队列在腾讯计费的实践
云原生时代消息中间件的演进路线
内存映射文件原理探索
认真分析mmap
图文详解内存映射
Spring-messaging
Spring Message
Core Message
Spring 集成
统一的消息模型和spring 集成在 Spring Cloud Stream 的应用
支持内部晋升的无锁并发优先级队列
Disruptor
你应该知道的高性能无锁队列 Disruptor
The LAMX Architecture
中文版翻译
https://lmax-exchange.github.io/disruptor/
https://github.com/shniu/disruptor.git
高性能 Disruptor - 美团技术
Disruptor wiki
极客专栏 - 队列
Low latency Trading Architecture at LMAX Exchange
Building Scalable Architecture
Sharing data between threads without contention
Single Writer Principle
LSM Tree
Disruptor 为什么这么快?
汇总
https://juejin.im/post/6844903976924610574
https://juejin.im/post/6844903609591660552
Disruptor 源码阅读
https://wiki.jikexueyuan.com/project/disruptor-getting-started/lmax-framework.html
延迟队列
你真的了解延迟队列吗
你真的了解延迟队列吗(一)
delay-queue
有赞的延迟队列设计
Leader/Follower 模式
并发模式
https://juejin.im/post/6844904150703013901
https://www.cnblogs.com/rickiyang/p/12237612.html
https://www.jianshu.com/p/8e0886c3c761
https://xiazemin.github.io/MyBlog/web/2020/01/15/DelayQue.html
你真的知道怎么实现一个延迟队列吗?
延迟队列浅析
https://www.baeldung.com/java-delay-queue
时间轮算法是如何实现的?
时间轮算法
HashedWheelTimer