看场景、重实操,实时数仓不是“纸上谈兵”

简介: Hologres产品负责人合一谈谈他眼中的实时数仓!

本文转载自阿里云Hologres产品负责人合一在ITPUB的访谈,谈谈他眼中的实时数仓,原文链接:https://mp.weixin.qq.com/s/RZMWf9r4fKV9mNoGGUtaVw


这两年,企业IT领域掀起实时数仓热潮。然而,只要稍做梳理就会发现,实时数仓格局未定,各种流派群雄逐鹿,还有很多需要进一步探讨的话题方向。


比如:实时数仓是什么?如何从概念上去定义?有人认为,传统数据仓库做了实时化,就是实时数仓;有人认为,云数仓、湖仓一体是实时数仓;还有人认为,HTAP是解决实时数仓需求的一个重要手段!


再比如:实时数仓是一款产品,还是一个解决方案?99%的企业都会认为是一个解决方案,1%的企业会认为是一款产品,这1%就是阿里云!


为了弄清事实真相,帮助用户找到应用选型“快速通道”,本期实时数仓系列访谈,特邀请到阿里云自研大数据平台产品负责人刘一鸣(合一),请他从实时数仓的技术演进、应用场景、架构以及Hologres自身实践角度,一层一层揭开实时数仓的“谜团”!

合一0.JPG

阿里云自研大数据平台产品负责人刘一鸣(合一)

实时数仓进化


如果,非要给实时数仓下一个定义,一定要符合从1.0到3.0时代的进化特征。


首先,得是一个数仓,具备规模数据的交互式分析能力。实时数仓不只是“实时”,很多系统不支持标准SQL,不能算数仓。所以,属于1.0时代的实时数仓,有一个重要前提,就是支持较为完善的SQL以及优秀的大规模分析能力,因此很多系统采用了分布式、列存、索引、压缩等数仓加速的技术。


其次,面向实时场景做了针对性优化,包括实时写入、实时分析、实时取数等。如果和普通数据库相同,没有针对实时场景做优化,很难达到实时数仓对吞吐和分析的时效性要求。实时数仓需要具备高吞吐写入和更新能力,数据写入即可用,支持灵活的数据更新。比如:很多普通数据库,虽然能写也能查,但当数据规模放大到一定规模,要么牺牲了写入性能保查询,要么牺牲了查询性能优化写入,无法针对实时数据多场景进行优化,这不能算好的实时数仓。


进入2.0时代,实时数仓就要尽可能快地支持在线业务。企业之所以做实时数仓,是希望数据进来之后能够被足够新鲜地消费,能实时写入、实时分析,还要支撑在线服务。在线服务场景需要更高的性能、低抖动、稳定性、并发能力,对在线服务场景进行支持,是实时数仓关键一环。


而3.0时代的实时数仓,可以定义为一站式实时数仓。这个时候的实时数仓,不仅具有高吞吐写入与更新、端到端的全链路实时加工以及低延迟高并发在线服务能力,在保证数据一致的前提下,需要支持多种负载之间完备的隔离和弹性能力,以确保各个业务互不干扰,各自按需使用资源。同时实时数仓的使用通常离不开离线数仓的组合关系,通过离线平台对历史数据的周期性汇聚、抽象和加工,并将结果数据导入实时数仓进行丰富和修正,需要更有效地打通实时与离线两套系统,实现元数据和数据的无缝交换,这也是实时数仓落地时需要具备的能力。这种一站式体现在存储状态的一致性,减少了不同负载之间的数据同步和存储开销,避免了数据服务层的数据孤岛难题。


所以,实时数仓既不是传统数据库的旧瓶装新酒,也不是湖仓一体的多产品组合,它和离线数仓的本质区别是,通过对易变数据结构(包括内存结构、文件存储)和计算资源的细粒度灵活管控,更好地支撑数据的实时写入、实时更新、实时查询至于,很多公司之所以把实时数仓定义为是一个解决方案,是因为技术相对更加复杂,既要考虑写入和加工能力,又要支持查询和在线分析场景,不得已针对不同技术需求将多种技术栈堆砌在一起,包括采用流式计算、消息中间件来达到端到端的实时加工,采用列式数据库应对分析需求,采用行存系统支撑在线服务系统,并依赖复杂的调度配置,实现数据在中间件、存储系统之间的最终一致性。而将复杂技术落地成为一款易于使用的成熟数仓产品,仍然是少数技术创新者在努力的方向。


阿里云Hologres,整体技术水平领先业界1-2年,是基于在阿里巴巴内部数据技术的广泛应用与沉淀,一步一步走过来的。阿里有海量数据的复杂应用场景,有历年双11等大促的深度压力测试,有在存储和计算领域深扎多年的技术专家,有上万名数据小二支持业务的灵活需求与快速迭代,这些都是其他公司不具备的得天独厚的条件,推动着阿里在数据技术领域的持续创新。


Hologres支撑的业务的规模、复杂性和对效率的极致追求,实现了通过有些开源技术组合无法达成的数据价值目标。行业内不少企业采用部分开源技术栈,如:用Kafka做中间件,用Hudi做离线存储,用Presto做离线查询加速,用ClickHouse做OLAP查询,用Flink做流式数据加工,用MySQL做缓存,用HBase做在线服务引擎。这些架构也是阿里采用过的第一代实时数仓架构,但当开发效率遇到瓶颈时,当数据链路复杂到成为运维负担时,当数据不一致不得不80%时间在对数排查时,工程师们开始思考是否还有更好的解决方案,是否有一个更加集中化、一体化、能力更全面的数仓选择。而Hologres的出现也就重新定义了实时数仓的形态。


基于此,OLAP查询和在线服务使用Hologres,满足分析的灵活和效率,离线数仓使用MaxCompute,支撑规模性和Serverless扩展性,实时流式计算用Flink,凸显端到端全实时加工,三者的结合让实时和离线计算,分析和服务都能达到一个非常好的平衡,满足业务的多种需求。


阿里云Flink版的出处与Hologres的渊源


有人可能会说,阿里云Hologres+Flink这套组合也用了Flink,和其他解决方案相比,有什么不同呢?


没错,Hologres要想发挥最佳水平,与Flink结合,一定是首选。实时计算需要后台有一套强大的大数据计算能力,而Apache Flink作为一款开源大数据流式计算技术,从设计之初就由流计算开启,相比传统的Hadoop、Spark等计算引擎,更能确保数据处理的低延时,让数据在第一时间发挥价值。


早在2016年,Apache Flink捐献给Apache之后的第三年,阿里已经开始大规模上线使用实时计算产品,用于阿里最核心的搜索推荐以及广告业务场景。2017年,基于Flink的实时计算产品,开始服务于整个阿里巴巴集团,同年双11服务全集团的数据实时化,包括双11的实时大屏。2018年,基于Flink的实时计算平台产品不仅服务于集团内部,同时开始服务于云上中小企业,以公有云的形式对外提供服务。2019年,阿里巴巴收购了Flink的创始公司-Ververica,阿里的Flink实时计算技术团队和德国总部的Flink创始团队,组成全球顶领先的Flink技术团队,共同推进整个Apache Flink开源社区的发展。


用户通过Flink可以把数据实时写入到Hologres,也可以通过Hologres做维表关联。如此一来,离线分析走MaxCompute,数据的点查、联邦分析以及OLAP分析走Hologres。举一个维表加工的例子,Flink每次加工进来之后,每一条事件都要跟维表做关联,比如:事件数据中包含了渠道ID,在分析时需要知道是什么渠道类型,因为要通过加工链路将ID还原为渠道属性,这种关联有时候每秒钟要达到上万、上十万的 QPS。过去,很多业务团队采用HBase来支撑这类点查业务,但HBase没有 Schema,数据写错很难发现,很难修正;现在,Hologres只用过去50% 的资源,支撑了HBase完整的业务。


与开源Flink相比,阿里的实时计算Flink版进行了多处核心功能的优化,在存储、网络和传输等方面都调整到满足业务场景所需要的效果。并且,阿里云Flink版和Hologres做了大量的结合优化工作,不仅支持维表到结果表,也支持通过阿里云Flink的全量读取、Binlog 读取、CDC 读取、全增量一体化等多种方式读取 Hologres 源表数据,尤其是阿里云Flink支持读取Hologres Binlog,就使得Hologres能够达到像Kafka等消息中间件同等的能力,一个 Hologres Table 的数据既可以提供给下游阿里云 Flink 任务消费,还可以对接上游 OLAP/在线服务查询,不仅节省了成本,还简化数仓架构,同时也让数仓中的每一个层次都可以实时构建、实时查询,提升数据的流转效率。在元数据管理方面,阿里云Flink版与Hologres元数据打通,支持Hologres Catalog,实现元数据的自动发现和管理,也大大简化了开发和运维管理工作。


HSAP分析服务一体化的独特之处


Hologres是两个英文单词的组合,即Holographic+Postgres,Holographic来源于物理学,Postgres代表的是PostgreSQL生态。


从物理学原理看,地球没有被黑洞吸进去,是因为有一个临界点,这个临界点所组成的面,被证明是一个球面,也叫世界面。与此同时,黑洞里所有信息在世界面上都有投影,即3D全息投影技术。Hologres想做的事情是,通过产品化的能力对数据黑洞做全息展示。

合一1.png

为了简化数据存储和统一数据服务,阿里云提出了HSAP架构理论 (Hybrid Serving & Analytical Processing,后续简称HSAP),而Hologres是实践HSAP目标的一个具体实现。Hologres的目标是,做分析服务一体化的实时数仓,典型特征是:存算分离的云原生架构、多负载隔离、端到端实时毫秒级的交互式分析体验、超高QPS的在线服务能力等。从应用场景来看,既可满足实时数仓的需求,也能对离线数据进行查询加速,同时还可实现实时与离线数据的联邦计算,为用户构筑全链路、精细化运营能力。


为什么说分析服务一体化能力特别重要呢?


以广告推荐为例,这是一个非常典型的在线服务场景,如果一个人收藏了一个链接,他就会获得相应的广告推荐,该推荐包含了你过去30 天、60天或者90 天里的行为,还包括你的教育程度、家庭关系,这些是典型的离线特征。对于后端技术平台来说,这些行为不用每天去算,每周算一次就可以。但另一部分特征是实时的,比如你当下点了什么内容,对什么感兴趣,跳转了什么链接,这部分行为就需要通过Flink 这样的流式计算实时处理。只有把实时和离线两部分信息结合起来做推荐,才有全面的360信息,使得推荐更加精准,更加具备上下文相关性。


过去,没有Hologres之前,如果一个大数据系统要支撑广告推荐业务需要写一条很长的链路,反复同步数据,这很难提供灵活敏捷的数据服务,大量数据作业开发成本很高,出现数据不一致等问题。阿里的工程师尝试把问题简化,让数据不动,通过Flink或者MaxCompute加工好的数据,直接提供在线服务,这就需要把Serving场景做强,面向应用程序,或者面向API 消费数据的场景时,要有高QPS、低延迟能力。


而针对Analytics能力,很多企业都会基于OLAP引擎做数据分析。这部分数据一般会有两个出口:一个出口是给机器使用,通过API访问,主要是推荐系统和风控系统;另一个出口是给分析师使用,通过SQL访问,看报表,做对比分析,找到趋势变化。这两个出口的数据需要保持一致性。Hologres作为交互式分析引擎,针对两个场景做了执行优化。在支持在线的高 QPS 服务型查询时,这类查询逻辑相对简单,但并发高,因此采用了Short-Cut技术,通过FixedPlan执行优化,减少在SQL解析优化和调度层的开销,请求直达存储节点,延迟更短;在支持分析师的复杂多维分析时,采用MPP分布式计算框架、列式存储和向量化引擎,有效率大范围过滤数据,保障了亿级数据的秒级数据分析。这样,通过Hologres统一数据服务出口,同时支持在线服务和多维分析两个场景。


Hologres借鉴了主流的数据架构,包括采用类似LSM-tree(Log-Structured Merge Tree)这种高吞吐写入和更新友好的存储架构,利用了CPU指令向量化、异步化的最新技术创新,基于云原生的计算存储分离架构,形成了一款低门槛的生产级产品。Hologres在协议层面上用到了PostgreSQL的这种协议,简化了与业务系统的对接,应用无需重写,也没有厂商引擎绑定,开箱即用,核心的存储引擎、查询引擎是阿里自研的一套系统,持续改进效率、稳定和易用。


Lambda 与Kappa的纷争


其实,最早阿里云没想到要做实时数仓,只是想把实时和离线数据实现一体化。


换言之,阿里云的HSAP架构也是由Lambda架构走过来的。众所周知,Lambda架构有一个优势,既支持流式数仓,又能满足离线数仓的计算要求;但是也有一个弊端,就是流和批分为两套技术栈,运维要维护两套系统架构。后来,Kappa架构出现,有人认为能很好地解决Lambda架构的问题,但事实并非如此。因为企业的数据加工永远会有实时和离线两条链路,这是数据加工作业的属性决定的。实时链路数据总会晚来,或者不来,数据质量并不可靠。所以,只有实时链路,解决不了数据质量问题,还需要离线链路对实时链路的修正和丰富,而依赖消息中间件支撑海量数据的回刷是成本极高及不稳定的架构。也就是说,只要有离线场景,Lambda架构就有存在的合理性。


但问题是,Lambda架构一定需要两套系统,这该如何解决?本质上,还是技术的割裂,导致架构不统一。好的Lambda架构,应该是状态层统一的,实时的业务逻辑和离线的业务逻辑尽管加工链路不同,但存储层应该统一,减少数据割裂和不一致,通过实时和离线两套业务逻辑相互补充,离线的业务逻辑对实时数据链路进行修正。


在Lambda架构实践过程中,很多企业实时业务用HBase,离线业务用Hive,这种存储割裂状态,导致数据不一致,口径不一致。正确的架构选择应该是Lambda的改进版,把数据状态统一存储在一个存储系统,这个存储同时支持离线批量导入,也支持实时更新与查询,这也是一种可落地的批流一体实践。


虽然,有些企业在推Kappa,但从实践的角度看,Kappa其实是个伪概念,因为实时业务系统如果取代离线,意味着数据要频繁地修正、更新,而Kappa无法从根本上解决这个问题。目前,推Kappa架构的企业,大部分是消息中间件厂商,或者一些纯粹做实时的团队。他们假设了一种状态,所有的数据都可以通过消息中间件恢复。但现实是,企业不会把所有的状态都通过消息中间件去回放,或者长期存储。所以,通过消息中间件替代数据库的方式,只有消息中间件厂商在力推,不具备广泛落地的参考意义。


在阿里内部,HSAP架构把分析和服务两个场景放在一起,解决了数据不一致问题,减少了数据同步的开销,避免了数据孤岛,数据加工链路保持了实时和离线双链路,实时业务系统解决时效性问题,离线可以为实时业务系统进行修正和丰富,两条链路各解决各自的问题,使得实时和离线由一套系统承载,也就真正实现了流批一体。


下一代实时数仓更重实操


到今天为止,Hologres作为标准产品对外提供服务已经两年多,每年客户数都是三位数增长。在实践中,60%的用户主要使用OLAP场景,20%主要使用Serving场景,还有20%做到了HSAP混合负载的优化架构,通过技术创新为企业降本提效。实时数仓还处于发展过程中,相信随着大数据的不断推动,实时数仓会成为推动业务发展的“有力抓手”。


过去,数据团队更偏内部业务场景,主要的工作就是给管理层出报表,做领导驾驶舱。但在今天,数据团队正从成本中心转为盈利中心,大数据团队要想去影响业务,提升价值感,包括风控、实时画像、实时推荐等手段,是提升业务的主要入口,这也是实时数仓需求快速增长的最根本原因。实时数仓会成为大数据平台里一个重要组成部分,是数据消费端的核心组件。


当然,实时数仓并不是一个新事物,从有数仓开始,用户需求一直存在。但是,因为方案的不成熟,很多都是由开源组件堆在一起,从开发和运维成本上看,技术门槛比较高,导致实时数仓没有实现规模化发展。企业必须招聘来自BAT的人才才能玩得转实时数仓,这个是不正常的,也不是时代发展的趋势,技术一定会普惠化,所有的企业都会用上大数据,但不应该所有的企业都成为技术专家。


真正受市场欢迎的实时数仓产品,简单、易用是前提,能处理海量数据,不用懂很多参数,不用写很多程序,能做到只会写SQL就可以上手。另外,企业希望数据写进来就能用,尽量减少数据加工过程,减少数据链条,实现敏捷化。即使业务方突然提出一个新需求,只要改下SQL就可以了,不用做任何数据重刷,对开发效率提升来说,带来的是根本性的转变。

所以,下一代实时数仓到底如何发展? Hologres已经“打好样”!那就是技术门槛会越来越低,同时计算力会越来越强大,使用方式越来越简单,不仅数据能实时写得进来,还要在原始数据上直接做分析,查询要足够快,并发足够高,取数不用等,需求不求人。希望通过Hologres这样的产品,能够将实时数仓变得更加普惠化、敏捷化,让各行各业的数智化建设迈上新台阶。

相关实践学习
基于Hologres+PAI+计算巢,5分钟搭建企业级AI问答知识库
本场景采用阿里云人工智能平台PAI、Hologres向量计算和计算巢,搭建企业级AI问答知识库。通过本教程的操作,5分钟即可拉起大模型(PAI)、向量计算(Hologres)与WebUI资源,可直接进行对话问答。
相关文章
|
3月前
|
存储 搜索推荐 数据管理
全栈数仓适合什么场景使用
全栈数仓适合什么场景使用
|
1月前
|
SQL 分布式计算 OLAP
医疗在线OLAP场景下基于Apache Hudi 模式演变的改造与应用
医疗在线OLAP场景下基于Apache Hudi 模式演变的改造与应用
36 2
|
4月前
|
SQL BI Apache
奇富科技基于阿里云数据库 SelectDB 版内核 Apache Doris 的统一 OLAP 场景探索实践
Apache Doris 作为整体 OLAP 场景,助力奇富科技信贷科技服务平台优化,使得报表分析场景 SLA 达标率提升至 99% 以上,平均查询耗时降低 50%,为营销活动、广告投放等提供强有力的数据支持。
奇富科技基于阿里云数据库 SelectDB 版内核 Apache Doris 的统一 OLAP 场景探索实践
|
SQL BI 索引
【SQL开发实战技巧】系列(二十八):数仓报表场景☞人员分布问题以及不同组(分区)同时聚集如何实现
【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(二十八):数仓报表场景☞人员分布问题以及不同组(分区)同时聚集如何实现
【SQL开发实战技巧】系列(二十七):数仓报表场景☞通过对移动范围进行聚集来详解分析函数开窗原理以及如何一个SQL打印九九乘法表
本篇文章讲解的主要内容是:***通过执行计划看开窗函数开窗语法rows\range between preceding and current row以及rows\range between unbounded preceding and unbounded following对移动范围的值进行聚集的原理以及区别】、如何通过一个SQL打印九九乘法口表!!!***
【SQL开发实战技巧】系列(二十七):数仓报表场景☞通过对移动范围进行聚集来详解分析函数开窗原理以及如何一个SQL打印九九乘法表
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
本篇文章讲解的主要内容是:***ROLLUP、UNION ALL是如何分别做分组合计的以及如何通过CUBE 、GROUPING、GROUPING_ID 识别哪些行是做汇总的结果行***
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
本篇文章讲解的主要内容是:***如何使用lag函数让结果集重复数据只显示一次、用行转列pivot写法优化部门之间计算工资差异类似需求、如何通过ceil函数对已有数据进行分组打印、放假安排团队分组值班,如何通过ntile()over(order by )快速进行人员分组***
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
本篇文章讲解的主要内容是:***目前Oracle支持的行列互换有两种方式:case when、pivot\unpivot,我将通过几个案例来给大家详解如何通过这两种方式实现“行转列”,“列转行”的需求,并通过执行计划看case when、pivot\unpivot二者的底层逻辑关系以及效率上的影响。***
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
|
SQL 移动开发 BI
【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高
怎样对数据组合重新排列并去重的问题、通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本篇文章主要介绍的两个方面,第一个方面曾经有好几个网友和同事问我,第二个问题真的是很多同行的通病,认为分析函数是万金油,一股脑用。
【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高
|
SQL 移动开发 BI
【SQL开发实战技巧】系列(二十二):数仓报表场景☞ 从分析函数效率一定快吗聊一聊结果集分页和隔行抽样实现方式
怎样对SQL查询结果集分页比较好、平时你用分析函数优化传统查询,所以你会不会认为分析函数一定比传统查询效率高?一个实验告诉你答案、我想对数据进行隔行抽样应该怎么实现?【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。分析查询的一个小建议,可能大家平时为了方便,用row_number做分页的比较多,但是在有些场景,这个效率真的挺低。
【SQL开发实战技巧】系列(二十二):数仓报表场景☞ 从分析函数效率一定快吗聊一聊结果集分页和隔行抽样实现方式

相关产品

  • 实时数仓 Hologres