写点什么

墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0 版本特性解析与未来规划

作者:墨天轮
  • 2022 年 6 月 01 日
  • 本文字数:3870 字

    阅读完需:约 13 分钟

分享嘉宾衣国垒 Apache Doris Committer、SelectDB 联合创始人 &CTO

整理墨天轮社区


导读


大家好,我是来自Apache Doris社区的衣国垒,也是 SelectDB 的联合创始人,今天为大家分享的内容是《Apache Doris(incubating)1.0 版本特性解析与未来规划》。

Apache Doris 介绍

1、Apache Doris 发展历程

Apache Doris(incubating)是一个高性能、简单易用、支持实时的 MPP 架构分析型数据库,最早发源于百度内部的广告统计报表场景中,后来随着系统的多次优化迭代开始在百度内部得到大范围推广,成为百度统一的 OLAP 分析平台。2017 年正式在 GitHub 上开源,2018 年被捐献给 Apache 基金会进行孵化并正式更名为 Apache Doris(incubating)。


据粗略统计,目前在全球范围内有超过 500 家企业使用 Apache Doris,百度、美团、小米、京东、腾讯、网易、字节、新浪等众多一线互联网公司长期运行 Apache Doris 在其生产环境中。


图 1 Apache Doris 发展历程

2、Apache Doris 在数据分析中的定位

作为一款极速易用的分析型数据库,Apache Doris 提供了丰富的数据接入方式,存储在 RDBMS、日志或业务系统等源端的数据可以通过多种方式导入 Doris,也可以通过 CDC、Kafka 消息队列、流处理或批处理引擎(Flink、Storm、Spark)以及 ETL 工具等进行数据集成与处理后加载进 Doris 中,由 Doris 承接各种分析负载。与此同时,Apache Doris 还可以以外部表的方式访问来自 Elasticsearch、MySQL、PostgreSQL、Oracle 等数据库以及 Hive、Iceberg、Hudi 等湖仓中的数据,可以加速湖仓查询或者进行跨数据源的联邦查询。


基于 Apache Doris 出色的查询性能和丰富的数据接入方式,Apache Doris 可以高效支持多种业务场景,包括用户行为分析、日志检索分析、交易订单分析、自助 BI 平台、实时大屏及管理驾驶舱、用户画像等。


图 2 Apache Doris 在数据分析中的定位

3、Apache Doris 主要适合的分析负载

Apache Doris 适合的分析负载可以概括为以下四个场景:


  • 多维报表分析:适合面向企业内部业务人员的多维报表,可以高效承载超高并发和毫秒级别查询延时的业务需求。

  • Ad-hoc 分析:适合企业内部数据分析师在自助 BI 分析平台上进行交互式数据探索,查询模式灵活多变、数据吞吐要求高。

  • 统一数仓:通过一个平台满足统一的数据仓库建设需求,简化繁琐的大数据技术栈,通过资源隔离来同时满足不同业务对数据处理和应用的多样需求。

  • 湖仓加速和联邦分析:以外表的形式查询位于离线数仓 hive 以及数据湖 Iceberg, Hudi, Delta lake 中的数据,借助高效向量化执行引擎和优化器,实现数据分析效率数倍的提升。


图 3 Apache Doris 适合分析负载的四个场景


目前,Apache Doris 的开源用户遍布国内主流的互联网公司,除此之外、Apache Doris 也被应用在物流、制造业,金融业,游戏等领域。


图 4 Apache Doris 部分开源用户

4、Apache Doris 核心技术

Apache Doris 的第一个核心技术是简单易用


首先是架构简单,Doris 只有两个主进程模块,一个是 Frontend(FE),可以理解为 Doris 的管控节点,主要负责用户请求的接入、查询计划的解析、元数据的存储和集群管理相关工作。另一个是 Backend(BE),主要负责数据存储、查询计划的执行。Apache Doris 没有任何外部组件(如 Zookeeper、HDFS 等)依赖的,这种高度集成的架构设计极大的简化了一款分布式系统的运维成本。同时 FE 和 BE 这两类进程都是可以横向扩展的,并且扩容缩容过程非常简单。


其次是使用简单,Apache Doris 支持标准 SQL,可以支持聚合、排序、过滤以及多表 Join、子查询、窗口函数等语法并支持 UDF 和 UDAF。并且 Apache Doris 高度兼容 MySQL 协议,用户可以使用各类 BI 以及客户端工具轻松对接 Doris。


图 5 Apache Doris 核心技术:简单易用


Apache Doris 的第二个核心技术是存储引擎的性能卓越


首先表现在列式存储引擎,数据按照列存储,在查询时可以减少无用数据的扫描,并且通过多种编码方式实现了超高的数据压缩比,同时丰富的索引结构也可以进一步减少数据扫描量。当前 Apache Doris 支持 sorted short key、Min/max、Bloom filter、invert index 等多种索数据引。


其次 Apache Doris 的性能卓越还表现在场景优化的存储模型,aggregate key 模型可以通过预聚合大幅提升性能、unique key 模型可以在相同 key 列上进行数据覆盖、实现行级别数据更新,duplicate key 模型可以保存最明细数据。在数据模型之上,Apache Doris 还提供了强一致的物化视图,物化视图表与基表的数据始终保持一致性,用户查询时还可以自动匹配最优的物化视图返回查询结果。


图 6 Apache Doris 存储引擎的卓越性能


Apache Doris 的第三个核心技术是查询引擎的性能卓越


首先是向量化执行引擎。向量化执行引擎是 Apache Doris 在 1.0 版本新增的功能,过去 Apache Doris 的 SQL 执行引擎是基于行式内存格式以及基于传统的火山模型进行设计的,在进行 SQL 算子与函数运算时存在非必要的开销,导致 Apache Doris 执行引擎的效率受限,并不适应现代 CPU 的体系结构。向量化执行引擎的目标是替换 Apache Doris 当前的行式 SQL 执行引擎,充分释放现代 CPU 的计算能力,突破在 SQL 执行引擎上的性能限制,发挥出极致的性能表现。


基于现代 CPU 的特点与火山模型的执行特点,向量化执行引擎重新设计了在列式存储系统的 SQL 执行引擎:


  • 重新组织内存的数据结构,用 Column 替换 Tuple,提高了计算时 Cache 亲和度,分支预测与预取内存的友好度

  • 分批进行类型判断,在本次批次中都使用类型判断时确定的类型,将每一行类型判断的虚函数开销分摊到批量级别。

  • 通过批级别的类型判断,消除了虚函数的调用,让编译器有函数内联以及 SIMD 优化的机会


基于以上特性,向量化执行引擎大大提高了 CPU 在 SQL 执行时的效率,经过内部测试,在款表聚合场景下性能有 5-10 倍的提升。


其次是基于分布式 MPP 的查询框架,Doris 在执行 SQL 时可以在节点间与节点内并行执行,大幅提升了 SQL 执行的效率,同时也支持大表的 shuffle 分布式 Join,进一步利用多节点资源进行并行数据处理。


图 7 Apache Doris 查询引擎的卓越性能


同时,我们对查询引擎的多种算子进行优化。例如对原本阻塞型的聚合算子做了自适应两阶段的优化,避免数据聚合时不必要的等待时间。同时针对 Join 算子设计了 Runtime Fliter,在左右表进行 Join 的时候为连接列生成了过滤结构推给左表,大大减小了 Probe Table 需要传输的数据量。针对不同类型的数据,实现了 In/Min/Max/Bloom Filter 等不同类型的 Filter,并且 Filter 可以穿透吓退到最底层的扫描节点。


Runtime Filter 是非常重要的一个优化手段,经过我们测试,它对 SSB 标准测试数据集的部分查询有 2-10 倍提升。


图 8 Apache Doris 核心技术:查询引擎的卓越性能


稳定可靠是 Apache Doris 的第四个核心技术,分别体现在元数据、数据管理、导入事务、备份恢复上这四个方面。


  • 元数据管理:元数据采取内存结构+Log 的方式存储,可以保证高性能、高可用和高可靠。Log 存储使用 BDBJE,同时使用类 Paxos 的一致性协议复制到多节点。FE 可以通过配置多个节点来保证服务的高可用性以及查询性能的线型拓展。

  • 数据管理:数据可以根据 Range/List 分区和 Bucket Hash 分桶后划分成多个 Tablet(数据分片),每个 Tablet 都可以以多副本的形式复制到多台机器上存储,在节点下线或扩容时,数据分片能自动在多台节点上自动负载均衡。

  • 导入事务:通过两阶段提交保证多表导入的原子性,使用 MVCC 机制来做并发控制,通过外部导入的最少一次以及 Doris 内部的 lable 机制保证最多一次,最终实现 Exactly Once,数据不丢不重。

  • 备份恢复:Doris 支持将数据以文件的形式,备份到远端存储系统中。并通过恢复命令恢复到任意 Doris 集群基于此功能可以对数据定期的进行快照备份,也可以通过这个功能,在不同集群间进行数据迁移。


图 9 Apache Doris 核心技术:稳定可靠

未来规划

Apache Doris 社区的发展逐渐繁荣,累计贡献者规模已经增至 323 名,并处于持续增长中;月活跃贡献者已接近 70 人,提交超过 300 个 Commits。


图 10 Apache Doris 在 C++项目中登上 GitHub Trending 第二名


图 11 Apache Doris 在 2022 年的发展规划

关于 SelectDB

SelectDB 是一家开源技术公司,致力于为 Apache Doris 社区提供一个由全职工程师、产品经理和支持工程师组成的团队,繁荣开源社区生态,打造实时分析型数据库领域的国际工业界标准。基于 Doris 研发新一代云原生实时数仓 SelectDB,运行云上,为用户和客户提供开箱即用的能力。


目前公司已经完成天使轮和天使+轮融资,融资金额达 3 亿元人民币。


以下是我们的联系方式,我们很高兴与热爱技术的你共同交流。我今天的分享就到这里,谢谢大家!


问答环节

分享结束后,衣国垒老师也耐心解答观众们在问答区提出的疑问,我们也在此整理成视频,供大家查看、学习。


👇问题一览


  1. 向量化引擎在支持 simd 上是怎么优化的?

  2. Doris 可以替代 Greenplum、ES、ClickHouse 吗?

  3. Doris 可以跑标准的 TPCH 和 TPC-DS 吗?有没有相关的测试脚本分享一下。

  4. 多个 FE 是什么机制,属于多主吗,多个 FE 如何同时处理客户端的增删改查的?


点击原文可查看问题回答视频:https://www.modb.pro/db/407457


以上就是我今天分享的全部内容,谢谢大家!


更多精彩内容,欢迎大家观看现场视频回放:https://www.modb.pro/video/6388





欲了解更多可以进入👉墨天轮,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。


关注官方公众号: 墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯

发布于: 刚刚阅读数: 4
用户头像

墨天轮

关注

数据库技术爱好者 2019.11.22 加入

墨天轮社区围绕数据人的学习成长提供一站式的全面服务。我们的愿景是共同建设一个有温度的技术社区和全新的数据社群聚合体,以乐知乐享之志,成同心共济之果。

评论

发布
暂无评论
墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划_数据库_墨天轮_InfoQ写作社区