一、Doris简介

Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品,MPP技术即将同一个任务并行的分散到多个服务器和节点上,每个节点计算完成后,在将各自的结果汇总在一起得到最终的结果,与Hadoop相似,效率很高,亚秒级内即可查询出结果。

二、核心特性

  • 基于MPP(大规模并行处理)架构的分析型数据库
  • 性能卓越,PB级别数据毫秒/秒级响应
  • 支持标准SQL语言,兼容MySQL协议
  • 向量化执行器
  • 高效的聚合表技术
  • 新型预聚合技术Rollup
  • 高性能、高可用、高可靠
  • 极简运维,弹性伸缩

三、Doris特点

  • 性能卓越 TPC-H、TPC-DS性能领先,性价比高,高并发查询,100台集群可达10w QPS,流式导入单节点50MB/s,小批量导入毫秒延迟
  • 简单易用 高度兼容MySQL协议; 支持在线表结构变更高度集成,不依赖于外部存储系统
  • 扩展性强 架构优雅,单集群可用水平扩展到200台以上
  • 高可用性 多副本,元数据高可用

四、整体架构

Doris主要整合了Google Mesa数据模型,Apache Impala和Apache ORCFile的技术: (1)Mesa可用满足我们许多存储的需求,但是其本身不提供SQL查询引擎 (2)Impala是一个非常好的MPP SQL查询引擎,但是缺少完美的分布式存储引擎 (3)自研列式存储:存储层对存储数据的管理通过storage_root_path路径进行配置,路径可以是多个。存储目录下一层按照分桶进行组织,分桶目录下存放具体的tablet,按照tablet_id命名子目录。 这三种技术各有不同的功能和特点,组合这三种技术就能很好的实现Doris快速查询数据的功能。 在这里插入图片描述

五、系统架构

Doris使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户端直接访问Doris,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。 在这里插入图片描述

  • FE:Frontend,即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作
  • BE:Backend,即 Doris 的后端节点。主要负责数据存储与管理、查询计划执行等工作。
  • FE,BE都可线性扩展

六、元数据结构

在这里插入图片描述 Doris采用Paxos协议以及Memory+ Checkpoint + Journal的机制来确保元数据的高性能及高可靠。 元数据的每次更新,都会遵照以下几步:

  1. 先写入到磁盘的日志文件中
  2. 然后再写到内存中
  3. 最后定期checkpoint到本地磁盘上

相当于是一个纯内存的一个结构,也就是说所有的元数据都会缓存在内存之中,从而保证FE在宕机后能够快速恢复元数据,而且不丢失元数据。 Leader、follower和 observer它们三个构成一个可靠的服务,如果发生节点宕机的情况,一般是部署一个leader两个follower,目前来说基本上也是这么部署的。就是说三个节点去达到一个高可用服务。单机的节点故障的时候基本上三个就够了,因为FE节点毕竟它只存了一份元数据,它的压力不大,所以如果FE太多的时候它会去消耗机器资源,所以多数情况下三个就足够了,可以达到一个很高可用的元数据服务。

七、数据分发

在这里插入图片描述

  1. 数据主要都是存储在BE里面,BE节点上物理数据的可靠性通过多副本来实现,默认是3副本,副本数可配置且可随时动态调整,满足不同可用性级别的业务需求。FE调度BE上副本的分布与补齐。
  2. 如果说用户对可用性要求不高,而对资源的消耗比较敏感的话,我们可以在建表的时候选择建两副本或者一副本。比如在百度云上我们给用户建表的时候,有些用户对它的整个资源消耗比较敏感,因为他要付费,所以他可能会建两副本。但是我们一般不太建议用户建一副本,因为一副本的情况下可能一旦机器出问题了,数据直接就丢了,很难再恢复。一般是默认建三副本,这样基本可以保证一台机器单机节点宕机的情况下不会影响整个服务的正常运作。

总结

Doris是基于MPP技术的分析性数据库产品,具有性能卓越,简单易用的特点,Doris使用MySQL协议,使用MySQL客户端即可访问,该产品上只有负责接收和返回客户请求的FE节点和数据管理的BE节点,进行元数据的更新时都会遵循一定的规则,最后将数据存储到本地磁盘上。