文章目录
一、简介
1、概念
Hologres是阿里巴巴自主研发的一站式实时数仓引擎(Real-Time Data Warehouse),支持海量数据实时写入、实时更新、实时加工、实时分析,支持标准SQL(兼容PostgreSQL协议和语法,支持大部分PostgreSQL函数),支持PB级数据多维分析(OLAP)与即席分析(Ad Hoc),支持高并发低延迟的在线数据服务(Serving),支持多种负载的细粒度隔离与企业级安全能力,与MaxCompute、Flink、DataWorks深度融合,提供企业级离在线一体化全栈数仓解决方案。
Hologres致力于高性能、高可靠、低成本、可扩展的实时数仓引擎研发,为用户提供海量数据的实时数据仓库解决方案和亚秒级交互式查询服务,广泛应用在实时数据中台建设、精细化分析、自助式分析、营销画像、人群圈选、实时风控等场景。
官网地址:https://help.aliyun.com/zh/hologres
2、功能特性
-
多场景查询分析
Hologres支持行存、列存、行列共存等多种存储模式和索引类型,同时满足简单查询、复杂查询、即席查询等多样化的分析查询需求。Hologres使用大规模并行处理架构,分布式处理SQL,提高资源利用率,实现海量数据极速分析。
-
亚秒级交互式分析
Hologres采用可扩展的大规模并行处理(MPP)架构全并行计算,通过向量化算子发挥CPU最佳算力,基于AliORC压缩存储,面向SSD存储优化IO吞吐,支持PB级数据亚秒级交互式分析体验。
-
在线高性能主键点查
基于行存表的主键索引和查询引擎的短路径优化,Hologres支持每秒数十万QPS高性能在线点查、前缀扫描,支持高吞吐实时更新,相比开源系统性能提升10倍以上,可用于实时加工链路的维表关联、ID-Mapping等场景。
-
联邦查询,数据湖加速
Hologres无缝对接MaxCompute,支持外部表透明加速查询和元数据自动导入,相比原生MaxCompute访问加速5-10倍,支持冷热数据关联分析,同时支持MaxCompute与Hologres之间百万行每秒高速同步,支持OSS数据湖格式读写,简化数据入湖入仓。
-
半结构数据分析
原生支持半结构化JSON数据类型,支持JSONB列式存储压缩,支持丰富的JSON相关表达算子,使JSON数据存储和分析效率接近原生列存效率。
-
-
原生实时数仓
针对实时数仓数据更新频繁、数据模型简单和分析场景敏捷的特性,Hologres支持高并发实时写入与更新,支持事务隔离与原子性,数据写入即可查。
-
高吞吐实时写入与更新
Hologres与Flink、Spark等计算框架原生集成,通过内置Connector,支持高通量数据实时写入与更新,支持源表、结果表、维度表多种场景,支持多流合并等复杂操作。
-
所见即所得的开发
数据实时写入即可查询,支持DB、Schema、Table三级体系,支持视图View,原生支持Update/Delete/Upsert,支持关联、嵌套、窗口等丰富表达能力,原生支持半结构化JSON数据分析,支持MySQL等数据库数据整库一键入库,实时同步。
-
全链路事件驱动
支持表更新事件的Binlog透出能力,通过Flink消费Hologres Binlog,实现数仓层次间全链路实时开发,满足分层治理的前提下,缩短数据加工端到端延迟。
-
实时物化视图
支持定义实时物化视图,简化数据加工聚合等开发,数据实时写入,聚合实时更新,完善支持实时加工场景。
-
-
企业级运维能力
支持计算负载、访问权限等细粒度管控要求,提供丰富的监控和告警指标,支持计算资源弹性扩展,支持系统热升级,满足企业级安全可靠的运维需求。
-
数据安全
支持细粒度访问控制策略,支持BYOK数据存储加密和数据脱敏,支持数据保护伞、IP白名单,支持RAM、STS及独立账号等多种认证体系,通过PCI-DSS安全认证。支持数据备份与恢复。
-
负载隔离
多个计算实例组成一主多从模式,实例间共享一份存储,计算资源隔离,实现写入和读取隔离,查询和服务隔离,实现故障管理,支持故障节点快速自动恢复。无需本地盘,盘古三副本高可靠冗余存储。
-
自运维能力
内置查询历史、元仓表等运维诊断信息,用户可以基于查询历史和表的元数据,快速定位系统瓶颈和风险点,提升自运维能力。
-
-
生态与可扩展性
兼容PostgreSQL生态,与大数据计算引擎及大数据智能研发平台DataWorks无缝打通。无需额外学习,即可上手开发。
-
兼容PostgreSQL生态
Hologres兼容PostgreSQL生态,提供JDBC/ODBC接口,轻松对接第三方ETL和BI工具,包括Quick BI、DataV、Tableau、帆软等。支持GIS空间数据分析,支持Oracle函数扩展包。
-
DataWorks开发集成
Hologres与DataWorks深度集成,提供图形化、智能化、一站式的数仓搭建和交互式分析服务工具,支持数据资产、数据血缘、数据实时同步、数据服务等企业级能力。
-
Hadoop生态集成
支持Hive/Spark Connector,通过Hadoop平台加工的数据可以高吞吐导入Hologres,并对外提供服务。支持加速读取外部表OSS-HDFS格式存储,支持Hudi、Delta等存储格式。
-
二、应用场景
Hologres兼容PostgreSQL生态,是新一代的阿里云实时数仓产品,与大数据生态无缝连接,支持实时与离线数据,对接第三方BI工具,实现可视化分析业务。本文为您介绍基于Hologres核心功能的典型应用场景。
Hologres的典型应用场景如下:
-
搭建实时数仓。
实时写入业务数据至实时计算后,使用ETL(Extract Transformation Load)方式清洗、转换及整理数据。您可以通过Hologres实时查询并输出数据至第三方分析工具进行实时分析。典型应用场景如下:
-
数据部门搭建阿里云实时数仓产品、展示实时大屏和分析实时Reporting报表。
-
运维和数据应用部门执行实时监控、实时异常检测预警与实时调试。
-
业务部门进行实时风控、实时推荐、实时效果分析和实时训练。

-
-
MaxCompute加速查询。
写入业务数据至离线数据仓库MaxCompute,通过Hologres直接加速查询或导入数据至Hologres查询,并对接BI分析工具,实现实时分析离线数据。典型应用场景如下:
-
实时查询MaxCompute离线数据。
-
分析MaxCompute离线数据报表。
-
输出MaxCompute离线数据的在线应用,例如RESTful API的使用。

-
-
联邦分析实时数据和离线数据。
业务数据分为冷数据和热数据,冷数据存储在离线数据仓库MaxCompute中,热数据存储在Hologres中。Hologres可以联邦分析实时数据和离线数据,对接BI分析工具,快速响应简单查询与复杂查询的业务需求。

三、架构
1、存储计算架构分类
在传统的分布式系统中,常用的存储计算架构有如下三种。
-
Shared Disk/Storage (共享存储)
有一个分布式的存储集群,每个计算节点像访问单机数据一样访问这个共享存储上的数据。这种架构的存储层可以比较方便的扩展,但是计算节点需要引入分布式协调机制保证数据同步和一致性,因此计算节点的可扩展性有一个上限。
-
Shared Nothing
每个计算节点自己挂载存储,一个节点只能处理一个分片的数据,节点之间可以通信,最终有一个汇总节点对数据进行汇总。这种架构能比较方便的扩展,但是它的缺点是节点Failover需要等待数据加载完成之后才能提供服务;并且存储和计算需要同时扩容,不够灵活,扩容后,有漫长的数据Rebalance过程。
-
Storage Disaggregation(存储计算分离架构)
存储和Shared Storage类似,有一个分布式的共享存储集群,计算层处理数据的模式和Shared Nothing类似,数据是分片的,每个Shard只处理自己所在分片的数据,每个计算节点还可以有本地缓存。
存储计算分离的架构存在以下优势。
-
一致性问题处理简单:计算层只需要保证同一时刻有一个计算节点写入同一分片的数据。
-
扩展更灵活:计算和存储可以分开扩展,计算不够扩计算节点,存储不够扩存储节点。这样在大促等场景上会非常灵活。计算资源不够了,马上扩容计算就好了,不需要像Shared Nothing那样做耗时耗力的数据Rebalance;也不会像Shared Storage那样,出现单机的存储容量瓶颈。
-
计算节点故障恢复快:计算节点发生Failover之后,数据可以按需从分布式的共享存储异步拉取。因此Failover的速度非常快。
-
Hologres采用的是第三种存储计算分离架构,Hologres的存储使用的是阿里自研的Pangu分布式文件系统(类似HDFS)。用户可以根据业务需求进行弹性扩缩容,轻松应对在线系统不同的流量峰值。
2、Hologres架构组件
Hologres架构图如下所示。
整个架构从上往下分为如下组件。
-
计算层
-
接入节点(Frontend,FE)
Hologres接入节点,主要用于SQL的认证、解析、优化,一个实例有多个FE接入节点。在生态上兼容Postgres 11,因此用户可以使用Postgres标准语法进行开发,也可以用Postgres兼容的开发工具和BI工具直接连接Hologres。
-
计算HoloWorker
HoloWorker分为执行引擎、存储引擎、调度等组件,主要负责用户任务的计算、调度。
-
其中执行引擎(Query Engine,QE)主要有三个,执行引擎的技术原理请参见Hologres执行引擎技术揭秘。
-
HQE(Hologres Query Engine)
Hologres自研执行引擎,采用可扩展的MPP架构全并行计算,向量化算子发挥CPU极致算力,从而实现极致的查询性能。(QE主要由HQE组成)。
-
PQE(Postgres Query Engine)
用于兼容Postgres提供扩展能力,支持PG生态的各种扩展组件,如PostGIS,UDF(PL/JAVA,PL/SQL,PL/Python)等。部分HQE还没有支持的函数和算子,会通过PQE执行,每个版本都在持续优化中,最终目标是去掉PQE。
-
SQE(Seahawks Query Engine)
无缝对接MaxCompute(ODPS)的执行引擎,实现对MaxCompute的本地访问,无需迁移和导入数据,就可以高性能和全兼容的访问各种MaxCompute文件格式,以及Hash/Range clustered table等复杂表,实现对PB级离线数据的交互式分析,技术原理请参见Hologres加速查询MaxCompute技术揭秘。
-
-
存储引擎Storage Engine(SE)
主要用于管理和处理数据, 包括创建、查询、更新和删除(简称 CRUD)数据等,关于存储引擎详细的技术原理请参见Hologres存储引擎技术揭秘。
-
Cache(缓存)
主要是结果缓存,提高查询性能。
-
HOS Scheduler
轻量级调度。
-
-
Meta Service
主要用于管理元数据Meta信息(包括表结构信息以及数据在Storage Engine节点上的分布情况),并将Meta信息提供给FE节点。
-
Holo Master
Hologres原生部署在K8s上,当某个Worker出现故障时,由K8s进行快速拉起创建一个新的Worker,保障Worker级别的可用性。在Worker内部,每个组件的可用性则由Holo Master负责,当组件出现状态不正常时,Holo Master则会快速重新拉起组件,从而恢复服务,高可用技术原理请参见Hologres高可用技术揭秘。
-
-
存储层
-
数据直接存储在Pangu File System。
-
与MaxCompute在存储层打通,能直接访问MaxCompute存储在盘古的数据,实现高效相互访问。
-
支持直接访问OSS、DLF数据,类型包含CSV、ORC、Parquet、Hudi、Delta、Meta Data等,加速数据湖探索,也可以将数据回流至OSS,降低存储成本。
-
四、执行引擎
1、执行引擎优势
Hologres的执行引擎(主要以HQE为主)是自研的执行引擎,通过与大数据领域最新技术结合,实现了对各种查询类型的高性能处理,主要具有如下优势。
-
分布式执行
执行引擎是一个和存储计算分离架构配合的分布式执行模型。执行计划由异步算子组成的执行图DAG(有向无环图)表示,可以表达各种复杂查询,并且完美适配Hologres的数据存储模型,方便对接查询优化器,利用各种查询优化技术。
-
全异步执行
端到端的全异步处理框架,可以避免高并发系统的瓶颈,充分利用资源,并且最大可能地避免存储计算分离系统带来的读数据延迟的影响。
-
向量化和列处理
算子内部处理数据时最大可能地使用向量化执行,与存储引擎深度集成,通过灵活的执行模型,充分利用各种索引,最大化地延迟向量物化和延迟计算,避免不必要的读数据和计算。
-
自适应增量处理
对常见实时数据应用查询模式进行自适应增量处理。
-
特定查询深度优化
对一些特定查询模式的独特优化。
2、Query执行过程
当客户端下发一个Query后,在执行引擎中实际上会有多个worker节点,以其中的一个worker节点为例,执行过程如下图所示。
当客户端发起一个SQL后,执行过程如下。
-
Frontend(FE)节点对SQL进行解析和认证,并分发至执行引擎(Query Engine)的不同执行模块。
-
执行引擎(Query Engine)会根据SQL的特征走不同的执行路径。
-
如果是点查/点写的场景,会跳过优化器(Query Optimizer,QO),直接分发至后端获取数据,减少数据传送链路,从而实现更优的性能。整个执行链路也叫Fixed Plan,点查(与HBase的KV查询)、点写场景会直接走Fixed Plan。
-
如果是OLAP查询和写入场景:首先会由优化器(Query Optimizer,QO)对SQL进行解析,生成执行计划,在执行计划中会预估出算子执行Cost、统计信息、空间裁剪等。QO会通过生成的执行计划,决定使用HQE、PQE、SQE或者Hive QE对算子进行真正的计算。
HQE、PQE、SQE的对比介绍如下。
-
HQE(Hologres Query Engine)
Hologres自研执行引擎,采用可扩展的MPP架构全并行计算,向量化算子发挥CPU极致算力,从而实现极致的查询性能。(QE主要由HQE组成)。
-
PQE(Postgres Query Engine)
用于兼容Postgres提供扩展能力,支持PG生态的各种扩展组件,如PostGIS,UDF(PL/JAVA,PL/SQL,PL/Python)等。部分HQE还没有支持的函数和算子,会通过PQE执行,每个版本都在持续优化中,最终目标是去掉PQE。
-
SQE(Seahawks Query Engine)
无缝对接MaxCompute(ODPS)的执行引擎,实现对MaxCompute的本地访问,无需迁移和导入数据,就可以高性能和全兼容的访问各种MaxCompute文件格式,以及Hash/Range clustered table等复杂表,实现对PB级离线数据的交互式分析,技术原理请参见Hologres加速查询MaxCompute技术揭秘。
-
-
-
执行引擎决定正确的执行计划,然后会通过存储引擎(Storage Engine,SE)进行数据获取,最后对每个Shard上的数据进行合并,返回至客户端。