历史上,数据分析需求的不断提升(更大的数据规模、更快的处理速度、更低的使用成本)和计算基础设施的不断进化(从专用的高端硬件、到低成本的商用硬件、到云计算服务),这两大因素推动数据仓库的架构大体经历了三个时代:软硬一体的一体机时代、存算一体的分布式时代以及存算分离的云原生时代。
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 版本的冷热数据分层也是一种存算分离的形态,只是实现了冷数据的存储分离。
发表回复