Doris–基础–1.3–理论–架构
1、名词
1.1、FE(Frontend)
- Doris 的前端节点。
- 开发语言:以 Java 为主
- 功能
- 接收和返回 客户端请求
- 元数据 管理
- 集群 管理
- 生成 查询计划
1.2、BE(Backend)
- Doris 的后端节点。
- 开发语言:以 C++ 为主
- 功能:
- 负责 数据存储
- 负责 数据管理
- 执行 查询计划
1.3、Tablet
- 是一张表,是实际的物理存储单元
- 一张表按照分区和分桶后在BE构成分布式存储层中以Tablet为单位进行存储
- 每个Tablet包括元信息及若干个连续的RowSet
1.4、Rowset
- 是Tablet中一次数据变更的数据集合
2. 数据变更包括以下
1. 数据导入
2. 数据删除
3. 数据更新 - Rowset按版本信息进行记录。每次变更会生成一个版本
1.5、Version
- 由Start、End两个属性构成,维护数据变更的记录信息。
- 通常用来表示Rowset的版本范围,在一次新导入后生成一个Start,End相等的Rowset,在Compaction后生成一个带范围的Rowset版本
1.6、Segment
- 表示Rowset中的数据分段。
- 多个Segment构成一个Rowset
1.7、Compaction
连续版本的Rowset合并的过程成称为Compaction,合并过程中会对数据进行压缩操作
2、整体架构–主要技术
2.1、主要技术
Doris主要整合了以下技术
- Google Mesa(数据模型)
- Apache Impala(MPP Query Engine)
- Apache ORCFile(存储格式,编码和压缩)
2.2、为什么要将这三种技术整合?
- Google Mesa:可以满足我们许多存储需求的需求,但是Google Mesa本身不提供SQL查询引擎。
- Apache Impala:是一个非常好的MPP SQL查询引擎,但是缺少完美的分布式存储引擎。
- Apache ORCFile:
- 存储层对存储数据的管理通过storage_root_path路径进行配置,路径可以是多个。
- 存储目录下一层按照分桶进行组织,分桶目录下存放具体的tablet,按照tablet_id命名子目录。
因此选择了这三种技术的组合。
3、整体架构–极简架构
- Doris的架构很简洁,使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户端直接访问Doris,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。
- FE(Frontend),即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作
- BE(Backend),即 Doris 的后端节点。主要负责数据存储与管理、查询计划执行等工作。
- FE,BE都可线性扩展
- FE主要有两个角色
- 一个是follower,另一个是observer。
- 多个follower组成选举组,会选出一个master,master是follower的一个特例,Master跟follower,主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
- bserver节点仅从 leader 节点进行元数据同步,不参与选举。可以横向扩展以提供元数据的读服务的扩展性。
- 数据的可靠性由BE保证,BE会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
4、整体架构–MPP架构
4.1、各个数仓架构对比
4.2、MPP架构
假设我们有个如下的SQL语句
SELECT k1,SUM(v1) FROM A,B WHERE A.k2=B.k2 GROUP BY k1 ORDER BY SUM(v1)
该语句包含了合并、聚合计算、排序等多种操作;
在执行计划的时候,MPP 将其拆分成多份,分布到每台机器执行,最后再将结果汇总。
假如有10台机器,在大数据量下,这种查询执行方式可以使得查询性能达到10倍的提升。
4、整体架构–数据分布
- 从表的角度来看数据结构,用户的一张 Table 会拆成多个 Tablet,Tablet 会存成多副本,存储在不同的 BE 中,从而保证数据的高可用和高可靠。
- 数据主要都是存储在BE里面,BE节点上 物理数据 的 可靠性 通过多副本来实现
- 默认是3副本
- 副本数可配置且可随时动态调整,满足不同可用性级别的业务需求。
- 如果说用户对可用性要求不高,而对资源的消耗比较敏感的话,我们可以在建表的时候选择建两副本或者一副本。
5、整体架构–数据可靠性
- Doris采用 Paxos协议以及Memory+ Checkpoint + Journal的机制 来确保元数据的高性能及高可靠。元数据的每次更新,都会遵照以下几步:
- 首先写入到磁盘的日志文件中
- 然后再写到内存中
- 最后定期checkpoint到本地磁盘上
- Doris 内部自行管理数据的多副本和自动修复。保证数据的高可用、高可靠。在服务器宕机的情况下,服务依然可用,数据也不会丢失。