Apache Doris 存算分离架构设计亮点解析

实时数据仓库分享
2024/12/20
SelectDB

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

Apache Doris 的创新之路——存算分离

在数据分析领域,存算分离架构的兴起为 Apache Doris 带来了新的发展机遇。历史上,数据分析需求的不断提升(更大的数据规模、更快的处理速度、更低的使用成本)和计算基础设施的不断进化(从专用的高端硬件到低成本的商用硬件再到云计算服务),推动了数据仓库架构的演变。Apache Doris 诞生于存算一体的分布式时代,是典型的 Shared Nothing 架构,BE 节点上存储与计算紧密耦合,多 BE 节点采用 MPP 分布式计算架构。

在存算一体模式中,Apache Doris 整体由 Frontend(FE)和 Backend(BE)两类进程组成,其中 FE 节点主要负责用户请求接入、查询解析规划、元数据管理和集群管理等相关工作,BE 节点主要负责数据存储和查询计划的执行,多 BE 节点间采取 MPP 分布式计算架构,通过多副本一致性协议来帮助服务的高可用和数据的高可靠。

1.PNG

然而,随着云时代的到来,越来越多的企业希望 Apache Doris 能够针对云计算这种新型基础设施提供更加深度的适配,以便提供更加灵活强大的弹性能力。于是,飞轮科技(SelectDB)技术团队在基于Apache Doris 内核研发全托管企业级云数仓产品的过程中,设计并实现了全新的云原生存算分离架构(即 SelectDB Cloud)。

全新存算分离模式对计算与存储进行了解耦,计算节点不再存储主数据,而是引入共享存储层(HDFS 与对象存储)作为统一的数据主存储空间,计算资源和存储资源可以独立扩缩容,为用户带来了多方面价值:

1、负载隔离:多个计算集群共享同一份数据,用户可以使用多计算集群对不同业务或者在离线的负载进行隔离;

2、存储成本大幅降低:全量数据存储到成本更低且极其可靠的共享存储中,热数据仅在本地 Cache,相比存算一体三副本,存储成本最高下降至原先的 1/10;

3、计算资源弹性:数据不保存在计算节点,计算资源可以按照负载需求实现灵活弹性扩缩容,比如单个计算集群的扩缩容或者加减计算集群,弹性带来了资源配置的灵活性以及成本的降低;

4、系统鲁棒性的提升:数据存储到共享存储,Doris 不再有多副本一致性的逻辑,会大幅度简化分布式存储带来的复杂度,从而会提升系统的鲁棒性;

5、数据共享和克隆的灵活性:存算分离架构的灵活性不止在一个 Doris 集群内部,在跨 Doris 集群时也应该体现出灵活性,比如 Doris 集群 A 中的库表可以轻量地在 Doris 集群 B 中完成克隆,即只做元数据级别的复制,不做数据的复制。

Apache Doris 存算分离全新架构设计亮点

Apache Doris 全新存算分离架构最大的设计亮点在于将 FE 全内存的元数据模式演变成共享的元数据服务,这一方案的优势在于,元数据服务提供了全局一致的状态视图,任何节点可以直接提交写入,不再需要经过 FE 做 Publish。写入时数据进入共享存储,元数据进入元数据服务,可以有效控制共享存储上的小文件数量,同时单表的实时写入性能和存算一体相差无几,整个系统的写入能力不再受限于单 FE 的处理能力。

2.PNG

基于全局一致的状态视图,在数据 GC 时,我们采用了设计上容易证明正确性和效率更高的正向数据删除。具体而言,将共享存储中的数据纳入到在共享元数据服务提供的全局一致视图中,数据生成时绑定一个事务,元数据删除时也绑定一个事务,以此可以实现删除和写入不能一起成功,视图中记录了哪些数据需要删除,异步删除过程只需要根据事务记录正向删除数据即可,不需要反向 GC。

未来随着 FE 中 Tablet 相关的 Meta 进入共享服务,Doris 集群规模也不再受限于单 FE 内存。基于共享的元数据服务和正向的数据删除技术,在此基础上可以便捷地扩展数据共享、轻量克隆等功能。

存算分离架构的适用场景

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

如果已经使用公有云服务,那么存算分离架构绝对值得尝试;

拥有可靠的共享存储系统,比如 HDFS、Ceph、对象存储等;

需要极致弹性扩缩容,需要 K8S 容器化,需要运行在私有云上;

有专职的团队维护整个公司的数据仓库平台。