1.2.1 极简架构
从设计上来说,Doris融合了Google Mesa的数据存储模型、Apache的ORCFile存储格式、Apache Impala的查询引擎和MySQL交互协议,是一个拥有先进技术和先进架构的领先设计产品,如图1-4所示。
图1-4 Doris技术分解
在架构方面,Doris只有两类进程:一类是FE,可以理解为Doris的管理节点,主要负责用户请求的接入、查询计划的解析、元数据的存储和集群管理相关工作;另一类是BE,主要负责数据存储、查询计划执行。这两类进程都可以横向扩展。除此之外,Doris不依赖任何第三方系统(如HDFS、ZooKeeper等)。这种高度集成的架构极大地降低了运维成本。
FE节点包含Leader、Follower和Observer三种角色。默认一个集群只能有一个Leader,可以有多个Follower和Observer。其中,Leader和Follower组成一个Paxos选择组,如果Leader宕机,剩下的Follower会自动选出新的Leader,保证写入高可用。Observer同步Leader的数据,但是不参加选举。如果只部署一个FE,FE默认就是Leader。
FE节点主要包含存储管理模块、状态管理模块、协调模块、元数据模块和元数据缓存模块。存储管理模块负责管理所有的元数据信息,包括表信息、Tablet信息、Tablet的副本信息等,还负责管理用户的权限信息(即用户的认证信息和授权信息)和数据的导入任务等。状态管理模块负责管理所有BE进程的存活状态、查询负载等非持久化信息,并提供发布订阅接口。协调模块负责接收用户发来的请求,然后进行语句解析、生成执行规划,根据当前集群的状态,对执行规划进行调度。元数据模块负责对元数据的读写,只有Leader角色拥有此权限。元数据缓存模块负责同步元数据,以供语句解析、生成执行规划,主要是Follower和Observer角色拥有此权限。
BE节点可以无限扩展,并且所有BE节点的角色都是对等的。在集群足够大的情况下,部分BE节点下线不影响集群提供服务。BE节点主要由存储引擎和查询执行器组成。存储引擎负责管理节点本地的Tablet数据,发送或者接收数据并保存副本,定期合并、更新多个版本的数据,以减少存储占用。存储引擎还负责接收来自查询执行器的数据读取请求和批量数据导入请求。在MPP集群中执行查询时,会分解为一个树状的执行树,由Coordinator来协调执行,树的叶子节点也叫计划片断(PlanFragment),每个PlanFragment分配一个BE节点的查询执行器。