互联网公司 A,以售卖在线广告来获得收入。这家公司想为广告主提供一个实时报表平台,为客户实时分析消费数据,作为广告主投放广告的决策基础。
互联网公司 B,计划开发运营一款 APP。这家公司想对 APP 用户进行行为分析,分析影响用户转换率、留存率的因素。
互联网公司 C,以电子商务为主营业务。这家公司想对订单数据进行分析、实时监测订单状态变更,以动态调整运营策略。
业务属性不同的 A / B / C 三家公司,都想对数据进行实时分析,对它们来说,什么样的系统能够满足需求呢?
首先,系统必须能够存储 PB 级的用户行为日志、广告、订单等数据,并对海量数据进行实时分析,为业务提供数据支撑。再者,A、B、C 公司提供的皆是在线分析服务,考虑到业务实际运行中的软硬件故障,系统必须能够容忍异常、保证服务 7×24 小时可用。
本文将讲述 StarRocks 管理海量数据、提供高可用服务等方面的工作和思考。
01 系统架构
面对海量数据,业界的通行做法是通过搭建分布式集群来进行数据管理。假设有 1PB 数据,考虑到市场主流机型的单机存储容量,集群规模差不多在 100 台节点左右。如此大规模的数据,如何均匀地分布到 100 台节点,如何对其进行并行计算,成为了架构上必须首要解决的两大难题。
StarRocks 采用 Shared-Nothing 架构,数据依照指定规则分布到各个节点。单个节点既有存储也有计算,二者的紧密耦合可以最大限度地实现本地计算,减少网络传输开销。跨节点的数据计算,例如分布式 Join,通过 MPP (Massively Parallel Processing) 框架完成。
图 1 :StarRocks 整体架构
StarRocks 架构图如图 1 所示。FE 为元数据层,管理所有元数据;BE 为 数据存储层,也负责本地数