第一次公开!阿里巴巴云原生实时仓库核心技术的秘密
作者|金小军(花名贤音)
阿里巴巴高级技术专家
标题图片| CSDN从东方IC下载
由| csdn制作(ID: csdn新闻)
4982亿,是2020年天猫双十一营业额的最终固定数字。这背后是人类历史上最大的人机协作,也是数字世界前所未有的巅峰挑战。作为双十一背后的重要技术支撑,消费者的每一次搜索、浏览、收藏、购买都会成为实时数据流入全息存储,与存放在天猫上的历史线下数据进行交叉比对。
2020双十一,全息经受住了实时数据每秒5.96亿的洪峰,单表存储高达2.5PB,基于万亿数据提供多维分析和服务,99.99%的查询可以在80ms内返回结果,真正做到了实时和离线数据的融合,支持在线应用服务。
Hologres诞生到参与2020年史上最强双十一的三年多时间里,完成不少从0到1的突破:
集群规模从0到近10,000个单位不等,存储集群和计算集群的使用率相对较高。系统产品化——云——商业化三级跳跃已经完成,完美赋予阿里巴巴云的私有云金融云业务权能。
提出了HSAP(混合服务分析处理)服务分析集成的系统设计理念。相同的数据可以同时满足实时离线在线场景的计算需求,大大简化了数据仓库架构的复杂性,降低了成本,重新定义了数据仓库趋势。
同时,全息纸的技术解释被选为VLDB 《Alibaba Hologres: ACloud-Native Service for Hybrid Serving/Analytical Processing》(http://www.vldb.org/pvldb/vol13/p3272-jiang.pdf)数据库的顶级会议
借此机会,我们还将首次公开和记的核心底层技术,揭示和记为何能够支持阿里巴巴核心场景的落地。
传统数仓痛点
传统数据仓库痛点
目前与大数据相关的业务场景一般包括实时大屏幕、实时BI报表、用户画像、监控预警等。如下图所示。
实时大屏幕业务一般是公司领导决策的辅助工具,以及对外的业绩展示,比如双十一实时周转大屏幕场景。
实时BI报表是运营和产品经理最常用的业务场景,适用于大多数报表分析场景。
经常在广告推荐场景中使用的用户画像,用更详细的算法标注用户,使得营销活动更有针对性,对目标群体更有效。
预警监控的大屏幕,比如监控网站和应用的流量,达到一定的阈值就可以报警。
对于以上大数据业务场景,行业早就开始通过数据仓库的建设来满足这些场景的需求。传统的方法是离线数据仓库,如下图所示。其一般流程是:首先收集各种数据,然后经过ETL处理,再通过逐层建模对数据进行聚合和过滤,最后基于应用层工具显示数据或在必要时生成报表。
虽然上述方法可以对接多种数据源,但有一些明显的痛点:
ETL逻辑复杂,存储和时间成本过高;
数据处理环节很长;
不能支持实时/近实时数据,只能处理T 1的数据。
Lambda架构痛点
随着实时计算技术的兴起,出现了Lambda架构。
Lambda架构的原理如下图所示,其思想其实相当于在传统离线数据仓库的基础上增加一个处理实时数据的层,然后将离线数据仓库生成的数据和服务层的实时链接合并,从而对离线生成的数据进行实时查询。
从2011年开始,Lambda架构被大多数互联网公司采用,确实解决了一些问题。但是,随着数据量的增加和应用复杂度的提高,其问题逐渐凸显,主要包括:
它由各种引擎和系统组成,开发维护成本高,学习成本高;
数据存储在不同视图的多个副本中,浪费空间,难以解决数据一致性问题;
在使用上,批量、流式、合并查询都使用不同的语言,不太好用;
学习成本很高,增加了应用成本。
上面说的问题,其实阿里内部也遇到过。下图是阿里巴巴从2011年到2016年沉淀下来的一套实时仓库盘点架构,本质上就是Lambda架构。但是随着业务量和数据的增长,关系复杂度越来越大,成本急剧增加。因此,我们迫切需要一个更优雅的解决方案来解决类似的问题。
HSAP:服务分析一体化
基于以上背景,我们提出了HSAP(混合服务和分析处理)的思想,它不仅可以支持高QPS场景的查询编写,还可以在一个系统中完成复杂的分析场景。
那么,HSAP概念的核心是什么?
首先要有一个非常强大的存储,可以同时存储实时数据和离线数据,统一数据存储;
同时要有高效的查询服务,能够支持高QPS查询、复杂分析和同一界面下的联邦查询分析(如SQL);
该系统可以直接连接前端应用程序,如报表和在线服务。它可以临时分析、统一数据服务并减少数据移动,而无需额外的导入和导出。
关于Hologres
基于HSAP的设计理念,我们要开发并落地出相应的产品,于是便诞生了Hologres。
全息是基于HSAP服务分析集成理念的最佳实践,兼容PostgreSQL生态,支持MaxCompute数据直接查询,支持实时写入和实时查询,支持实时离线联邦分析。它帮助企业快速构建一个低成本、高时效性的集成流程和批量的实时仓库。
全息图这个词是全息和Postgres的结合体,通俗易懂,代表了与PostgreSQL生态兼容的全息图。全息需要分享,先看下图:
全息中文翻译是‘全息术’,就是我们经常听到的3D全息投影技术的‘全息术’。
在物理学中,全息原理是用来描述一个空间的性质的,可以在它的边界上进行编码。上图是一个假想黑洞的图片。黑洞引力在离黑洞一定距离处可以逃逸的临界点构成了事件视界,就是图中光线明亮的圆。根据全息原理,所有落入黑洞的物体的信息内容都可能完全包含在事件视界的表面。
全息想做的是将所有信息存储在数据黑洞中,并进行各种类型的计算。
Hologres核心技术揭秘
全息结构非常简单,它是一个独立的存储和计算结构。所有数据都存储在分布式文件系统中。系统架构图如下图所示:
服务节点后端真正接收数据、存储和查询,并能支持数据计算;
执行引擎前端接收路由分发的SQL,然后生成逻辑执行计划,再通过优化器生成分布式物理执行计划,发布到后端进行分布式执行;
LBS在接入端执行相应的负载均衡任务。
下图中的黄色部分全部部署在容器中,整个分布式系统可以达到很高的容错性。
兼容PostgreSQL生态,开源或商业开发/BI工具可以直接停靠在上层,开箱即用。
存储计算分离
全息采用存储和计算分离的架构,用户可以根据业务需求灵活扩展和缩减容量。分布式存储中有三种常用的体系结构:
共享磁盘/存储:存储集群上挂载了很多磁盘,每个计算节点都可以直接访问这些共享磁盘;
Shared Nothing:架构是指每个计算节点挂载自己的存储,节点之间可以相互通信,但是节点之间的磁盘不共享,存在资源浪费;
存储解聚:相当于把存储集群当作一个大磁盘,每个计算节点都可以访问,每个计算节点都有一定的缓存空间,可以访问缓存的数据,而不用关注存储集群的管理。这种存储和计算分离的架构便于灵活扩展,可以有效节省资源。
流批一体的存储
全息定位是流和批次的统一存储。对于典型的Lambda架构,实时数据通过实时数据链路写入实时数据存储器,离线数据通过离线数据链路写入离线存储器,然后将不同的Query放入不同的存储器,再进行合并,带来了应用层的多存储开销和复杂的合并操作。
有了全息图,数据采集后可以采取不同的处理环节,但处理后的结果可以直接写入全息图,解决了数据的一致性问题,问题,不需要区分离线表和实时表,降低了复杂度,大大降低了用户的学习成本。
存储引擎
全息的底层支持两种文件格式:行存储和列存储。行存储适用于基于主键的点查询场景,列存储适用于OLAP复杂查询场景。对于这两种存储格式,全息的底层处理也略有不同,如图所示。
数据写入时,先写入日志,日志存储在分布式文件系统中,保证整个服务的数据不会丢失,因为即使服务器挂机,也可以从分布式系统中恢复。日志写完后写MemTable,就是内存表,让系统认为数据写成功。MemTable有一定的大小,满了以后会逐渐把它的数据刷新成文件,存储在分布式系统中。行存储和列存储的区别在于从Flush到file的过程。在此过程中,行存储表将作为存储在行中的文件进行刷新,列存储表将作为存储在列中的文件进行刷新。在Flush的过程中会产生很多小文件,这些小文件会在后台合并成一个大文件。
执行引擎
全息执行引擎是一种通用的分布式查询引擎,它专注于优化高并发、低延迟的实时查询。通用意味着各种SQL查询都可以高效地表达和执行。其他分布式查询引擎,有的侧重于优化实时表的常见单表查询,但在复杂查询上表现不佳;有些支持复杂查询,但实时场景性能更差。全息摄影的哲学是不做任何妥协,并以这些场景中的最终表现为目标。
全息执行引擎可以高性能处理各种查询类型,主要基于以下特点:
端到端全异步处理框架可以避免高并发系统的瓶颈,充分利用资源,尽可能避免存储和计算系统分离带来的数据读取延迟的影响。
查询由DAG表示,DAG由异步运算符组成。便于对接查询优化器和使用行业内各种查询优化技术。
操作员内部处理数据时,尽量使用矢量化。
以及灵活的执行模型,可以充分利用各种索引,最大限度的延迟向量物化和计算,避免不必要的数据读取和计算。
查询模式的自适应增量处理应用于常见的实时数据。
一些查询模式的独特优化。
优化器
全息的目标是用户可以开箱即用,即可以通过SQL完成所有的日常业务分析需求,不需要做额外的建模等操作。基于新的硬件技术,全息设计并实现了自己独特的计算和存储引擎,优化器扮演的角色是在计算引擎上高效运行用户执行的SQL。全息优化器采用基于成本的优化器,可以生成复杂的联邦查询执行计划,尽可能发挥多个计算引擎的能力。同时,在长期打磨业务的过程中,积累了大量的业务优化方法,使得全息的计算引擎能够在不同的业务场景中发挥出极致的性能。
HOSHoloFlow
全息的核心组件叫做黑洞,是完全自主开发的异步编程开发的存储计算引擎。一个灵活高效的异步框架holo-os(简称HOS)是从黑洞底层提炼出来的。在实现高性能的同时,还实现了负载均衡,解决了查询的长尾问题。资源利用率高
同时,holo-os扩展到分布式环境,开发了holo-flow分布式任务调度框架,保证了分布式环境下单机调度的灵活性。
Frontend
前端是全息的访问层,兼容PostgreSQL协议,负责访问和处理用户请求,管理元数据。然而,PostgreSQL是一个独立的系统,因此它处理高度并发的用户请求的能力是有限的。然而,全息面临着复杂的业务场景,需要支持万亿甚至万亿级的用户请求。因此,实现上采用前端分布式,通过多版本控制元数据同步的方式实现前端间信息的实时同步,通过LBS层的负载均衡实现完全线性扩展和超高QPS的能力。
扩展执行引擎
在前端的基础上,全息还提供了多扩展执行引擎。
PQE(查询引擎):运行SQL和各种函数的执行器。全息与Postgres兼容提供可扩展性,支持PG生态的各种扩展组件,如Postgis、UDF(pl/java、pl/sql、pl/python)等。完美满足不同场景下不同用户的需求,从而提供更大的计算能力。
SQ E(S QueryEngine):无缝对接MaxCompute(ODPS)的执行器,实现对MaxCompute的本机访问。无需迁移和导入数据,即可访问各种MaxCompute文件格式和Hash/Range簇表等复杂表,性能高,兼容性全,实现PB级离线数据的交互分析。
生态与数据集成
全息作为一个集流和批处理于一体的实时数据仓库,支持各种异构数据源的实时和离线写入,包括MySQL和Datahub,可以实现每秒1000万块的实时写入能力、写后检查能力和每秒1000万次检查能力。这些强大的能力是基于全息的JDBC界面。
Hollogres与PostgreSQL完全兼容(包括语法、语义、协议等)。)在界面上,可以直接使用PostgreSQL的JDBC驱动程序连接Hollogres,读写数据。目前市场上的数据工具,如BI工具、ETL工具,都支持PostgreSQL JDBC驱动,所以这意味着全息(Hologres)天生具有广泛的工具兼容性和强大的生态性,实现了从数据处理到数据可视化分析的完整大数据生态闭环。
在线服务优化
作为HSAP服务和分析整合的最佳实践,全息不仅具有处理分析查询的能力,还具有很强的在线服务能力,如千伏点搜索和矢量检索。在KV抽查场景下,Holgres可以通过SQL接口轻松稳定地支持百万QPS吞吐量和极低延迟。在矢量检索场景中,用户还可以通过SQL导入矢量数据、构建矢量索引、查询等操作,无需额外转换即可查询,经过实际业务测试,性能优于其他产品。此外,一些非分析性的查询也可以通过合理地创建表格并配合全息强大的索引能力完美地应用到服务场景中。
数仓架构升级
基于全息,几个业务场景也进行了升级,大大简化了业务架构的复杂度,如下图所示:
总结
全息作为新一代云原生实时数据仓库,在今年阿里巴巴双11的核心数据业务场景中,与实时计算Flink一起首次整合,在稳定性和性能上经受住了考验,实现了实时业务链接和毫秒级海量数据处理能力,为商家和消费者带来了更加智能的消费体验。
随着业务的发展和技术的演进,全息将继续优化核心技术竞争力,真正实现服务与分析一体化的美好愿望,不断赋予更多用户权力。
作者简介:金小军(花名贤银),阿里巴巴资深技术专家,从事大数据领域工作10年,现从事互动分析引擎全息的设计和研发。
