查看原文
其他

Doris企业架构选型总结:存算分离与一体化的对比与应用场景分析

涤生-chao哥 涤生大数据
2024-12-05


Apache Doris概述

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

如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数据仓库 Apache Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。

  • 报表分析

  • 实时看板(Dashboards)

  • 面向企业内部分析师和管理者的报表

  • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。

  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Apache Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。

  • 湖仓一体(Data Lakehouse):通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 等离线湖仓中的数据,在避免数据拷贝的前提下,查询性能大幅提升。

  • 日志检索分析:在 Apache Doris 2.0 版本中,支持了倒排索引和全文检索,能够很好的满足日志检索分析的场景,并且依赖其高效的查询引擎和存储引擎,相比传统的日志检索分析的方案可以有 10 倍性价比的优势。

  • 统一数仓构建:一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Apache Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。


存算分离 vs 存算一体

Doris 的整体架构由两类进程组成:Frontend (FE) 和 Backend (BE)。其中 FE 主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作;BE 主要负责数据存储、查询计划的执行。而不论是存算一体还是存算分离都是基于这两类进程进行构建。

存算分离架构分析

从 3.0.0 版本开始,Doris 支持计算存储解耦模式,允许用户通过多个计算集群对业务负载进行物理隔离,实现读写分离。该模式通过利用成熟的对象存储或 HDFS 大幅降低存储成本,并缓解磁盘均衡、多个 BE 节点离线导致数据丢失等运维复杂性。(SelectDB Cloud版本很早就有了云原生存算分离架构)

Doris 存算分离的整体架构为三层结构:元数据层、计算层、数据存储层。

元数据层:提供系统的元数据服务,如数据库表、Schema、Rowset元数据、事务等。

  • FE 主要存放库表元数据,Job 以及权限等 MySQL 协议依赖的信息;

  • Meta Service 是 Doris 存算分离元数据服务,主要负责处理导入事务,Tablet Meta,Rowset Meta 以及集群资源管理。这是一个可以横向扩展的无状态服务,它依赖了一个高性能分布式事务 KV(即 FoundationDB)来存储元数据。

计算层:负责执行查询计划并通过计算集群提供负载隔离。计算节点完全无状态,本地数据作为远程存储的缓存,以加速查询。

  • Cache上会缓存一部分 Tablet 元数据和数据以提高查询性能

数据存储层:数据持久化到共享存储,目前支持S3、OSS、COS、GCS、Azure Blob、MinIO、BOS、HDFS。

  • 共享存储主要存放数据文件,包括 Segment 文件、反向索引的索引文件等。

存算一体架构分析

存算一体化架构是Doris自诞生以来的核心架构,也是未来一直会存在的架构。存算分离是趋势,但是存算一体仍有一席之地!

FE:主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。

BE: 主要负责数据存储、查询计划的执行。

在存算一体架构下,BE 节点上存储与计算紧密耦合,数据主要存储在 BE 节点上,多 BE 节点采用 MPP 分布式计算架构。其中,FE和BE都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。

 

如何根据业务需求选择架构

大家一直说,存算分离是未来发展的必然趋势,那我们先分析存算分离架构到底解决了什么问题。

存算分离的特点如下:

  • 资源独立扩展:存储和计算资源可以根据业务需求分别进行扩展和优化,不必再同时增加存储和计算资源。

  • 资源弹性管理:计算资源可以根据负载情况灵活调度和管理,存储资源则可以独立进行优化和管理。

  • 降低存储成本:采用共享存储或云存储,能够显著降低存储的成本,并提高存储资源的利用率。

  • 计算资源的高效利用:计算资源不再被存储需求所束缚,可以针对不同的计算任务进行高效利用和调度。

  • 高可用性和数据安全性:存储和计算的分离提高了系统的高可用性和容灾能力,数据可以集中管理和备份,提高数据的安全性。

  • 资源隔离能力:存算分离体系中可以将不同的计算资源按组别划分,不同的计算资源组之间可以做到互相之间完全的物理隔离。

这些特点自然带来的就是成本的极大节约(对象存储的成本更低,而且不需要考虑多副本),资源根据业务需求弹性伸缩,按需分配(最大化的提高了资源利用率),数据的高可用和资源隔离(对象存储可通过纠删码或者多副本来实现数据可靠性,同时不同的资源能够按组划分)。

这些似乎看起来很完美的解决企业面临的重大问题。但是他这些架构特点也会带来一些弊端。

  • 网络延迟问题:由于计算和存储分离在不同节点或不同数据中心,数据在计算节点与存储之间的传输会引入网络延迟,即使你可以通过预热一部分数据来提升查询效率,但是如果缓存数据没有命中,这就需要从远端对象存储拉取数据,这个效率可想而知。

  • 流量激增问题:纵然存算分离的弹性扩缩容是为了解决不同时间段,业务低谷或者峰谷的问题,但是在应对非预期流量暴增的情况下,计算资源是无法迅速响应的。

  • 数据一致性和同步问题:由于数据存储在共享存储系统中,而且由于资源隔离的问题,不同的计算组的所做的计算任务是不同的,那么数据一致性和同步需要额外的机制来保障,这就考虑像传统TP库一样来加锁了,随之而来的就是系统的设计和实现难度的增加。

  • 架构复杂度增加:存算分离架构引入了更多的组件,增加了系统的复杂性和运维的难度。从上面Doris 的架构图我们就可以看出来。

很明显,存算分离架构并不是万能的。他在解决这些问题的时候,自然也带来了一些其他的问题。那既然存算分离有利有弊,我们该如何合理选择架构呢?

这里主要考虑的问题存算一体能否解决上面的问题,或者规避上面的问题,又或者是在不同的问题之间做权衡。

  • 资源独立扩展:Doris自从1.2.1版就引入计算节点(Compute Node)功能。计算节点作为一种特殊类型的 BE 节点,没有数据存储能力,只负责数据计算。因此,可以将计算节点看做是无状态的 BE 节点,可以方便的进行节点的增加和删除。

  • 资源弹性管理:这块只能是综合考虑了,唯一能做到弹性的就是计算节点的弹性管理,存储节点的上下线都是比较耗时的。

  • 降低存储成本:这在很多OLAP的数据库都是可以通过冷热分层来解决的,Doris也是如此。

  • 计算资源的高效利用:类似资源弹性管理。

  • 高可用性和数据安全性:这块可以通过多副本来解决,当然了,也会带来一定的存储成本的增加。

  • 资源隔离能力:Resource Group 和 WorkLoad Group 对于资源隔离来说也是一种不错的解决方案。

这样来看,几乎大部分存算分离的场景在存算一体的架构中,都能有较为合理的方式来解决。那针对这些问题,该如何选择架构呢?

这不仅取决于你的业务,更取决于你公司的实际资源情况。中小公司没有太大的必要搞存算分离,收益不明显,甚至会带来更多的运维问题。而对于一些大的云厂商(本身就有非常大的资源可供分配)、或者大型企业(整个企业业务众多,资源用量大,有专门的运维团队,降本增效效果明显)是完全可以考虑存算分离的架构的。

请谨记:没有绝对好的架构,只有更适合业务的架构!

涤生大数据往期精彩推荐

1.企业数仓DQC数据质量管理实践篇

2.企业数据治理实战总结--数仓面试必备

3.OneData理论案例实战—企业级数仓业务过程

4.中大厂数仓模型规范与度量指标有哪些?

5.手把手教你搭建用户画像系统(入门篇上)

6.手把手教你搭建用户画像系统(入门篇下)

7.SQL优化之诊断篇:快速定位生产性能问题实践

8.SQL之优化篇:一文搞懂如何优化线上任务性能,增效降本!

9.新能源趋势下一个简单的数仓项目,助力理解数仓模型

10.基于FlinkSQL +Hbase在O2O场景营销域实时数仓的实践

11.开发实战角度:distinct实现原理及具体优化总结

12.涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(一)

13.涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(二)

14.5分钟了解实时车联网,车联网(IoV)OLAP 解决方案是怎样的?

15.企业级Apache Kafka集群策略:Kakfa最佳实践总结

16.玩转Spark小文件合并与文件读写提交机制

17.一文详解Spark内存模型原理,面试轻松搞定

18.大厂8年老司机漫谈数仓架构

19.一文带你深入吃透Spark的窗口函数

20.大数据实战:基于Flink+ODPS进行最近N天实时标签构建

21.数仓面试高频-如何在Hive中实现拉链表

22.数仓面试还不懂什么是基线管理?

23.传说中的热点值打散之代码怎么写? 

24.列转行经典实现,细谈hive中的爆炸函数

25.玩转大厂金融风控体系建设

26.实际开发中:如何有效运用Spark Catalyst的执行流程


继续滑动看下一个
涤生大数据
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存