作者:马如悦 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 分布式架构,总体架构图如下:
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 的容器渠道,云核算基础设施的革新催生了新的需求。
云本身就是存储核算别离的,其极致弹性带来极大的本钱经济优势:
- 核算资源的弹性:能够依据核算负载的需求,按需购买或许按需扩缩容核算节点,在满意核算需求的情况下,使得本钱到达最低;
- 存储资源的低本钱与弹性:目标存储供给极端牢靠的低本钱存储,并且依照运用容量计费,这样能够让数据存储得更多更久。
即便是没有运用云渠道的公司,也能够运用低本钱的同享存储体系,在下降存储本钱和进步核算弹性的一同,还能取得多核算集群等额外的优质特性。
未来存算别离架构如下图所示:
存算别离新架构
依据同享存储体系的主数据存储
在存算一体的架构下,数据主要存储在核算节点上,即使运用了冷热数据分层,热数据依旧只在核算节点上存储,核算节点需求依靠本身的多副本机制确保数据的牢靠性。在存算别离架构下,核算节点不再存储主数据,而是将同享存储层作为一致的数据主存储空间,这将带来如下收益:
- 上层的核算节点能够做到无状况,能够完成彻底关机
- 更快捷的数据同享,不同的集群之间以及不同的库房能够快捷地进行数据同享
- 更简易的数据备份与康复,以及完成数据的 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 现有产品为例,来向咱们演示全新存储核算别离形式的特性和功用。
SelectDB Cloud 上新建库房
SelectDB Cloud 上多集群演示
SelectDB Cloud 上的手动扩缩容
SelectDB Cloud 上的分时扩缩容
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。