StarRocks系统架构

发布时间 2023-09-14 14:00:37作者: jsqup

系统架构图

FE

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

  2. 每个FE节点都会在内存保留一份完整的元数据,这样每个FE节点都能够提供无差别的服务。

  3. FE有三种角色:LeaderFE,Follower FE和Observer FE.Follower会通过类Paxos的BDBJE协议自动选举出一个Leader。

  • Leader
    ①从Follower中自动选出,需要集群中有半数以上的Follower节点存活,如果Leader节点失败,Follower会发起新一轮选举
    ②Leader节点会对元数据进行写操作,Follower和Observer只有读取权限
    ③Follower和Observer将元数据写入请求路由到Leader节点,Leader更新完数据后,会通过BDBJE协议同步给Follower和Observer。
    ④必须有半数以上的Follower节点同步成功才算元数据写入成功

  • Follower
    ①无写入权限,通过回放Leader的元数据日志来异步同步数据
    ②参与Leader选举,必须有半数以上的Follower节点同步成功才能算作元数据写入成功

  • Observer
    ①主要用于扩展集群的查询并发能力,可选部署
    ②不参与选主,不会增加集群的选主压力
    ③通过回放Leader的元数据日志来异步同步数据

BE

  1. BE是StarRocks的后端节点,负责数据存储、SQL执行等工作。
  • 数据存储方面,①StarRocks的BE节点都是完全对等的,FE按照一定策略将数据分配到对应的BE节点。
    ②BE负责将导入数据写成对应的格式存储下来,并生成相关索引

  • 在执行SQL计算时,①一条SQL语句首先会按照具体的语义规划成逻辑执行单元,然后再按照数据的分布情况拆分成具体的物理执行单元。
    ②物理执行单元会在对应的数据存储节点上执行,这样可以实现本地计算,避免数据的传输与拷贝,从而能够得到极致的查询性能。

  • 在进行Stream Load导入时,FE会选定一个BE节点作为Coordinator BE,负责将数据分发到其他BE节点。导入的最终结果由Coordinator BE返回给用户。

数据管理

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

  2. 一张表可以被划分成多个分区,一个分区内的数据可以根据一列或者多列进行分桶,将数据切分成多个Tablet.
    (Tablet是StarRocks中最小的数据管理单元。每个Tablet都会以多副本的形式存储在不同的BE节点中)

  3. 案例如下:StarRocks 的数据划分以及 Tablet 多副本机制

  • 表按照日期划分为4个分区,第一个分区切分成4个Tablet。每个Tablet使用3副本进行备份,分布在3个不同的BE节点上。

  • 由于一张表被切分成了多个Tablet,StarRocks在执行SQL语句时,可以对所有Tablet实现并发处理,从而充分的利用多机、多核提供的计算能力。

  • 用户也可以利用StarRocks数据的切分方式,将高并发请求压力分摊到多个物理节点,从而可以通过增加物理节点的方式来扩展系统支持高并发的能力。

  1. Tablet的分布方式与具体的物理节点没有相关性。
  • 在BE节点规模发生变化时,比如在扩容、缩容时,StarRocks可以做到无需停止服务,直接完成节点的增减(Tablet会随着节点的增减而移动)。

  • StarRocks支持Tablet多副本存储,默认副本数为三个。(保证数据存储的高可靠以及服务的高可用)。
    (在使用三副本的情况下,一个节点的异常不会影响服务的可用性,集群的读、写服务仍然能够正常进行。)