Hologres实战_基本原理

1 架构设计

1.1 传统架构

传统数据仓库架构存在一下缺点

  • ETL 逻辑复杂,存储、时间成本过高;
  • 数据处理链路非常长;
  • 无法支持实时/近实时的数据,只能处理 T+1 的数据。

1.2 lambad架构

Lambda 架构的原理如下图所示,其思路其实是相当于在传统离线数仓的基础上再加上一个处理实时数据的层。然后将离线数仓和实时链路产生的数据在 Serving 层进行 Merge,以此来对离线产生的数据和实时产生的数据进行查询。

目前被广泛使用的lambda架构,存在如下问题:

  • 由多种引擎和系统组合而成,开发和维护成本高,学习成本高;
  • 数据在不同的 View 中存储多份,空间浪费,数据一致性的问题难以解决;
  • 从使用上来说,Batch,Streaming 以及 Merge Query 等处理过程中均使用不同的language,使用起来并不容易;
  • 学习成本非常高,增大了应用成本。

阿里基于lambda架构进行重设计,有方法论到最佳实践,构建出如下架构。由于其本质还是lambda架构,因此面临相同的问题

1.3 HSAP架构

HSAP 是指 Hybrid serving and an alytical processing,我们的理念是能够支持这种很高 QPS 的 Serverless 场景的查询写 入,并且将复杂的分析场景在一套体系里面完成。 那么其核心是什么呢?首先,要有一套非常强大的存储,能够把实时的数据和离线的数据存储进来,实现数据的通存,同时还要有一种高效的查询服务,能够支持高 QPS 的查询,支持复杂的分析以及联邦查询和分析,这样的话就可以把离线数据和实时数据都导入到系统里去,然后将前端的数据应用,比如 BI 报表和一些在线服务,对接到系统中去。如此,上面提到的架构复杂的问题,其实就可以迎 刃而解。我们把这样的设计理念叫做 HSAP 设计理念。

该设计方案的优点是:

  • 实时离线写入同样的存储,解决数据一致性问题。
  • 支持多种查询,包括点查、多维聚合和联邦查询。解决多引擎问题

2 holo架构设计

hologress是基于上述HSAP设计理念推出的产品。Hologres 这个词是 holographic 和 Postgre 的组合,Postgre 指的是兼容 PostgreSQL 生态,holographic 指的是全息,也就是全部信息,我们希望通过 Hologres 对数据进行全息的分析,并且能够兼容 PostgreSQL 生态。

整体来看,其架构非常简单,是存储计算分离的架构,数据全部存在一个分布式文件系统里面,在阿里内部指的是盘古分布式文件系统;服务节点叫 Backend,真正去接收数据,存储和查询,并且能够支持数据的计算;Frontend 接收路由分发过来的 SQL,然后生成真正的物理执行计划,发布到 Backend 做分布式的执行;在接入端由 LBS 来做相应的负载均衡任务。

下图中黄色部分均部署在容器中,整个分布式系统可以做到高度容错。同时,因为兼容 PostgreSQL 生态,所以一些开源或者商业化的 BI 工具,或者 WebIDE 可以直接跟 Hologres 进行对接。

补充查询类型

  • point query:点查询。hbase场景
  • ad-hoc query:随机查询,结果取决于入参。Druid场景
  • OLAP query:多纬聚合查询。impala场景。

存算分离模式

在传统的分布式系统,尤其是分布式存储中,常用的架构有如下三种。其中 Shared Disk/Storage 就是在存储集群上挂载了很多盘,每个计算节点都可以访问这些 盘;Shared Nothing 架构就是每个计算节点自己挂载存储,节点之间可以通信,但是各 个节点之间的盘不共享,存在资源浪费的情况;Storage Disaggregation 就是相当于把 存储集群看做一个大的磁盘,每个计算节点都可以访问,且每个计算节点都有一定的缓存空 间,可以对缓存数据进行访问,也无需关心存储集群的管理,这种存储计算分离的架构便于 灵活扩容,能够有效节省资源,Hologres 就是采用的这种架构。

流批一体模式

Hologres 定位是能够做离线数据和实时数据的存储。对于典型的 Lambda 架构,是 将实时数据通过实时数据的链路写入到实时数据存储中,离线数据通过离线数据的链路写入 到离线存储中,然后将不同的 Query 放到不同的存储中,再做一个 Merge。对于 Hologres,如下图所示,数据收集之后可以走不同的处理链路,但是处理完成之后的结果 都可以写入 Hologres 中,这样就解决了数据的异质性问题,也不需要去区分离线表和实时 表,降低了复杂度,也大大降低了使用者的学习成本。

Hologres 底层支持行存储和列存储两种文件格式,对于两者的处理也有略微不同,具 体如下图所示。数据写入的时候先写 log,log 是存储在分布式文件系统中的,保证整个服务的数据不会丢失,因为即便服务器挂掉也可以从分布式系统中恢复。Log 写完之后再写 MemTable,就是内存表,这样子才认为是数据写入成功。MemTable 有一定的大小,写满了之后会将其中的数据逐渐 Flash 到文件中,文件是存储在分布式系统中的。而对于行存储和列存储的区别就在 Flash 到文件的这个过程中,这个过程会将行存表 Flash 成行存储的文件,列存表会 Flash 成列存文件。在 Flash 的过程中会产生很多小文件,后台会将这些小文件合并成一个大文件,这里也会有所不同,大家可以自行查阅文档了解。

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值