Apache Doris 巨大飞跃:存算分离新架构

作者:马如悦 Apache Doris 创始人

历史上,数据分析需求的不断提升(更大的数据规模、更快的处理速度、更低的使用成本)和计算基础设施的不断进化(从专用的高端硬件、到低成本的商用硬件、到云计算服务),这两大因素推动数据仓库的架构大体经历了三个时代:软硬一体的一体机时代、存算一体的分布式时代以及存算分离的云原生时代。

Apache Doris 诞生于存算一体的分布式时代,是典型的 Shared Nothing 架构:BE 节点上存储与计算紧密耦合、多 BE 节点采用 MPP 分布式计算架构,这种架构为 Apache Doris 带来了高可用、极简部署、横向可扩展以及强大的实时分析性能等一系列核心特色。随着云时代的到来,无论是公有云、私有云还是 K8S 容器平台,越来越多的企业都希望 Apache Doris 针对云计算这种新型基础设施提供更加深度的适配,以便提供更加灵活强大的弹性能力。

在过去的一年,飞轮科技(SelectDB)技术团队在基于 Apache Doris 内核研发全托管企业级云数仓产品的过程中,设计并实现了全新的云原生存算分离架构(即 SelectDB Cloud)。基于云原生存算分离的架构,SelectDB Cloud 在此基础上提供了多计算集群负载隔离和计算弹性扩缩容等功能。

秉持着“推动开源技术创新、繁荣开源社区生态”的首要目标,在 Apache Doris 2.0 即将发布之际,SelectDB 技术团队正式宣布,将存算分离架构实现贡献至 Apache Doris 社区。 这一工作预计将于 2023 年 10 月前后完成,届时全部存算分离的代码都将会提交到 Apache Doris 社区主干分支中。

当存算分离代码合入 Apache Doris 社区后,Apache Doris 可以采用以下两种模式之一运行:存算一体的部署模式和存算分离的部署模式。在两种模式下运行的 Apache Doris 将以不同的方式来存储主数据。从用户使用体验上而言,绝大部分功能都是一致的,但是也会因为实现架构和部署模式的不同,带来一些功能上的差异。下面我们将分别介绍两种部署模式的核心特点和适用场景差异。

存算一体的分布式架构

存算一体架构,也是 Apache Doris 长久以来经历过数千家企业生产环境打磨、无论是性能亦或是易用性和稳定性都最为成熟的 MPP 分布式架构,总体架构图如下:

存算1.png

Apache Doris 存算一体架构

部署简易

在存算一体模式下,Apache Doris 不需要依赖类似外部共享文件系统或者对象存储,仅依赖物理服务器部署 FE 和 BE 两个进程即可完成集群的搭建,可以从一个节点扩展到数百个节点。这种不依赖第三方组件的部署模式极大降低了 Apache Doris 的使用门槛,甚至一台办公笔记本就可以完成 Apache Doris 的部署。

部署简单的同时,也拥有极简的运维成本:

  • FE 和 BE 都支持横向线性扩展,扩缩容过程中无需停服,可正常提供稳定可靠的在线服务
  • 数据多副本存储,自身的分布式管理框架自动管理数据副本的分布、修复和均衡,扩缩容时数据副本会自动在节点间负载均衡,无需任何人工操作

因为存算一体架构依赖少,不需要依赖任何其他其他系统,也增强了系统的稳定性。而存算分离模式则需要依赖于共享的存储系统。对于绝大多数企业来说,提供一个共享的存储系统并非如此轻而易举。依赖组件越多、任一组件的不稳定都会导致整个系统的稳定性受到影响。存算分离架构依赖共享存储系统,那么存储系统的稳定性和可用性、连接存储系统和计算节点的网络延迟以及稳定性,都会对整个存算分离架构的稳定性有着至关重要的影响。

性能优异

在存算一体模式下,Apache Doris 执行计算时,计算节点可直接访问本地存储数据,充分利用机器的 IO、减少不必要的网络开销、获得更极致的查询性能。而存算分离模式下网络传输带宽和耗时往往会制约系统性能的发挥,因此即便是 Hadoop、Spark 这种一开始便采用存算分离模式的分布式框架,也会尽量将计算逻辑推送到数据所在的节点,以此来提升计算任务的执行性能。

与此同时,存算一体模式对于谓词下推(Predicate Pushdown)更加友好,将条件判断逻辑更贴近数据源,减少查询时扫描、传输和计算的数据量,更能发挥系统的查询性能。相比存算分离模式,一般存储系统都没有执行谓词计算的能力,因此无法实现谓词下推,继而需要网络将大量的数据传输至计算侧。

冷热分层

在 Apache Doris 2.0 版本中,也实现了存算一体模式下的冷热数据分层。冷热数据分层功能使 Apache Doris 可以将冷数据下沉到存储成本更加低廉的对象存储中,同时冷数据在对象存储上的保存方式也从多副本变为单副本,存储成本进一步降至原先的三分之一。通过冷热数据分层,使得 Apache Doris 集群配置不再需要随着历史数据量的堆积而不断扩容机器。本质上,Apache Doris 2.0 版本的冷热数据分层也是一种存算分离的形态,只是实现了冷数据的存储分离。

关于 Apache Doris 2.0 冷热数据分层功能的详细介绍,可以参考 Apache Doris 冷热分层技术如何实现存储成本降低 70%?

存算一体架构的适用场景

基于以上的原因,如果满足下面任一条件,那么 Apache Doris 存算一体模式更加适合你:

  • 简单使用 Doris,想快速试用一下,或者开发和测试使用
  • 没有可靠的共享存储可用,比如 HDFS、Ceph、对象存储等
  • 业务线独立维护 Apache Doris,没有专职 DBA 来维护 Doris 集群
  • 不需要极致弹性扩缩容,不需要K8S容器化,不需要运行在公有云或者私有云上

存算分离的新架构

如上所述,如果存算一体模式有这么多优势,为何我们还需要提供存储计算分离的新架构?核心动力来自于新兴云计算基础设施的成熟,无论是公有云、私有云以及基于 K8s 的容器平台,云计算基础设施的革新催生了新的需求。

云本身就是存储计算分离的,其极致弹性带来极大的成本经济优势:

  • 计算资源的弹性:可以根据计算负载的需求,按需购买或者按需扩缩容计算节点,在满足计算需求的情况下,使得成本达到最低;
  • 存储资源的低成本与弹性:对象存储提供极其可靠的低成本存储,并且按照使用容量计费,这样可以让数据存储得更多更久。

即便是没有使用云平台的公司,也可以利用低成本的共享存储系统,在降低存储成本和提高计算弹性的同时,还能获得多计算集群等额外的优质特性。

未来存算分离架构如下图所示:

存算2.png

存算分离新架构

基于共享存储系统的主数据存储

在存算一体的架构下,数据主要存储在计算节点上,即使使用了冷热数据分层,热数据依旧只在计算节点上存储,计算节点需要依靠自身的多副本机制保证数据的可靠性。在存算分离架构下,计算节点不再存储主数据,而是将共享存储层作为统一的数据主存储空间,这将带来如下收益:

  • 上层的计算节点可以做到无状态,可以实现完全关机
  • 更便捷的数据共享,不同的集群之间以及不同的仓库可以便捷地进行数据共享
  • 更简易的数据备份与恢复,以及实现数据的 Time Travel

当然,成熟稳定的 HDFS/对象存储还为系统带来极低的存储成本和极高的数据可靠性,并且大大简化上层计算节点的实现复杂度。

基于本地高速缓存的性能优化

存算分离依赖从网络上读取存储系统的数据来进行计算,在一定程度上会造成计算性能的下降,这也是相较于存算一体架构的主要劣势。为了解决这一问题,可以在本地利用 SSD 提供高速缓存。

正如存算一体通过冷热数据分层技术来大大缓解了存储和计算必须同时扩展的问题,同样在存算分离架构中引入计算节点本地高速缓存实际也是融合了存算一体的能力。这种本地高速缓存加上共享存储系统,我们也可以称之为混合模式,无论是 Snowflake 还是 Redshift,实际上都是采用了这种方式来应对底层对象存储系统性能不佳和网络传输带来的性能下降。

引入本地高速缓存后,系统会自动根据 LRU 来缓存最新写入和访问数据,当然也可以手动设定表的缓存策略。由于只是缓存,因此本地只存储了单个副本,这样大大提升了缓存利用率,相比存算一体模式可以降低 2/3 的高速存储使用。

另外,在存算一体的模式下,每个 Tablet 有 3 个节点来存储其 3 个数据副本,在三副本上都需要独立进行数据合并(Compaction)计算。而在存算分离下,只有一个节点进行数据合并计算,这样就可以降低 2/3 的数据合并计算量。

所以,通过引入本地高速缓存,不仅仅可以基本达到原来存算一体的性能,在有些情况下还会超越原来存算一体的性能。

多计算集群实现工作负载隔离

用户通常希望对同一份数据上的分析负载进行隔离。例如,导入的工作负载与查询的负载进行隔离,Adhoc 的大查询负载和在线点查询的负载间相互隔离,避免不同负载间相互资源抢占。

在 Apache Doris 2.0 版本中提供了工作负载组(Workload Group)的资源隔离方案。这个方案是一种软限隔离,可以为特定查询或者特定用户指定查询优先级,但是基于 Workload Group 的隔离无法达到存算分离模式下多计算集群的真正物理隔离性。

在存算分离模式下,提供了同一个仓库多个物理计算集群的隔离方式。因为主数据存储在共享的对象存储上,因此用户可以按需创建多个计算集群但共享同一份数据。计算集群之间是物理隔离的,可以独立扩缩容,其计算节点的本地高速缓存都是隔离的,这样保证了尽可能比较好的隔离性。

极致的弹性扩缩容

存储与计算的分离,带来的最大优势是存储和计算可以独立扩缩容。数据存储在 HDFS 或对象存储上,可以按需扩缩容。每个计算集群的计算节点,可以实现更加高效的弹性扩缩容,包括手动扩缩容、分时扩缩容以及自动停机。

存算分离特性演示

在此我们以 SelectDB Cloud 现有产品为例,来向大家演示全新存储计算分离模式的特性和功能。

存算3.gif

SelectDB Cloud 上新建仓库

存算4.gif

SelectDB Cloud 上多集群演示

存算5.gif

SelectDB Cloud 上的手动扩缩容

存算6.gif

SelectDB Cloud 上的分时扩缩容

存算7.gif

SelectDB Cloud上的集群自动启停

存算分离架构的适用场景

基于以上的介绍,毫无疑问也帮助我们进一步明晰了存算分离架构的适用场景,满足下列任一条件,存算分离架构更适合你:

  • 如果已经使用公有云服务,那么存算分离架构绝对值得尝试
  • 拥有可靠的共享存储系统,比如 HDFS、Ceph、对象存储等
  • 需要极致弹性扩缩容,需要 K8S 容器化,需要运行在私有云上
  • 有专职的团队维护整个公司的数据仓库平台

数据湖分析

需要说明的是,针对不同的技术群体,存储、计算与存算分离这些概念指代着不同的含义。

无论是 Apache Doris 的存算分离、还是 Snowflake 的存算分离,都是指单一系统内部存储和计算模块之间的分离。对于数据湖和湖仓一体(Lakehouse)的用户,则是希望做到更加彻底的分离,即计算系统和存储系统是两个不同的产品。存储系统通过统一的开放表格式面向计算系统开放,而计算系统也可以开放地对接不同的底层存储系统。

对于 Apache Doris 而言,无论是存算一体的架构还是存储计算分离的架构,都支持湖仓一体这种新型 Lakehouse 系统形态,即可以直接查询湖存储以及当前流行的各类开放表格式,包括 Hive、Iceberg 和 Hudi 等。需要说明的是,Apache Doris 目前对数据湖的读取已经比较完备,包括支持 Snapshot 读和 Time Travel,而后续还会进一步支持湖上数据的写回,形成更加闭环的数据分析和流转。

除了对数据湖的集成与分析,Apache Doris 目前还支持了对当前常见的关系型数据库、对象存储以及 HDFS 上 CSV、Parquet 等格式数据的直接查询分析。

未来计划

围绕着存算分离,SelectDB 技术团队会与 Apache Doris 社区未来一起推进下面相关方向的研发:

Workload Group 与多计算集群的融合

当前存算一体架构下的 Workload Group 与存算分离架构的多计算集群实际都是用来解决负载隔离的,一个偏软限,一个是硬限,当前具体实现方式存在一定差异,后面将考虑二者融合,对用户而言提供统一一致的使用体验。

与外部数据湖 更便捷的 数据 导入导出

外部数据湖的数据可以增量持续写入内表,也可以使得内表的数据可以增量持续写入到外表数据湖的格式。

通过提供更加便捷的外表导入内表的功能,Doris 可以持续加载最新的数据湖数据,以便提供更高的数据计算性能。

通过提供更加便捷的内表导出外表的功能,使得内表的数据可以增量写出为开放的外表格式。数据转换为开放格式,一个是方便与相关大数据生态系统打通,另一个是打消企业对封闭数据格式被锁定的担忧。

实现共享的高速缓存,与计算节点进一步分离

当前存算分离模式下,高速缓存使用的是计算节点的本地磁盘,所以计算节点还不能做成真正的无状态。当进行节点快速扩容的时候,需要考虑缓存的预热均衡;当进行节点快速缩容的时候,需要考虑缓存的失效,以及向其他节点的缓存转移。未来,我们将实现一种与计算节点分离的共享高速缓存,实现计算、缓存和对象存储完全的分离,以便提供秒级扩缩容能力。

存算一体和存算分离两种模式的融合

存算一体和存算分离的架构在部署之初就需要确定下来,而对于多数用户都可能存在不同架构之间的转化,因此后续也会不断改进实现方式,让两种模式间可以更便捷地进行相互转换,甚至逐步融合成一套架构。

交流与试用

存算分离架构的代码将于 2023 年 10 月份前后提交至 Apache Doris 社区,当前正处于紧锣密鼓的代码整理阶段。对于存算分离架构感兴趣的用户可以扫描下面二维码加入存算分离技术沟通群,了解代码开源的最新进展。当前,我们也开放了部分企业的提前试用,有需要可以联系luzhijing@selectdb.com。

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

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

相关文章

JPEG有损图像压缩编码器(附源码)

概述 一个基本由自己实现的JPEG有损图像压缩编码器,基于JFIF(JPEG文件交换格式)标准: 色彩空间转换(RGB to YUV)色度抽样(采样因子4:2:0)MCU分块(16x16的最小编码单元&…

多模态第2篇:MMGCN代码配置

一、Windows环境 1.创建并激活虚拟环境 #创建虚拟环境命名为mmgcn,指定python版本为3.8 conda create -n mmgcn python3.8 #激活虚拟环境 conda activate mmgcn2.安装pytorch #torch2.0.0 cu118 pip install torch2.0.0cu118 torchvision0.15.1cu118 torchaudio…

PACS系统源码:支持三维重建功能、集成放射科管理RIS系统、图文报告编辑、打印、多级审核机制

PACS系统源码 PACS系统是以最新的IT技术为基础,遵循医疗卫生行业IHE/DICOM3.0和HL7标准,开发的多功能服务器和阅片系统。通过简单高性能的阅片功能,支持繁忙时的影像诊断业务,拥有保存影像的院内Web传输及离线影像等功能&#xf…

【雕爷学编程】MicroPython动手做(11)——搭建掌控板IDE开发环境四种

为了能够打好基础,系统学习MicroPython,特地入手了二块掌控板 知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通…

【Docker 学习笔记】Docker架构及三要素

文章目录 一、Docker 简介二、Docker 架构1. Docker 客户端和服务器2. Docker 架构图3. Docker 运行流程图 三、Docker 三要素1. 镜像(Image)2. 容器(Container)3. 仓库(Repository) 一、Docker 简介 Dock…

2.4 传统经验光照模型详解

一、光照模型 光照模型(illumination model),也称为明暗模型,用于计算物体某点处的光强(颜色值)。从算法理论基础而言,光照模型分为两类:一种是基于物理理论的,另一种是…

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测 高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中,它们的参数通常由最大似然和EM算法确定。关键思想是使用高斯混合模型对数据(包括输入和输出)的联合概率…

<Doc>Windows常见的doc命令

一:管理员身份运行cmd命令: 方式一:搜索框输入cmd,回车,点击:以管理员身份运行 出现如图所示: 方式二:快捷键运行方式: 1.按winr,在运行窗口中输入cmd。 …

JavaSE类和对象(重点:this引用、构造方法)

目录 一、类的定义方式以及实例化 1.面向对象 Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在Java的世界里一切皆为对象。 2.类的定义和使用 1.在java中定义类时需要用到class关键字 3.类的实例化 4.类实例化的使用 二、this引用 …

Java API指南:掌握常用工具类与字符串操作

文章目录 1. API简介2. Java API的使用2.1 创建和使用Java API工具类2.2 使用String类进行字符串操作 结语 导语: Java作为一门功能强大的编程语言,其成功之处不仅在于语法结构的简洁明了,更因为其丰富的API(Application Programm…

中药配方煎药-亿发智能中药汤剂煎煮系统,智慧中药房的数字化升级

随着中药的普及,在治病、养生等方面都发挥这积极作用,但中药煎煮过程繁琐,如果有所差错将会影响药品的药性。为了满足当今用户对中药的需求,增强生产效率和业务水平,亿发中药煎配智能管理系统应运而生,为用…

【JMeter】JMeter添加插件

目录 一、前言 二、插件管理器 三、推荐插件 1.Custom Thread Groups (1)Ultmate Thread Group (2)Stepping Thread Group 2.3 Basic Graph 资料获取方法 一、前言 ​ 在我们的工作中,我们可以利用一些插件来帮…

github gitlab 多用户多平台切换

一、背景 我需要用账号1 来登录并管理github 账号 我需要用账号2 来登录并管理gitlab 账号 二、设置账号 邮箱 设置账号1用户名与邮箱 git config --global user.name "miaojiang" git config --global user.email "187133163.com" 三、生成本地密钥…

中小企业如何低成本实施MES管理系统

中小企业在市场竞争中需要有高效的管理体系来支持其运营和发展。中小企业MES管理系统是一种先进的管理系统,可以提升工厂智能化水平,提高生产效率,是中小企业必须采取的有效管理工具。然而,由于资金和技术的限制,中小企…

反转链表(JS)

反转链表 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3&…

MySQL初探

Background 通过阅读小林coding,大致了解了mysql数据库的种种特点,与之前学的数据库实现大体思路相同,感觉学习不能停留在理论层面,要调研生产级别的中间件实现。 一条代码运行在mysql上的流程 1. 连接的过程需要先经过 TCP 三次…

php://filter绕过死亡exit

文章目录 php://filter绕过死亡exit前言[EIS 2019]EzPOP绕过exit 参考 php://filter绕过死亡exit 前言 最近写了一道反序列化的题,其中有一个需要通过php://filter去绕过死亡exit()的小trick,这里通过一道题目来讲解 [EIS 2019]EzPOP 题目源码&#…

C语言每日一题:9.《数据结构》链表的中间节点+链表的倒数第k个节点。

第一题: 题目链接: >思路一: 1.第一遍遍历链表,直到找到尾结束第一次遍历,遍历的过程中记录链表长度。定义长度为k。 2.确定中间是第几个节点,计算是k/21根据题目要求。 3.再一次去遍历我们的数组&…

实战!聊聊工作中使用了哪些设计模式

实战!聊聊工作中使用了哪些设计模式 策略模式 业务场景 假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码: if(type"A"){//按照A格式解析}else if(t…

Electron逆向调试

复杂程序处理方式: 复杂方式通过 调用窗口 添加命令行参数 启动允许调用,就可以实现调试发布环境的electron程序。 断点调试分析程序的走向,程序基本上会有混淆代码处理, 需要调整代码格式,处理程序。