Apache RocketMQ - 概述

news2024/12/27 9:50:27

2022年,RocketMQ 5.0的正式版发布,相比于4.0版本而言,架构走向云原生化,并且覆盖了更多的业务场景。 

如何从互联网时代演进到云时代?

1. 消息队列演进史

操作系统、数据库、中间件是基础软件的三驾马车,而消息队列是其中最经典的中间件之一,已经有30多年的历史了。

  • 第一阶段(1980~2000年):其中最具代表性的为IBM MQ,价格昂贵,面相高端企业,MQ本身的软件架构是单体架构。
  • 第二阶段(2000~2007年):进入00年代后,初代开源消息队列崛起,诞生了JMS、AMQP两大标准,与之对应的初代开源消息队列的两大实现:ActiveMQ、RabbitMQ,它们共同引领了初期的开源消息队列的技术,开源也极大的促进了消息队列的流行,降低了使用的门槛,技术普惠化,逐渐成为企业级架构的标配,相比于今天而言,这一类MQ主要还是面向于传统的企业级应用场景,它们的流量一般都比较小,对横向扩展性的需求也没那么强。
  • 第三阶段(2007~2017年):就是PC互联网和移动互联网爆发的阶段了,由于传统的消息队列(ActiveMQ、RabbitMQ),它们都没办法承受亿级用户的访问流量以及海量的数据传输,于是在这个过程中就但诞生了所谓的互联网消息队列,它的核心能力是全面采用了分布式的架构,具备了很强的横向扩展能力,比较典型的开源代表有: Kafka以及RocketMQ,闭源的还有淘宝的Notify,Kafka的诞生还将消息中间件从传统的消息领域延伸到了流领域,从分布式应用的异步解耦的场景延伸到大数据的流存储跟流计算的场景。
  • 第四阶段(2014~至今):最近这几年 - 云计算、物联网(IoT)、云原生、大数据,它们又引领了新的浪潮。

互联网时代的 RocketMQ 

RocketMQ的诞生背景

虽然在当时业界已经存在不少商业或开源的消息队列,比如IBM MQ、ActiveMQ、RabbitMQ,但无一例外,这些消息队列它们都诞生于传统的企业级应用的场景,它们没办法承担互联网对于高并发、无限横向扩展的苛刻要求,以RabbitMQ为例,RabbitMQ的队列流量与存储负载都是单机的,无法满足业务横向扩展的需求,它是没法根据互联网业务的爆发式发展而进行横向扩展的。

当时另外一款采用分布式架构、具备无限横向扩展能力的消息队列是Kafka,但是它在那个时候它主要用在日志传输的场景,它在稳定性方面还未经过大规模核心业务的验证,而且它也比较偏向于简单的log型的消息队列,没办法满足互联网电商对于复杂消息功能特性的诉求,比如一些消息过滤或者一些延迟消息等;另一方面的话,传统的消息队列它没办法解决电商交易对于分布式一致性的要求。通过消息队列实现应用的异步解耦之后,电商业务还需要保证/保障不同的上下游应用,对订单的状态要能达到最终的一致,否则将会产生大量的脏数据,导致大量的业务错误

所以对于一个大规模的电商交易系统来说,它既要高性能,又要一致性,然后传统的分布式事务技术也是束手无策。比如IBM MQ虽然可以使用XA事务来满足分布式一致性的功能诉求,但是XA带来的延迟与成本,对于海量的互联网流量难以承受。

于是为了解决电商业务对于消息队列的高性能、一致性、无限扩展等需求,自研消息队列就成了当时阿里唯一的出路,也就是在这个大背景下面,互联网消息队列RocketMQ应运而生。

为了支撑超大规模的复杂电商业务,RockteMQ主要面向四个方面进行了重点建设,形成了四大优势能力:

优势一:支撑超大规模复杂业务的能力,具备丰富的消息特性;

优势二:数据一致性RocketMQ在一致性方面打造了多个关键的特性,最有代表性的是分布式事务消息,RocketMQ是第一个实现该种特性的消息队列,它可以保障交易的上下游业务对于订单状态达到最终的一致,于是这个方案也成为了现在异步消息一致性方案的事实标准,被多个互联网公司所采纳。除了分布式一致性之外,RocketMQ还提供了顺序消息的特性,满足顺序一致性的需求;

优势三:稳定性,稳定性可以认为是电商交易与金融场景最基本的特性,也是RocketMQ的根本同时,稳定性也不局限于数据与服务的高可用,RocketMQ从产品层面对稳定性进行了全方位的建设,如消息回溯的能力、消息轨迹的能力以及死信队列的能力(消息死信机制);

优势四:高性能,即便是在双十一的极限流量下面,RokcetMQ的写消息的延迟也是非常低的;同时RocketMQ它采用的是Shared - noting的分布式架构,架构极简,零外部依赖;另外在吞吐量方面也具备了无限扩展的能力,万亿级吞吐保证,同时满足微服务与大数据场景;它已经连续十年支撑了双十一的万亿级消息洪峰,为百万级的客户端实例提供低延迟的消息服务。

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

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

相关文章

Python基础教程之十七:Python OrderedDict –有序字典

一个OrderedDict 维护插入顺序添加到字典中的项目。项目的顺序在迭代或序列化时也会保留。 1. Python OrderedDict示例 OrderedDict 是python collections模块的一部分。 要轻松构建OrderedDict,可以OrderedDict在collections模块中使用。 OrderedDictExample.p…

建造者模式(Builder Pattern)

建造者模式(Builder Pattern) 1、类型2、定义3、UML图4、四个角色5、代码6、应用场景 1、类型 创建型 解释:设计模式的创建性类型是一种软件设计模式,它专注于对象的创建机制,帮助我们更加灵活地创建对象实例。创建性…

Python基础教程之十六:Python multidict示例–将单个键映射到字典中的多个值

1.什么是multidict词典> 在python中,“ multidict ”一词用于指代字典,在字典中可以将单个键映射到多个值。例如 多重结构 multidictWithList {key1 : [1, 2, 3],key2 : [4, 5]}multidictWithSet {key1 : {1, 2, 3},key2 : {4, 5}}1. list如果要…

“隐身术”成现实,中科院院士现场表演

(图源:哔哩哔哩) 在“bilibili超级科学晚”活动现场,中国科学院院士褚君浩为我们揭示了“隐身术”的原理。原来,这种神奇的技能是一种科学手段。 褚君浩院士为大家介绍了一种名为“柱镜光栅”的特殊材料,柱…

2.docker镜像的导入导出

目录 概述docker 常用命令下载导出导入镜像结束 概述 docker 常用命令 本章节使用到的命令,总结在此,后面有使用案例。 命令作用docker images显示镜像docker rmi $(docker images -q)删除系统上所有的镜像docker rmi -f强制删除多个镜像 &#xff1a…

MYSQL函数,一篇文章看完!

做程序员的谁会离得开数据库呢?今天就来分享一下我整理的MySQL的常用函数,基本上囊括了平时要用的函数,它们已经陪我走过了不少年头了,风里来雨里去,缝缝补补又几年,希望能帮到你们! 如果数据库…

图解电商系统的架构演进

具体以商城为例, 展示web端应用的架构演变过程。 特点: 1、所有的功能集成在一个项目工程中。 2、所有的功能打在一个war包部署到服务器。 3、通过部署应用集群和数据库集群来提高系统的性能。 优点 1、项目架构简单,前期开发成本低&#xf…

Python基础教程之十九:Python优先级队列示例

1.什么是优先队列 优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但每个元素还具有与之关联的“优先级”。在优先级队列中,优先级高的元素先于优先级低的元素提供。如果两个元素具有相同的优先级,则将根据其在队列…

Python机器学习算法入门教程(第四部分)

接着Python机器学习算法入门教程(第三部分),继续展开描述。 十九、信息熵是什么 通过前两节的学习,我们对于决策树算法有了大体的认识,本节我们将从数学角度解析如何选择合适的“特征做为判别条件”,这里…

pdf.js不分页渲染(渲染完整内容)

直接上代码 首先引入pdf.js 和 pdf.worker.js // 渲染pdf const pdfUrl test1.pdf, _targetDom pdf-container;pdfjsLib.getDocument(pdfUrl).promise.then(async doc > {let _i 0;for (let item of new Array(doc.numPages).fill()) {await renderOtherPage(doc, _i, _t…

Julia绘图初步:Plots

文章目录 基础绘图绘图类型点线参数三维绘图 Julia开发环境 基础绘图 Julia中最常用的绘图模块自然是Plots,点击]进入安装模式后,输入add Plots即可安装,装完之后按下退格键回到Julia环境,就可以调用了 using Plots x 0:0.1:1…

立体相机标定

相机成像过程中涉及的4个坐标系: 1、世界坐标系:由用户定义的三维世界坐标系,描述物体和相机在真实世界中的位置,原点可以任意选择。 2、相机坐标系:以相机的光心为坐标原点,X轴和Y轴平行于图像坐标系的X轴…

(动手学习深度学习)第7章 稠密连接网络---DenseNet

目录 DenseNetDenseNet的优点:DenseNet的改进思路总结 DenseNet代码实现 DenseNet DenseNet的优点: 省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著…

【Java 进阶篇】Java Filter 过滤器链详解

过滤器(Filter)是 Java Web 应用中重要的组件之一,它用于在请求到达 Servlet 之前或响应返回客户端之前对请求和响应进行处理。在实际开发中,我们可能会使用多个过滤器来完成不同的任务,这就引出了过滤器链的概念。本文…

[量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ

技术分析有点像烹饪,收盘价、最值、成交量等是食材;均值,移动平均,方差等是烹饪方法。随意组合一下就是一个技术指标。 KDJ又称随机指标(随机这个名字起的很好)。KDJ的计算依据是最高价、最低价和收盘价。…

Unity--UGUI创建基本的UI

随着UI系统的引入,已添加了新组件,这些组件将有助于创建特定于GUI的功能。其中一些元素包括文本,图像,按钮等。在本教程中,您将学习创建和使用基本UI。 1.创建基本的UI 通过Unity的用户界面(UI)…

UE5数字孪生制作-数据篇(二) - 数据处理

1.卫星图与DEM高度图坐标一致处理 https://www.bilibili.com/video/BV1op4y1V71r?p4&vd_source707ec8983cc32e6e065d5496a7f79ee6 坐标系的调整 如何使用临时图层,对其他数据层进行裁切 (1)创建临时图层 (2)在临…

Zotero拓展功能之Zotero Style

Zotero Style拓展功能 一、列: 1.简介 首先你必须知道Zotero的基本功能:右键任意一个列的名字,会弹出一个右键菜单,你可以勾选/取消勾选一个列,并且在最后有两个按钮,一个是“列设置”,一个是…

如何用Java实现一个基于机器学习的情感分析系统,用于分析文本中的情感倾向

背景:练习两年半(其实是两周半),利用工作闲余时间入门一下机器学习,本文没有完整的可实施的案例,由于知识体系不全面,目前代码只能运行,不能准确的预测 卡点: 1 由于过…

WebSocket在node端和客户端的使用

摘要 如果想要实现一个聊天的功能,就会想到使用WebSocket来搭建。那如果没有WebSocet的时候,我们会以什么样的思路来实现聊天功能呢? 假如有一个A页面 和 B页面进行通信,当A发送信息后,我们可以将信息存储在文件或者…