首页 > 其他分享 >深入研究消息队列07 架构升级

深入研究消息队列07 架构升级

时间:2023-09-18 21:37:27浏览次数:65  
标签:存储 副本 架构 07 队列 分离 集群 存算

36 云原生:业界MQ的计算存储分离

存算分离架构

存算一体架构如下

深入研究消息队列07 架构升级_MQ

存算分离架构则是目前实现弹性消息队列集群的主要技术方案

深入研究消息队列07 架构升级_MQ_02

存算分离架构的优点是计算层为无状态,因此计算层的扩缩容就很方便。缺点是架构变复杂,代码实现难度也提升很多,日常的运维、研发的学习成本也会相应提高。另外计算层和存储层的交互从本地调用变为了网络协议的调用,性能上会有一些下降。

存算分离架构最大的好处就是集群变得更加弹性。从终态来说,没有存算分离,消息队列架构就无法 Serverless 化,也就无法做到快速扩缩容。从成本结构的角度来看,没法快速扩缩容,那么就无法提高集群的利用率,也就无法很好地降低成本。

实现存算分离架构的技术思考

如何选择合适的存储层引擎

深入研究消息队列07 架构升级_MQ_03

深入研究消息队列07 架构升级_MQ_04

深入研究消息队列07 架构升级_MQ_05

因为分布式存储服务一般会提供多语言的流式写入的 API 进行数据读写,读写性能较高,比较适合消息队列的数据特点。所以从业界落地的角度来看,分布式存储服务用得比较多。比如 Pulsar 的存储层使用的是 BookKeeper,RocketMQ 5.0 的存储层用的是原先的 Broker 集群。

存储层:分区存储模型的设计

但是在存算分离的架构中,基本都是每个分区一个“文件”的方案。主要是出于数据的读写性能考虑。在存算分离的架构中,我们是通过网络协议从存储层读取数据的。

如果数据存储在一份文件中,则存储层在读取数据时就需要维护二级索引,并启动随机读,在性能上会有一定的降低

深入研究消息队列07 架构升级_MQ_06

所以合理的方案如下图所示,不同的分区在存储层有独立的“文件”存储,然后顺序读写不同的段文件

深入研究消息队列07 架构升级_MQ_07

计算层:弹性无状态的写入

分区的数据写入到存储层,依赖存储层多副本存储的能力实现数据的可靠存储。从技术来看,副本并没有被省掉,只是将副本概念下沉到了存储层而已

深入研究消息队列07 架构升级_MQ_08

深入研究消息队列07 架构升级_MQ_09

业界主流存算分离架构分析

RocketMQ 5.0 就是在原先 Broker 集群的基础上添加了一个 Proxy 组件。

深入研究消息队列07 架构升级_MQ_10

前的 Proxy 组件只是转发层,不处理任何计算和存储的逻辑。集群实际意义上的计算和存储逻辑,都是在 Broker 集群上完成的。这就是我们前面所说的,当前 RocketMQ 5.0 的架构不是真正意义上的存算分离架构的原因。更准确的说法是,RocketMQ 5.0 只是从当前存算一体的架构往存算分离架构演化走出了第一步。

深入研究消息队列07 架构升级_MQ_11

Pulsar 存算架构分析

深入研究消息队列07 架构升级_MQ_12

深入研究消息队列07 架构升级_MQ_13

深入研究消息队列07 架构升级_MQ_14

Pulsar 计算层的分区都是单副本的,即没有副本的概念。每个 Pulsar 分区底层由多个 Ledger 组成,每个 Ledger 只包含一个分区的数据。每个 Ledger 有多个副本,这些 Ledger 副本分布在 BookKeeper 集群中的多个节点上

因为计算层就都是无状态的,迁移起来就很快,直接修改元数据即可

深入研究消息队列07 架构升级_MQ_15

同时,为了提高负载均衡和迁移的效率,Pulsar 引入了 Bundle 的概念。参考图示,Bundle 是处于 Namespace 和 Topic 之间的一个概念,它是用来组织多个 Topic 的一个逻辑概念。即一个 Namespace 有多个 Bundle,一个 Bundle 里面有多个 Topic。

深入研究消息队列07 架构升级_MQ_16

标签:存储,副本,架构,07,队列,分离,集群,存算
From: https://blog.51cto.com/u_6478076/7515737

相关文章

  • 1.MySQL、基础架构(SQL语句执行流程、更新语句执行流程)
    1.MySQL的索引有哪些索引在什么层面:索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。B+树索引:是大多数MySQL存储引擎的默认索引类型。哈希索引:哈希索引能以O(1)时间进行查找,但是失去了有序性;InnoDB存储引擎有一个特殊的功能叫......
  • Dubbo3应用开发——架构的演变过程
    Dubbo3应用开发——架构的演变过程什么是Dubbo早期Dubbo的定位;基于Java的高性能,轻量级的RPC框架;SOA【Service-OrientedArchitecture⾯向服务的架构】=RPC+服务治理;2018年阿⾥巴巴把这个框架捐献给了Apache基⾦会,正式更名为ApacheDubbo。最新版本为Dubbo3.xApache......
  • JAVA高级架构师
    JAVA高级架构师技术包含:SpringBoot3.0,SpringCloudAlibaba,JDK11~19,Spring6,IOC,AOP,JavaWeb,SpringMVC,Mybatis,Docker,k8s,Devops,Vue3.0,Nginx,Redis7,MongoDB,JDBC,ShardingJDBC,Zookeeper,Dubbo,Activiti7,ES8,RabbitMQ,Redisson,Shiro,Paas,Neo4j,Kafka,Mycat,Tcp,ELK,SpringDa......
  • Educational Codeforces Round 107
    依然是四题,但是感觉太久没打,好像变得迟钝了。B题大概就是令\[c={10}^k,a=c*3^k,b=c*2^k\]C的话直接暴力维护每种颜色的第一个位置就行,反正只有50个D的话刚开始没什么想法,构造题什么的真的不会啊打表之后发现,对于k,在cost为0的情况下,最多能造出长度为\(k^2+1\)的串,也就是能够......
  • ## day13 - 栈与队列part03
    day13-栈与队列part03力扣239.滑动窗口的最大值思路:利用单调队列,很难想的出来。因为每次是进一个数,弹出一个数,因此没必要每次都进行排序,只需要拿到最大值即可。用单调队列实现,是一个双向队列pop()函数:如果要pop的值是队列头部的值,那么就弹出,否则不操作。push()函数:如果......
  • 高效数据湖构建与数据仓库融合:大规模数据架构最佳实践
    在当今数字时代,数据被认为是新的黄金,无论是企业、政府还是学术界,都需要有效地管理和分析海量数据。在数据处理领域,数据湖(DataLake)和数据仓库(DataWarehouse)是两个重要的概念。本文将深入探讨如何高效地构建数据湖,以及数据湖与数据仓库的融合,为大规模数据架构提供最佳实践。数据......
  • 2022年07月 python界面可视化 VS2022配置PyQt5环境
    文章目录 一、VS2022配置PyQt5环境1.安装anaconda及opencv-python1.1安装对应的anaconda包1.2安装opencv-python2.安装PyQt53.安装PyQt常用工具4.配置系统环境变量5.配置VS2022中的外部工具6.第一个VS2022下的pyqt5程序一、VS2022配置PyQt5环境本机环境:......
  • 服务器的架构有哪些
    服务器的架构有哪些1、单体架构软件设计经典的3层模型是表现层,业务逻辑层,数据访问层。典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。2、垂直架构垂直架构是将一个大项目,按照业务场景纵向拆分为互不相干......
  • 商用密码体系架构介绍
    在网络安全上,采用https接入网关提供初始化验证和加密通信通道。在数据安全上,用户鉴别采用SM3、SM4等算法加密存储,采用SM3、SM4等算法对数据加密传输。在终端安全上,通过终端证书进行身份验证;在应用安全上,开展移动应用安全加固,通过数字证书、数据加密保证移动应用安全,接入时采......
  • 服务器的架构有哪些
    服务器的架构有哪些1、单体架构软件设计经典的3层模型是表现层,业务逻辑层,数据访问层。典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。2、垂直架构垂直架构是将一个大项目,按照业务场景纵向拆分为互不相干......