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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客网Verilog刷题——VL56

牛客网Verilog刷题——VL56 题目答案 题目 实现4bit无符号数流水线乘法器设计。电路的接口如下图所示: 输入输出描述: 信号类型输入/输出位宽描述clkwireInput1系统时钟信号rst_nwireInput1异步复位信号,低电平有效mul_awireInputsize乘数mu…

MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发

文章目录 CRgn类简介与开发CRgn类简介CRgn类区域管理开发CRgn类区域管理与不规则形状的选取 封装CMemoryDC类并应用开发CMemoryDC.h封装CMemoryDC开发游戏透明动画CFlashDlg.hCFlashDlg.cpp 封装CMemoryDC开发游戏动画 附录四大窗口CDC派生类 CRgn类简介与开发 CRgn类简介 CR…

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型, d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

Tcp的粘包和半包问题及解决方案

目录 粘包: 半包: 应用进程如何解读字节流?如何解决粘包和半包问题? ①:固定长度 ②:分隔符 ③:固定长度字段存储内容的长度信息 粘包: 一次接收到多个消息,粘包 应…

利用XSS在线平台获取用户cookie

//XSS弹窗&#xff1a; <script>alert("xss")</script> XSS漏洞&#xff1a; //XSS弹窗&#xff1a; <script>alert("xss")</script> //XSS在线平台&#xff1a; <ScRipT sRc//7ix7kigpovxdbtd32fuspgffmtmufo3wwzgnzaltddewtb…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…

【word技巧】如何做到,批量保存word文档图片

Word文件中有很多图片都需要保存&#xff0c;除了一张张的进行图片另存为以外&#xff0c;我们还有其他方法可以批量一次性保存word文档中的图片嘛&#xff1f;今天分享两个方法&#xff0c;批量保存word文档图片。 方法一&#xff1a; 将文件进行另存为&#xff0c;在选择路…

C++ 用指针处理数组元素

指针加减运算的特点使得指针特别合适于处理存储在一段连续内存空间中的同类数据。而数组恰好是具有一定顺序关系的若干同类型变量的集合体&#xff0c;数组元素的存储在物理上也是连续的&#xff0c;数组名就是数组存储的首地址。这样&#xff0c;便可以使用指针来对数组及其元…

Spring Boot 日志

Spring Boot 日志 ​ 在 Spring Boot 里面是有一个内置了的日志框架的&#xff0c;所以才能运行的时候在控制台打印出来。默认情况下的日志是系统定义和打印的&#xff0c;但我们也可以自行自定义打印日志。 日志的好处&#xff1a; 1、发现问题和定位问题&#xff1b;☆&am…

物联网工程开发实施,应该怎么做?

我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 物联网工程的概念 物联网工程是研究物联网系统的规划、设计、实施、管理与维护的工程科学&#xff0c;要求物联网工程技术人员根 据既定的目标&#xff0c;依照国家、行业或企业规范&#xff0c;制定物联网…

NVIDIA 535.86.05 Linux 图形驱动程序改进 Wayland 支持

NVIDIA公司近日发布了适用于 Linux、FreeBSD 和 Solaris 系统的 NVIDIA 535.86.05 图形驱动程序&#xff0c;作为其生产分支的维护更新&#xff0c;解决了各种错误和问题。 NVIDIA 535.86.05 是在 NVIDIA 535.54.03 发布一个多月之后发布的&#xff0c;它通过解决在使用某些 W…

C高级--day3(shell中的输入、命令置换符、数组、算数运算、分支结构)

#!/bin/bash pls ~/ -l | grep "^-" | wc -l qls ~/ -l | grep "^d" | wc -l echo "普通文件个数&#xff1a;$p" echo "目录文件个数&#xff1a;$q"#!/bin/bash read file posexpr index $file \. strexpr substr $file $((pos1)) 2…

Meta AI研究团队新AI模型: Llama 2 大语言模型

Llama是Facebook Research团队开发的基础语言模型集&#xff0c;旨在提供广泛的语言理解能力。它基于转换器架构&#xff0c;参数范围从7B到65B。通过使用Llama模型&#xff0c;研究人员和开发人员可以构建更先进的自然语言处理系统。您可以在GitHub上找到相关的代码和资源&…

SpringBoot复习:(15)Spring容器的核心方法refresh是在哪里被调用的?

在SpringApplication的run方法&#xff1a; refreshContext代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的fresh方法代码如下&#xff1a; 其中调用了super.refresh();而这个super.refresh()就是…

数据结构 | 基本数据结构——队列

目录 一、何谓队列 二、队列抽象数据类型 三、用Python实现队列 四、模拟&#xff1a;传土豆 五、模拟&#xff1a;打印任务 5.1 主要模拟步骤 5.2 Python实现 一、何谓队列 队列是有序集合&#xff0c;添加操作发生在“尾部”&#xff0c;移除操作则发生在“头部”。新…

idea如何加快创建Maven项目的速度

一、下载archetype-catalog.xml 下载archetype-catalog.xml的地址 二、配置 以下所说的配置都指全局配置。 配置Maven -DarchetypeCataloglocal -Dfile.encodinggbk

靶形数独

题目描述 小城和小华都是热爱数学的好学生&#xff0c;最近&#xff0c;他们不约而同地迷上了数独游戏&#xff0c;好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了&#xff0c;于是他们向 Z 博士请教&#xff0c;Z 博士拿出了他最近发明的“靶形数独”&am…

Portraiture 4.0.3 for windows/Mac简体中文版(ps人像磨皮滤镜插件)

Imagenomic Portraiture系列插件作为PS磨皮美白必备插件&#xff0c;可以说是最强&#xff0c;今天它更新到了4.0.3版本。但是全网都没有汉化包&#xff0c;经过几个日夜汉化&#xff0c;终于汉化完成可能是全网首个Portraiture 4的汉化包&#xff0c;请大家体验&#xff0c;有…

Python实现(条形码,二维码)生成识别

Python实现&#xff08;二维码&#xff0c;条形码&#xff09;生成识别 生成条形码生成二维码识别条形码二维码 生成条形码 安装barcode模块: $ pip install python-barcode barcode文档 import barcode from barcode.writer import ImageWriter # 更多了解&#xff1a;https…

验证码安全志:AIGC+集成环境信息信息检测

目录 知己知彼&#xff0c;黑灰产破解验证码的过程 AIGC加持&#xff0c;防范黑灰产的破解 魔高一丈&#xff0c;黑灰产AIGC突破常规验证码 双重防护&#xff0c;保障验证码安全 黑灰产经常采用批量撞库方式登录用户账号&#xff0c;然后进行违法违规操作。 黑灰产将各种方…