在刚刚过去的 Doris Summit Asia 2023 峰会上,Apache Doris PMC 成员、飞轮科技技术副总裁衣国垒带来了“与创新者同行”的主题演讲,回顾了 Apache Doris 在过去一年所取得的技术突破与社区发展,重新思考了在面对海量数据实时分析上的挑战与机遇,全面介绍了 Apache Doris 在未来的迭代计划与演进方向。
以下为衣国垒在峰会上的演讲节选,以衣国垒第一人称叙述,经编辑。
非常高兴可以看到这么多朋友共聚一堂,现场几乎座无虚席。我也相信,同样有很多朋友在线上观看峰会直播,跨越空间的距离,与我们共享此刻。
今年的主题是「与创新者同行」,按照惯例往往在开场需要对主题进行阐述,不过我希望把这一环节放在最后,希望大家能跟随我的节奏。相信在今天的分享结束后,大家会对这一主题有着更加深刻的认识。
回顾 Apache Doris 过去的发展历程,如果用一个关键词来形容 Apache Doris 在过去的 2022 年所取得的种种收获,我们相信是“厚积而薄发后的全面进化”—— 在 2022 年所发布的版本中,我们全面启用了向量化执行引擎、实现了主键模型上 Merge-on-Write 数据更新模式、引入统一的数据湖对接框架 Multi-Catalog 以及毫秒级的 Schema Change 等重磅特性,在性能、稳定性、易用性等取得了全面进化。
而对于即将过去的 2023 年,我们迎来了具有里程碑意义的 2.0 版本。从贡献者和 Commits 数据可以看到,2.0 版本合入的 PR 超过 4100 个,比 1.2 版本增加了 70%、比去年同期发布的 1.1 版本更是增长了近 10 倍,参与这一版本开发的贡献者数量达 275 之多,这一版本的发布也标志着我们实现了“里程碑式的跨越”:
而在社区生态方面,Apache Doris 社区同样也愈加繁荣,从开发者规模和开发者活跃度指标上可见:
这一系列数字无不说明,Apache Doris 现在已经成为全球最活跃的开源大数据项目之一。
除此以外,我们也看到贡献者来源更加多元化,广泛分布于国内的数据库独角兽企业和众多一线互联网公司,我们也看到阿里云、腾讯云、华为云、百度智能云、天翼云以及火山引擎等顶尖云厂商也纷纷投入社区共建,并提供了基于 Apache Doris 的云上数仓托管服务,给予开源用户更多选择。
在技术加速迭代的同时,我们也看到有越来越多的用户开始选择相信 Apache Doris,社区已经聚集了超过 30000 名数据库以及大数据相关领域的工程师,享受由 Apache Doris 带来的极致分析体验。
在过去许多社区用户的印象中,Apache Doris 更多是被互联网企业所使用,例如百度、美团、小米、京东、腾讯等互联网一线企业。而现如今所覆盖的行业领域已越来越广泛,不论是金融、政企、电信、制造亦或是交通、物流、快速消费品行业等,都有着许多企业在其核心分析业务中应用 Apache Doris。
在此我很高兴地宣布,截至目前 Apache Doris 在全球范围的用户规模已经超过了 4000 家!这 4000 多家企业用户中,绝大多数都与我们有着直接的接触,不论是反馈需求、参与测试、提交代码或是分享实践经验,都在以他们的方式回馈和贡献社区。他们中的许多也参与了今天的峰会分享,我们也期待他们真实业务场景的经验收获能为更多人带来启发。
在如此庞大的用户规模下,Apache Doris 已成为各行各业用户在使用实时数据仓库的首选,成为开源实时数据仓库领域的事实标准!
从 Apache Doris 诞生之初,就一直致力于解决人们海量数据实时分析的难题。而从过去版本的发展脉络中,我们同样可以清晰感受到,为了更好地应对用户在真实业务场景中的挑战,Apache Doris 在朝着实时分析、融合统一和云原生这三大趋势上持续演进,这也是我们在 2023 年聚焦的开发方向;
开头我们也曾提到过,在 Apache Doris 2.0 版本中我们实现了盲测性能 10 倍以上的提升,这其中最重要的部分在于 CBO 查询优化器和自适应的 Pipeline 并行执行模型。
CBO 查询优化器:过去 Apache Doris 多服务于在线报表业务,这些场景往往是将数据打平存储进宽表中以应对分析,即使存在多表关联往往也较为简单,因此发挥性能的关键在于扫描和聚合的效率。而当越来越多用户基于 Apache Doris 进行复杂计算或 ELT/ETL 批量数据处理时,大宽表或者预聚合表这种空间换时间的方式很难发挥作用,需要人工介入进行调优并改写 SQL ,查询性能遭遇到挑战。为此我们花费了大量的时间进行了查询优化器的重构,并在 Apache Doris 2.0 版本中正式发布。在面对数千上万行的复杂 SQL 或者数十张表的关联计算时,CBO 优化器可以生成更高效的 Query Plan 并提升查询性能,减少因人工调优带来的人力消耗和心智成本。
Pipeline 并行执行模型:过去版本中在发起 Query 时 BE 执行并发度需要进行手工调整,同样也需要人工介入,并且大小查询在同一个集群执行时会遭遇资源抢占问题。为此我们引入了 Pipeline 执行模型作为查询执行引擎,系统自动调整执行并行度,并可以保证大小查询的稳定执行,提升了 Apache Doris 对于 CPU 的利用效率,因此在混合负载场景下查询性能和稳定性都得到了全面提升。
与此同时,在 Apache Doris 2.0.0 版本我们引入了全新的行列混合存储以及行级 Cache,使得单次读取整行数据时效率更高、大大减少磁盘访问次数,同时引入了点查询短路径优化、跳过执行引擎并直接使用快速高效的读路径来检索所需的数据,并引入了预处理语句复用执行 SQL 解析来减少 FE 开销,在并发能力上实现了数量级的提升。
面向高并发 Data Serving 场景,实现了单节点 30000 QPS 的并发表现,较过去版本点查询并发能力提升超 20 倍。
在多维度检索场景中,我们同样引入了倒排索引来提升性能,在关键字模糊查询、等值查询和范围查询等场景中均取得了显著的查询性能和并发能力提升。
导入性能优化:聚焦于实时分析,我们在过去的几个版本中在不断增强实时分析能力,其中端到端的数据实时写入能力是优化的重要方向,在 Apache Doris 2.0 版本中,我们进一步强化了这一能力。通过 Memtable 并行下刷、单副本导入等优化,使实时导入性能获得 2-8 倍的提升。
Merge-on-Write:Unique Key 主键模型的 Merge-on-Write 数据更新模式最初是在 Apache Doris 1.2 版本中引入,而在 Apache Doris 2.0 版本中这一能力得到进一步优化,功能稳定性得到大幅提升,并通过写入性能的优化实现了单节点 40w 行每秒 Upsert 操作的峰值写入吞吐,同时引入了数据的关联更新以及部分列更新,实现了对各类更新操作的完整支持。
了解更多:10x 查询性能提升,全新 Unique Key 的设计与实现|新特性解读
湖仓一体:在 Apache Doris 1.2 版本中我们引入了 Multi-Catalog 功能,支持了多种异构数据源的元数据自动映射与同步,实现了便捷的元数据和数据打通。在 2.0.0 版本中,我们进一步对数据联邦分析能力进行了加强,引入了更多数据源,并针对用户的实际生产环境做了诸多性能优化,在真实工作负载情况下查询性能得到大幅提升。这一框架也帮助我们可以更好进行跨源的数据同步,只需要简单的 insert into select 即可实现数据快速写入 Doris 中。
了解更多:查询性能较 Trino/Presto 3-10 倍提升!Apache Doris 极速数据湖分析深度解读
半结构化数据分析与日志检索分析:在 Apache Doris 2.0.0 版本中我们提供了原生的半结构化数据支持,在已有的 JSON、Array 基础之上增加了复杂类型 Map,并基于 Light Schema Change 功能实现了 Schema Evolution。与此同时,2.0.0 版本新引入的倒排索引和高性能文本分析算法全面加强了 Apache Doris 在日志检索分析场景的能力,可以支持更高效的任意维度分析和全文检索。结合过去在大规模数据写入和低成本存储等方面的优势,相对于业内常见的日志分析解决方案,基于 Apache Doris 构建的新一代日志检索分析平台实现了 10 倍以上的性价比提升。
了解更多:如何基于 Apache Doris 构建新一代日志分析平台|解决方案
更精细化的多租户与资源管理方案:当单个集群应对多种分析负载时,随之而来的问题即如何保证相互之间的资源抢占,为此在 2.0 版本中我们引入了资源隔离方案,通过对 Workload 进行分组管理,以保证内存和 CPU 资源的灵活调配和管控,此外我们还引入了查询排队的功能,在创建 Workload Group 时可以设置最大查询数,超出最大并发的查询将会进行队列中等待执行,以此来缓解高负载下系统的压力。
降存储成本:在存储方面,冷热数据往往面临不同频次的查询和响应速度要求,因此通常可以将冷数据存储在成本更低的存储介质中。因此在 2.0 版本中推出了冷热数据分层功能,冷热数据分层功能使 Apache Doris 可以将冷数据下沉到存储成本更加低廉的对象存储中,同时冷数据在对象存储上的保存方式也从多副本变为单副本,存储成本进一步降至原先的三分之一,同时也减少了因存储附加的计算资源成本和网络开销成本。通过实际测算,存储成本最高可以降低超过 70%。
了解更多:Apache Doris 冷热分层技术如何实现存储成本降低 70%?|新版本特性
支持部署在公有云/私有云/K8s:面对更多用户在公有云、私有云以及 K8s 等环境的部署要求,我们开发了 K8s Operator,可以实现对 FE、BE以及 Compute Node、Broker 等所有节点的部署、扩缩容、健康检查等一系列运维工作,此外还支持对 Compute Node 节点 Auto Scaling ,根据自机器的负载进行自动扩容。这一功能目前已经在社区用户中大规模试用,并将在后续的版本中正式发布出来。
实现跨集群复制:在 Apache Doris 2.0.0 版本中,我们同样引入 CCR 的功能在库/表级别将源集群的数据变更同步到目标集群,可以更好实现读写负载分离以及多机房备份,并可以更好支持不同场景的跨集群复制和灾备需求。
回顾完在 2023 年的进展后,承前而启后,该聊聊正在做以及未来即将要做的事情。
定位于实时数据仓库,后续 Apache Doris 社区仍会继续坚守实时分析、融合统一及云原生化这三大方向不变,每一方向都有许多有意义的工作在陆续开展中。
查询引擎方面,在即将发布的 2.1 版本中,CBO 查询优化器将实现全自动的统计信息收集,并提供丰富的 Hint 语法,在优化器规则失效的时候可以支持手动调整规则,我们也将会发布 TPC-DS 的性能测试报告。查询算子落盘和多表物化视图是社区用户呼声已久的功能,也将于 2.1 版本加入进来,同时我们还将引入 Union All 算子并行执行来进一步加速 ETL 操作的执行性能,后续用户在 Apache Doris 进行大批量数据处理将会执行得更快更稳定更简易。我们还会引入新的 Join 算法,将多表 Join 性能进一步至之前的两倍。
实时数据写入方面,我们将对所有数据写入的语义进行统一,无论是关系型数据库、数据流、本地文件或者数据湖的数据文件,对于 Apache Doris 而言都将统一具象为关系表、可以通过 insert into 的统一语义来实现数据写入。同时我们还将简化数据写入的链路,通过内置的 Job 调度来执行数据写入,避免引入第三方的数据同步组件。我们将引入服务端攒批机制,在上游数据高频写入时通过服务端攒批来避免小文件合并问题、降低数据库的写入压力。
实时数据更新方面,Merge-on-Write 模式将会默认开启,以此实现任意列的灵活更新,后续将基于 Merge-on-Write 实现所有数据模型的统一,减少用户在各种数据模型上的选择。
在可观测性方面,我们将为用户提供全新的 Profile 便于用户定位算子执行情况,同时支持查询任务的进度动态展示,并可以集成至 Doris Manager 中以可视化的方式展现,这部分功能已经开发就绪、在 2.1 版本中即将上线。
在湖仓一体场景上,我们会充分结合多表物化视图与内置 Job 调度的能力,将物化视图拓展到数据湖的多种数据源上,无需任何其他组件、依靠自身调度能力即可实现从数据湖到数据仓库的 ETL 作业以及数仓分层建模。在 2.0 版本中我们已经实现了对 JDBC 数据源的写回操作,后续对数据的写入将会拓展到 Iceberg、Hudi、Paimon 等,实现数据查询分析的更完整闭环。
除了读取更多数据源的数据之外,Apache Doris 也在打通被外部访问的数据通道。目前 Doris 对外输出数据的接口采取了 MySQL 连接协议,在应对大规模数据读取或者数据科学场景时(例如 Pandas 之类的数据科学引擎),MySQL 协议的吞吐成为了系统瓶颈,因此在后续版本中我们引入了基于 Arrow Flight 的高速数据读取接口,直接通过 BE 将数据进行传输,在实际测试过程中数据吞吐性能较过去提升了超过 100 倍。
在半结构化数据分析和日志分析场景中,我们会增加倒排索引对更加复杂类型的支持,包括对于 Array、Map、GEO 等复杂类型。同时应对日志场景对存储字段 Schema Less 的需求,我们会在 2.1 版本中引入 Variant 数据类型,可以支持任意类型、任意形状的 JSON 格式文档数据,可以支持自动动态地处理列增加或类型变更,完全不需要繁琐的 DDL 操作以及 Schema Change 操作。
在负载管理方面,我们仍会持续探索灵活的混合负载管理, 支持通过SQL 来创建和管理Workload Group 并调整资源配置,保证负载隔离性的同时实现资源利用率的最大化。
在之前的文章中我们曾介绍到 SelectDB Cloud 存算分离版本将会合入社区,但代码结构整理、兼容性改造以及合入的工作量超过我们预期,好在这一工作已经进入尾声。在 Apache Doris 2.1 版本中所有代码结构的调整将会完成,预计在 2.2 版本中将会面向社区全面可用,届时大家都可以感受全新云原生架构带来的极致弹性,敬请期待。
在演讲的最后,我想介绍下本次峰会筹备的幕后故事。我们一直在思考该传达什么样的理念给所有社区用户,但一直没有找到特别精准的表达。
在回顾了 Apache Doris 从诞生至今这十年的发展过程后,我们想到,这不就是一个讲述技术创新的故事么?
在 SQL on Hadoop 的时代,Doris 选择独立于 Hadoop 生态、不依赖 HDFS 进行数据存储、不依赖 Zookeeper 进行分布式管控,任一进程都可实现在线扩缩容并保证高可用;面对语法各异的大数据组件中,Doris 选择支持标准 SQL 并兼容 MySQL 协议,极大简化了用户的使用门槛;基于自研的预聚合存储引擎、物化视图和 MPP 执行框架,充分利用多机多核的并行计算能力,实现了大规模数据上的极速查询性能……正是因为坚持技术创新才使得 Apache Doris 的生命力愈加旺盛。
到现如今,我们在 Apache Doris 中引入了诸多的功能创新点,倒排索引、行列混存、毫秒级在线 Schema Change、Merge-on-Write 写时合并、Variant 数据类型 …… 每一步都是在持续引领技术创新。
所以这里的「与创新者同行」有几层含义:
选择 Apache Doris,就是选择与众多创新者同行。
在最后,我们也致敬每一位追风赶月的创新者们,也期待与更多创新者与一同前行,探索数据世界的更多可能性。