StarRocks2.3 MPP数据库架构

160 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

  • StarRocks 架构简洁,整个系统的核心只有 FE(Frontend)BE(Backend) 两类进程,不依赖任何外部组件,方便部署与维护。

  • FE 和 BE 模块都可以在线水平扩展,元数据和业务数据都有副本机制,确保整个系统无单点。

  • 提供 MySQL 协议接口,支持标准 SQL 语法。用户可通过 MySQL 客户端方便地查询和分析 StarRocks 中的数据。

system_architecture

1. FE(前端节点:管理)

FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。

两种角色:Follower 和 Observer。Follower 会通过类 Paxos 的 BDBJE 协议选主出一个 Leader。三者区别如下:

  • Leader
    • 只有 Leader 节点会对元数据进行写操作,Follower 和 Observer 只有读取权限。
    • Leader 从 Follower 中选举。如果 Leader 节点失败,Follower 会发起新一轮选主。
  • Follower
    • 只有元数据读取权限,无写入权限。
  • Observer
    • 主要用于扩展集群的查询并发能力,可选部署。
    • 不参与选主,不会增加集群选主压力。

2. BE(后端节点:数据存储、SQL执行)

BE 是 StarRocks 的后端节点,负责数据存储、SQL执行等工作。

数据存储

BE 节点都是完全对等的,FE 按照一定策略将数据分配到对应的 BE 节点。

SQL执行

首先会按照具体的语义规划成逻辑执行单元,然后再按照数据的分布情况拆分成具体的物理执行单元

物理执行单元会在对应的数据存储节点上执行,这样可以实现本地计算,避免数据的传输与拷贝,从而能够得到极致的查询性能。

3. 数据管理

StarRocks 使用列式存储,采用分区分桶机制进行数据管理。

如下,展示了 StarRocks 的数据划分以及 Tablet 多副本机制。图中,表按照日期划分为 4 个分区,第一个分区进一步切分成 4 个 Tablet。每个 Tablet 使用 3 副本进行备份,分布在 3 个不同的 BE 节点上。

data_management

(1)分区:如将一张表按照时间来进行分区,粒度可以是一天,或者一周等。

(2)分桶:一个分区内的数据可以根据一列或者多列进行分桶,将数据切分成多个 Tablet。(Tablet 是 StarRocks 中最小的数据管理单元。每个 Tablet 都会以多副本(replica) 的形式存储在不同的 BE 节点中。您可以自行指定 Tablet 的个数和大小。)

(3)其它:系统支持高并发的能力。StarRocks 可以做到无需停止服务,直接完成节点的增减。StarRocks 支持 Tablet 多副本存储,默认副本数为三个,多副本能够保证数据存储的高可靠以及服务的高可用。另外,增加副本数还有助于提高系统的高并发查询能力