阿里巴巴电商搜索推荐实时数仓演进之路

简介: 自建实时数仓到底难在哪里?实时数仓应该怎么建?阿里巴巴搜索团队告诉您答案

作者:张照亮(士恒)阿里巴巴搜索事业部高级技术专家

1. 业务背景

阿里巴巴电商搜索推荐实时数据仓库承载了阿里巴巴集团淘宝、淘宝特价版、饿了么等多个电商业务的实时数仓场景,提供了包括实时大屏、实时报表、实时算法训练、实时A/B实验看板等多种数据应用支持。

数据的价值

我们认为数据处于阿里巴巴搜索推荐的大脑位置,这体现在算法迭代、产品运营和老板决策等多个方面。那么数据是怎样在搜索推荐业务场景中流转的呢?首先是信息采集,用户在使用手机淘宝的搜索和推荐功能时,会触发到服务端上的埋点信息;接下来会经过离线和实时的ETL加工,再装载到产品引擎里面;然后我们会基于引擎来构建分析系统,帮助算法、产品做分析决策;形成一次决策之后,会有一些新的内容上线,用户可以看到算法模型产出的一些业务形态;这样就产生了一轮新的数据采集、加工、装载和分析的过程。这样一来就可以利用数据形成一个完整的业务链路,其中每个环节都非常重要。

1.png

搜索推荐典型场景

实时数据在电商搜索推荐中有多种不同的应用场景,如实时分析、算法应用和精细化人群运营等。
1)实时分析和算法应用场景
在实时分析和算法应用场景中,我们利用实时数据仓库搭建分析报表、实时大屏、训练算法模型以及打造其他类型的数据产品。实时数据的需求搜索推荐场景下主要有以下特点:

  • 数据量大:单日PB级存储
  • 单表总条数:_千亿+_
  • QPS高:峰值写入RPS 6500W+
  • 峰值查询QPS:_200+_
  • 数据灵活性要求高,分析场景多样化,固定条件高频分析、非固定条件多维查询

2)精细化人群运营场景
在电商运营中,经常会有针对不同人群采用不同运营策略的需求。传统方式使用离线数据对人群进行活动投放,但一般需要到第二天才能看到前一日的活动运营效果。为了更高效地观测、提升运营效果,实时的人群投放、人群画像成为必不可少的需求。
实时数仓将会把实时数据以实时大屏、实时报表的形式,为活动运营提供实时的人群行为效果数据,如不同地区、不同年龄段人群的实时UV、实时成交额等。此外,还需要将实时数据与离线数据进行关联对比计算,提供实时的环比、同比数据。

2.典型实时数仓诉求

综合以上背景,在实时数仓建设的过程中,我们总结了以下几类典型的实时数仓诉求:

分组横截面

例如分行业指标展示,通常是在SQL中用group by进行查询;

####多维过滤

场景过滤、用户过滤、商品过滤、商家过滤等,通常使用array字段进行属性值的过滤;

聚合

基于明细数据聚合计算实时指标,如SUM、COUNT_DISTINCT计算等;

#### A/B Test

通过解析日志埋点中的分桶字段,计算测试桶与基准桶之间的实时Gap数据;

指定Key

在排查问题或观测核心商家指标时,经常需要指定商家ID、商品ID查询实时指标,需要基于明细实时表中的id字段过滤后进行聚合计算;

####流批一体

由于实时数仓仅保留最近2天的数据,在面对计算同比、环比等需求时,就需要读取离线数据与实时数据进行关联计算,这样产品/运营在看上层报表展现时就能直观看到今年实时数据和去年同期的对比表现。

3. 实时数仓架构

基于上诉典型实时数仓诉求,我们抽象出了如下图所示的典型实时数仓架构。
实时采集的业务日志经过实时计算Flink清洗过滤,将结果写到OLAP引擎里面,OLAP引擎既要支持多维的交互式查询、还要支持KV查询和流批一体查询,来满足我们各种各样的业务诉求,同时OLAP引擎还需要对接上层构建的各种业务应用,提供在线服务。
2.png

基于这个典型的实时架构,下面则是我们搜索推荐场景下的实时架构演进过程。

1)实时数仓架构 1.0版

首先是实时数仓架构1.0版,如下图所示,这个版本主要是由3个板块组成:

数据采集
在数据采集层,我们将上游实时采集的数据分为用户行为日志和商品维表、商家维表、用户维表等,为什么会有维表呢?因为每个业务在埋点时不会将所有信息全部埋在日志里面,如果所有信息都由用户行为日志承载,灵活性将会特别差,所以维表在业务上担任信息扩展的角色。
采集的用户行为日志将会实时写入实时计算Flink,用户维表、商品维表等维表数据统一归档至MaxCompute中,在初步计算后将会通过数据同步工具(DataX)同步至批处理引擎中。

数据处理
在数据处理层中,流处理部分,由Flink对实时写入的用户行为日志数据做初步处理,具体的处理包括数据解析、清洗、过滤、关联维表等。
批处理部分,为了在数据查询和服务中根据属性查询、筛选数据,需要在Flink作业中将用户的实时行为和维表做关联计算,这就需要批处理系统能够支持高QPS查询,当时搜索业务的单表QPS最高达6500万,经过多方调研,选择了HBase作为维表的批处理引擎。
Flink作业中基于用户ID、商品ID、商家ID等关联HBase维表中的属性数据,输出一张包含多个维度列的实时宽表,再输出到OLAP引擎。为了简化Flink实时作业,降低实时计算的压力,我们没有在Flink中使用窗口函数做指标的聚合工作,只是对实时日志简单过滤、关联后直接输明细数据到下游,这就要求下游引擎需要提既要支持KV查询、OLAP多维交互式查询,还要支持流批一体查询。

数据查询和服务
在第一版架构中我们使用的是Lightning引擎来承载Flink输出的实时明细数据,并基于Lightning实现查询流批一体,再对上层应用提供统一的实时数据查询服务。
但是Lightning的局限性也是非常明显的:第一是查询方式是非SQL类型不够友好,若是写SQL需要二次封装。第二是Lightning采用的是公共集群,多用户资源不隔离,当需要查询大量数据时,容易出现性能波动和资源排队等问题,使得查询耗时较久,在实际业务场景使用中有一定的限制。
3.png

2)实时数仓架构 2.0版

基于Lightning的限制,我们希望能找到一款替代产品,它的能力要在Lightning之上,支撑OLAP的交互式查询以及高QPS的维表校验查询。于是在2.0版的实时数仓架构中,我们开始接入Hologres。
最开始,我们只是用Hologres替代Lightning提供KV、OLAP查询能力,解决了Lightning所带来的局限性。这样的架构看起来很好,但因为还需要经过HBase存储维表,随着数据量的增长,数据导入至HBase的时间也越长,实际上浪费了大量资源,并且随着线上服务实时性要求增加,HBase的弊端也越来越明显。
而Hologres的核心能力之一是加速离线数据,尤其是针对MaxCompute的数据,在底层与其资源打通,能加速查询。所以我们就萌生了将Hologres替代HBase的想法,以Hologres为统一的存储,数据也无需再导入导出,保证了一份数据一份存储。

于是,最终的实时数仓架构2.0版如下:
数据处理阶段直接将用户维表、商品维表、商家维表以行存模式存储到Hologres中,以此替代Hbase存储。Flink中的作业可以直接读取Hologres的维表,与行为日志进行关联。
在数据查询和服务阶段,我们将Flink处理输出的实时明细数据统一存储至Hologres,由Hologres提供高并发的数据实时写入和实时查询。
4.png

4. 基于Hologres的最佳实践

实时数仓2.0版本因为Hologres的接入,既精简了架构,节约了资源,也真正实现了流批一体。这个架构也一直使用至今,下面是Hologres基于此架构在搜索推荐具体多个业务场景中的最佳实践。

1)行存最佳实践

Hologres支持行存和列存两种存储模式,行存对于key-value查询场景比较友好,适合基于primary key的点查和 scan,可以将行存模式的表看作是一张类似于Hbase的表,用不同的表存储不同实体的维度信息。在Flink实时作业中可以高效地从Hologres行存表中读取维表数据,与实时流中的实体进行关联。
5.png

2)列存最佳实践

Hologres中默认表的存储模式是列存,列存对于OLAP场景较为友好,适合各种复杂查询。
基于Hologres的列存模式,我们搭建了搜索、推荐业务的实时数据查询看板,在实时看板上可以支持数十个不同维度的实时筛选过滤。在最高峰值每秒写入条数(RPS)超过500万的同时仍然可以秒级查询多个维度筛选下的聚合指标结果。同时Hologres表支持设置表数据TTL的属性,一般我们将一张实时表的生命周期设置为48小时,超过48小时的数据会被自动删除,在实时看板中支持用户对最近两天内的实时数据进行查询,避免了不必要的资源浪费。

3)流批一体最佳实践

Hologres不仅支持基于实时明细的数据的即席分析查询,也支持直接加速查询MaxCompute离线表,因此我们利用这一特性,实现流批一体的查询(实时离线联邦分析)。

在天猫大促活动中,我们利用Hologres的联邦分析能力搭建了核心商家的目标完成率、去年同期对比看板,为运营算法决策提供了有效的数据支撑。
其中目标完成率看板开发借助实时离线联邦分析变得更为简单,即通过Hologres实时查询大促当天的指标,并用实时表的当天指标除以离线表中设定的目标指标,从而让运营能够看到实时更新的核心商家当天目标的完成情况。
去年同期对比实时看板的计算逻辑也是类似的,可以在SQL中将实时表与去年的离线表JOIN后进行关键指标的同比计算。
所有的计算都可以在Hologres中完成,通过SQL表达计算逻辑即可,无需额外的数据开发工作,一份数据一套代码,降低开发运维难度,真正实现流批一体。
6.png

4)高并发实时Update

在一些场景下,我们不仅需要向OLAP引擎实时增量写入数据,还需要对写入的数据进行更新操作(update)。

例如,在订单成交归因时,Flink实时作业会将订单提交数据流与进度点击数据流进行双流JOIN,并且在还需要取订单提交前的最后一次点击事件进行关联。当有多条点击事件先后到达时,我们就需要更新订单归因明细数据,此时需要利用Hologres的update支持,通过数据的主键更新原有数据,保证成交归因的数据准确性。在实践中Hologres的update写入峰值能达50W,满足业务高并发实时更新需求。

5. 未来展望

我们希望未来基于Hologres引擎持续改进现有的实时数仓,主要的方向主要有:

1)实时表JOIN
Hologres现阶段支持百亿级表与亿级表之间的JOIN,秒级查询响应。基于这个特性,期望将原本需要在数据处理阶段由Flink实时作业完成的维表关联工作,可以改为在查询Hologres阶段实时JOIN计算。例如表1是明细数据表,表2是用户维表,在查询阶段的JOIN可以通过筛选用户维表,然后与明细数据表关联,达到筛选过滤数据的目的。这样的改进将带来几个好处:
1)减少Hologres中的数据存储量,避免实时表中存储大量的数据冗余(如:同一个商品ID的数据会重复存储);
2)提升实时数据中维度属性的时效性,在查询阶段实时JOIN维表数据后进行计算,可以使得我们在通过维度筛选数据的时候,始终是用的最新的维度属性。

2)持久化存储
我们未来将探索如何将常用维度的实时数据,利用Hologres的计算和存储能力,将计算结果持久化存储。

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多数据源一站式入湖

简介: 通过一站式入湖,将不同数据源的数据统一归并到以OSS对象存储为基础架构的集中式数据湖存储中,解决了企业面临的数据孤岛问题,为统一的数据分析打好了基础. 背景 数据湖作为一个集中化的数据存储仓库,支持的数据…

一文说透架构设计的本质

作者 | 猿码架构来源 | 云时代架构头图 | 下载于视觉中国前言:在软件研发领域,程序员的终极目标都是想成为一名合格的架构师。然而梦想很美好,但现实却很曲折。在实际工作中,程序员会分很多种,有的擅长编码实现&#x…

“视频云营业厅”发布,蚂蚁 mPaaS 加速金融机构数字化转型

简介: 线下业务线上办,便民服务不间断 在业务和数据争相“上云”的今天,更多金融机构加速数字化转型进程,将原有的人对人、线下、柜面核心业务进一步线上化,扩充全新的业务触点,开启远程业务办理的新模式。…

被Python「苦虐」的日子太惨了!

Python因为其优越的特性广泛应用于数据分析、人工智能、Web开发、后端开发、自动化测试/运维、爬虫等领域,也得到了很多企业的青睐。甚至连BATZJ的技术大牛,都无可否认Python现在对于一个程序员发展的重要性!最近一两年,我身边也有…

阿里云肖力:原生安全打造云上绿洲

2020年9月17日-18日,一年一度的云栖大会在云上如约而至。疫情加速数字化转型大背景之下,云原生以一种高能见度为各行业带来了一个更动态多变、更具效率和生命力的架构。云原生安全具有什么优势,能否解决线下业务场景的安全困局?作…

Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索

简介: 作为微服务框架的核心引擎--注册中心,是必不可缺少的组件,市面已经有多款注册中心支持 Go 语言,应该如何选择呢?我们可以对目前主流的支持 Go 语言的注册中心做个对比。 作者 | 李志鹏 近几年,随着 …

微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码

从无序中寻找踪迹,从眼前事探索未来。正值 IT 黄金十年新开端, CSDN 欲以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,现在推出年度重磅企划——「拟合」,通过对话企业高管大咖,跟踪报道企…

Chrome浏览器直接下载pdf文件的设置步骤

使用Google Chrome浏览器,在点击网页中的pdf文件时,浏览器会直接将pdf文件打开并显示,要下载pdf文件的话,还需要进行另存操作。 有的时候我们点击pdf文件就是为了直接下载,而不是为了在浏览器中查看pdf文件。可以按以…

Bilibili资深运维工程师:DCDN在游戏应用加速中的实践

简介: bilibili资深运维工程师李宁分享《DCDN在游戏应用加速中的实践》从bilibili游戏应用的效果和成本入手,深入浅出地分享DCDN全站加速在游戏加速场景中的应用。 日前,云栖大会新一代CDN的技术突破与应用实践专场中,bilibili资…

Gartner:云安全的未来——中国的安全访问服务边缘架构

作者 | Gartner高级研究总监 Evan Zeng 编辑 | 宋 慧 头图 | 付费下载于东方IC Gartner最新的“安全领域新兴技术及趋势影响雷达”(Emerging Technologies and Trends Impact Radar: Security)显示,安全服务及接入边缘技术具有极高重要性&am…

springboot word excel ppt 图片aspose 转换PDF 在线预览

文章目录1. 引入依赖2. 注册工具类3. 文件转换工具类4. 文件预览工具类5. 文件处理实现类6. 文件处理入口7. 配置类8. 配置文件9. 依赖目录文件列表10. 图片转换工具类11. 测试连接12. 效果图12. 执行shell命令工具类补充1. 引入依赖 下载 Aspose 的依赖 Jar 包可以通过一下仓…

架构制图:工具与方法论

简介: 软件工程也是工程,因此传统工程制图的一些基本理论,在软件行业同样适用。但另一方面,软件与实体制造业之间还是有着本质区别,所以在制图方面的需求和方式也大相径庭,无法直接套用。作为软件行业的从业…

Gartner:云安全的未来,是安全访问服务边缘架构

作者 | Gartner高级研究总监 Evan Zeng编辑 | 宋 慧头图 | 付费下载于东方ICGartner最新的“安全领域新兴技术及趋势影响雷达”(Emerging Technologies and Trends Impact Radar: Security)显示,安全服务及接入边缘技术具有极高重要性&#x…

奥哲孟凡俊:低代码平台对当代企业智能管理的支撑

简介: 导读:在数字化时代,业务拓展快,迭变快将成为常态和主流,企业数字化转型除了企业内部协同提效之外,基于多项底层技术框架的低代码平台更是智能协作不可或缺的底层支持,奥哲高级副总裁兼奥哲…

yarn 不是内部或外部命令,也不是可运行的程序(亲测可用)

这个时候报 yarn 不是内部或外部命令 相信你的npm已经安装好了 方法一(网上大多数是这个): npm install -g yarn方法二(我的是这个):配置环境变量(你的yarn地址直接复制上去就好了&#xff09…

基于 Flink + Hive 构建流批一体准实时数仓

简介: 想要搭建流式链路就必须得抛弃现有的 Hive 数仓吗?并不是,借助 Flink 可以实现已有的 Hive 离线数仓准实时化。本文整理自 Apache Flink Committer、阿里巴巴技术专家李劲松的分享,文章将分析当前离线数仓实时化的难点&…

腾讯云~kafka伪集群搭建

文章目录一、zookeeper伪集群搭建1. 下载安装包2. 解压安装包3. 创建目录4. 修改配置文件5. 修改dataDir,clientPort两个配置项5. 在data目录下创建myid文件6. 复制多个zookeeper7. 修改内存大小8. 启动zookeper9. 查看zookeeper运行状态二、kafka 伪集群搭建2.1. 下…

脚本征集大赛开启啦!100%有奖!

对一个程序爱好者来说,最酷的事情莫非就是用你喜欢的语言一步步实现你的idea, 现在用 CSDN 浏览器助手插件, 不仅能提升浏览器效率,还能在上面开发黑科技脚本,帮助你实现各种 idea~

蚂蚁御术:我的前端十年成长之路

我是御术,10年北邮毕业参加工作至今,刚好10年。一直觉得自己特别幸运,一路走来遇到了那么多好人好事,有机会一同做了点事情,由衷感激家人朋友们的支持和帮助。 自以为每一个人的发展轨迹都是不可复制的,过…

看动画学算法之:排序-基数排序

简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀。 而解决大范围的元素排序的办法就是基数排序。 基数排序…