跳到主要内容
版本: 最新版本-3.5

架构

StarRocks 的架构很简单。整个系统只包含两种类型的组件:前端和后端。前端节点称为 FE。后端节点有两种类型,BECN (计算节点)。当使用数据的本地存储时,部署 BE;当数据存储在对象存储或 HDFS 上时,部署 CN。 StarRocks 不依赖于任何外部组件,从而简化了部署和维护。节点可以水平扩展,而不会造成服务中断。此外,StarRocks 具有元数据和服务数据的副本机制,可提高数据可靠性并有效防止单点故障 (SPOF)。

StarRocks 兼容 MySQL 协议并支持标准 SQL。用户可以轻松地从 MySQL 客户端连接到 StarRocks,以获得即时且有价值的见解。

架构选择

StarRocks 支持 Shared-Nothing (每个 BE 都有其本地存储上的一部分数据) 和 Shared-Data (所有数据都在对象存储或 HDFS 上,并且每个 CN 仅在本地存储上具有缓存)。您可以根据需要决定数据的存储位置。

Architecture choices

Shared-Nothing

本地存储为实时查询提供了更好的查询延迟。

作为一种典型的海量并行处理 (MPP) 数据库,StarRocks 支持 Shared-Nothing 架构。在此架构中,BE 负责数据存储和计算。直接访问 BE 模式下的本地数据允许本地计算,从而避免数据传输和数据复制,并提供超快的查询和分析性能。此架构支持多副本数据存储,增强了集群处理高并发查询的能力,并确保了数据可靠性。它非常适合追求最佳查询性能的场景。

shared-data-arch

节点

在 Shared-Nothing 架构中,StarRocks 由两种类型的节点组成:FE 和 BE。

  • FE 负责元数据管理和构建执行计划。
  • BE 执行查询计划并存储数据。 BE 利用本地存储来加速查询,并使用多副本机制来确保高数据可用性。
FE

FE 负责元数据管理、客户端连接管理、查询规划和查询调度。每个 FE 使用 BDB JE (Berkeley DB Java Edition) 在其内存中存储和维护元数据的完整副本,从而确保所有 FE 上的服务一致。 FE 可以充当 leader、follower 和 observer。如果 leader 节点崩溃,follower 会根据 Raft 协议选举出一个 leader。

FE 角色元数据管理Leader 选举
LeaderLeader FE 读取和写入元数据。 Follower 和 Observer FE 只能读取元数据。它们将元数据写入请求路由到 Leader FE。 Leader FE 更新元数据,然后使用 Raft 协议将元数据更改同步到 Follower 和 Observer FE。仅当元数据更改同步到超过一半的 Follower FE 时,数据写入才被视为成功。从技术上讲,Leader FE 也是一个 Follower 节点,并且是从 Follower FE 中选出的。要执行 Leader 选举,集群中必须有超过一半的 Follower FE 处于活动状态。当 Leader FE 失败时,Follower FE 将开始另一轮 Leader 选举。
FollowerFollower 只能读取元数据。它们从 Leader FE 同步和重播日志以更新元数据。Follower 参与 Leader 选举,这需要集群中超过一半的 Follower 处于活动状态。
ObserverObserver 从 Leader FE 同步和重播日志以更新元数据。Observer 主要用于增加集群的查询并发性。 Observer 不参与 Leader 选举,因此不会增加集群的 Leader 选择压力。
BE

BE 负责数据存储和 SQL 执行。

  • 数据存储:BE 具有等效的数据存储能力。 FE 根据预定义的规则将数据分发到 BE。 BE 转换摄取的数据,将数据写入所需的格式,并为数据生成索引。

  • SQL 执行:FE 根据查询的语义将每个 SQL 查询解析为逻辑执行计划,然后将逻辑计划转换为可以在 BE 上执行的物理执行计划。存储目标数据的 BE 执行查询。这消除了数据传输和复制的需要,从而实现了高查询性能。

Shared-Data

对象存储和 HDFS 提供了成本、可靠性和可扩展性优势。除了存储的可扩展性之外,可以添加和删除 CN 节点,而无需重新平衡数据,因为存储和计算是分开的。

在 Shared-Data 架构中,BE 被“计算节点 (CN)”取代,这些节点仅负责数据计算任务和缓存热数据。数据存储在低成本且可靠的远程存储系统中,例如 Amazon S3、GCP、Azure Blob Storage、MinIO 等。当缓存命中时,查询性能与 Shared-Nothing 架构相当。可以根据需要在几秒钟内添加或删除 CN 节点。此架构降低了存储成本,确保了更好的资源隔离以及高弹性和可扩展性。

Shared-Data 架构与其 Shared-Nothing 架构一样,保持着简单的架构。它仅包含两种类型的节点:FE 和 CN。唯一的区别是用户必须配置后端对象存储。

shared-data-arch

节点

Shared-Data 架构中的 FE 提供与 Shared-Nothing 架构中相同的功能。

BE 被 CN (计算节点) 取代,存储功能被卸载到对象存储或 HDFS。 CN 是无状态计算节点,执行 BE 的所有功能,除了数据存储。

存储

StarRocks Shared-Data 集群支持两种存储解决方案:对象存储 (例如,AWS S3、Google GCS、Azure Blob Storage 或 MinIO) 和 HDFS。

在 Shared-Data 集群中,数据文件格式与 Shared-Nothing 集群 (具有耦合的存储和计算) 的数据文件格式保持一致。数据被组织成段文件,并且各种索引技术在云原生表中被重用,云原生表是专门在 Shared-Data 集群中使用的表。

缓存

StarRocks Shared-Data 集群将数据存储和计算分离,允许每个独立扩展,从而降低成本并提高弹性。但是,此架构可能会影响查询性能。

为了减轻影响,StarRocks 建立了一个多层数据访问系统,包括内存、本地磁盘和远程存储,以更好地满足各种业务需求。

针对热数据的查询直接扫描缓存,然后扫描本地磁盘,而冷数据需要从对象存储加载到本地缓存中,以加速后续查询。通过将热数据保持在靠近计算单元的位置,StarRocks 实现了真正的高性能计算和经济高效的存储。此外,通过数据预取策略优化了对冷数据的访问,有效地消除了查询的性能限制。

创建表时可以启用缓存。如果启用了缓存,数据将被写入本地磁盘和后端对象存储。在查询期间,CN 节点首先从本地磁盘读取数据。如果未找到数据,将从后端对象存储中检索数据,并同时缓存在本地磁盘上。

动手学习

尝试快速入门以了解在实际场景中使用 StarRocks 的概况。