阿里妈妈Dolphin智能计算引擎基于Flink+Hologres实践

news2024/11/23 9:04:43

作者:徐闻春(花名 陌奈) 阿里妈妈事业部技术专家

本文整理至Flink+Hologres实时数仓Workshop北京站,点击查看视频回放>>>

阿里妈妈数据引擎团队负责广告营销计算引擎Dophin的开发,目前支撑百万级广告主的营销产品,支持万亿级数据毫秒级交互式人群圈选、洞察分析及百亿级数据秒级广告效果分析,同时支持OLAP、实时、离线及AI超融合计算能力,为商家端产品万相台、直通车、超级推荐和达摩盘等营销产品提供极速的数据探索能力。

阿里妈妈Dolphin智能计算引擎介绍

用户打开淘宝 App 时,后台会有两种类型的请求,第一种类型是满足用户诉求的自然推荐,第二种请求是满足用户和商家综合诉求的广告推荐。例如打开淘宝看到某品牌,是因为该品牌使用阿里妈妈营销产品圈选人群进行广告投放,被圈选的人会看到该广告。

商家端营销产品的主要目标是服务于广告主,帮助广告主进行人群投放,从而提升经营效果。此类营销产品覆盖的场景非常广泛,包括人群圈选、洞察分析、Lookalike、人群推荐等场景。这些场景会有OLAP分析、AI算法和实时特征计算的基础能力需求,基于这样一个数据+算法综合能力需求背景下,阿里妈妈自研了Dolphin计算引擎。

Dolphin引擎是一个分析AI一体化的超融合引擎,拥有 OLAP分析计算、 Streaming 流计算、 Batch 批量计算和AI 算法计算四个领域能力,这些能力基于SQL组件和Index Build 组件构建:

  • SQL 组件的主要能力是 SQL转义、路由、负载均衡、联邦查询。
  • Index Build 组件主要负责智能索引、多级索引(Bitmap索引、时间序列索引等)、调度控制等。

Dophin引擎提供了自研索引、智能物化、智能索引选择、异构数据源查询和近似计算等几个优势功能。其中:

  • 智能物化:智能物化指能够自动将SQL转化为物化视图,无需人工手动操作。使用深度模型对业务历史查询 SQL 进行时序分析,比如哪些广告主在什么时间周期的数据使用频率更高,可以选择将高频的使用数据进行物化,以提高数据查询效率。
  • 智能索引:大多数业界的做法是为查询建立全索引,而智能索引要做的事情就是分析 SQL 查询语句,判断条件命中率,从而推荐不同的索引,推荐目标为让索引对数据查询的过滤量最大,同时避免建立无效索引占用。
  • 近似计算:根据统计的结果用近似的算法来计算,主要针对大规模数据,计算其近似结果。

目前,Dolphin 引擎支撑的业务规模为 2w+core,每日请求量2亿+,QPS为3000+,支撑百万级广告主、存储了PB级数据,涵盖阿里10+核心BU的核心场景如人群圈选、洞察分析等场景,业务方可以通过Dolphin 引擎就能非常高效且低成本的进行数据探索。

Dolphin引擎主要解决两个问题,一个是超大规模场景下使用通用计算方法存在的性能瓶颈问题;第二个就是降低业务方使用引擎成本,甚至做到对底层引擎无感知。很多通用引擎并不能直接解决业务的性能问题,因此需要对数据做索引以实现查询优化。因此我们在已有的引擎基础上建设了Dolphin引擎。那从Dolphin引擎架构图我们也可以看到,引擎的底层计算存储层主要由Flink+Hologres来实现,这就相当于,广告主每一次在Dolphin引擎上的计算,最终都会被转换成由Flink+Hologres来完成,那么我们为什么选择Flink+Hologres这套架构呢?

为什么选用Flink+Hologres?

选择Flink+Hologres这套架构主要来源于对底层引擎的强需求:

1、高性能

广告场景对延迟有着很敏感的要求,如果底层引擎的性能不足,即使上层应用再做优化,也会导致计算性能大打折扣,从而导致广告投放等不精准。

2、可扩展

底层引擎需要足够的可扩展,这样上层应用才能更加灵活的去承接新的业务、新的场景,应对业务高低峰期等情况

而Flink 和 Hologres能够满足以上两个业务需求:

  • 实时引擎Flink支持低延迟,支持自动调优,且技术稳定成熟。用户在 Dolphin Streaming平台上提交 SQL 时,SQL会被转译为Flink SQL,提交给Flink引擎,这里会利用Flink autoscale自动配置调优功能来自动调整,降低可了用户对 Flink 的学习成本和调优维护成本。
  • Dolphin引擎与Hologres更有着更长的合作历史:在2019 年Dolphin引擎与 Hologres共建了 Bitmap 计算能力,实现业界公开信息里最大规模、最高性能、最低使用成本的圈人能力;2020 年共建了千万级人群中心,实现广告人群统一管理;2021 年,Dolphin引擎支撑了算法业务场景,使用 Hologres向量计算能力支撑算法业务,主要支撑推荐算法里粗排召回计算环节;2022年,支持了算法实时特征开发能力,这里就运用到 Hologres实时写入和点查能力,实现了更高效的实时开发。最终,我们将Hologres的所有能力整合在一起,形成了超融合一体化引擎能力。

引擎实现细节1:如何解决超大规模OLAP计算能力

挑战:

Dolphin OLAP 计算的核心在于解决超大规模问题。阿里妈妈广告场景上存放着大量的数据,为了让广告主有更好的用户体验,需要支持更复杂的计算逻辑和更快的计算速度。其中典型的场景有单SQL几十张表Join、单表最高万亿行规模、单表基数最高百万级和万级标签日更新。

解决方案:

例如广告场景上有很常见的数据表:用户基础表(性别年龄)和用户店铺表(用户、店铺类型),当需要查询 20、 30 岁且逛过某品牌的用户数量时,如果数据量很少,通用引擎可以很快得出结果;但如果SQL涉及Join的表有几十张,而且还可能存在万亿级表,此类情况下通用计算引擎无法完成计算。因此,我们基于Hologres共建了一套 Bitmap 计算方案。

具体方案流程为:

  1. 方案查询流程:用户输入逻辑执行 SQL ,Dolphin引擎将用户逻辑执行 SQL 转译为物理执行 SQL ,然后传递给 Hologres执行。
  2. 方案索引构建流程:MaxCompute 将标签数据进行预处理,然后将它构建为 Bitmap 索引,再写入到 Hologres,即可实现的 Bitmap查询。

通过这样的Bitmap方案,能够让查询拥有更好的性能和更低的存储, 在超大规模OLAP计算场景中,支撑了200+QPS ,平均百毫秒查询性能,以及万亿行数据秒级精确计算,高效支撑用户交互式分析低延迟的用户体验。

引擎实现细节2:如何实现低成本的实时开发能力

广告场景通常都是实时计算,这里我们通过Flink来支持是非常方便的,而我们的面向的用户通常都是不同岗位,比如算法、运营等,假如全部都用Flink去开发任务,那么对于上层应用的同学来说就会额外增加非常多的学习成本和压力,比如既要学会Flink SQL,还要学会Hologres SQL,流程和操作都非常繁琐。为了降低用户的学习成本,提升开发效率,Dolphin使用OpenAPI 做了丰富的实践,开发了一套 Dolphin Streaming实时开发平台,通过Open API 直接以服务接口调用的形式调用 Flink 提交作业、暂停作业、管理作业等。

Dolphin Streaming将 Hologres和 Flink 做了封装,对用户暴露更简单的开发接口Dolphin SQL 。用户在阿里妈妈交互式研发平台上提交 Dolphin SQL,SQL变会自动通过 Dolphin  Streaming 进行处理,做 SQL 解析及转译,将 SQL 通过 OpenAPI 发送给 Flink,拉起作业做执行。执行完后,数据会实时写入到 Hologres,然后通过Dolphin SQL将写入 Hologres的特征直接查询出来,无需再考虑存储、配置认证信息、token信息等,只需像使用数据库一样开发实时作业,整个流程非常顺滑简单,大大提高开发效率。

demo1:计算用户最近50条行为序列

用户最近 50 条行为序列是算法序列模型里常用的特征,一般需要开发行为序列特征,如果用Dolphin Streaming 开发,只需简单三步:

  1. 第一步,定义数据源表。Biztype可直接填写为tt ,tt 是阿里的实时数据源。这里如果要写Flink SQL,则需要登入tt管理平台,查询topic并订阅subID。
  2. 第二步,定义输出表。Biztype=feature 代表写入到 Hologres,然后填好 PK 参数即可。
  3. 第三,定义计算逻辑。SQL 执行完之后,数据源源不断地写入,通过 select user_id, product_id from ** where user _id=**即可查询用户特征。

demo2:实时Debug功能。

在实时开发时,经常需要查看上游数据源,以往的方式通常需要定义一个print输出源,然后定义输入源和执行逻辑,将数据写到标准输出,再通过查看日志才能获取到上游数据源。而我们实现了更简单的方式。

通过 create table 形式注册一张表以后,执行 select user_id from某表,结果即直接展示表的明细。

通过Dolphin Streaming,我们可以非常高效的将复杂计算逻辑进行自动封装与转换,用户无需自己写SQL,也不需要去学习多种开发语言,就能非常高效的拿到想要的数据,大大降低了学习成本和使用门槛,同时也节省了开发效率。

业务场景实战

场景1:实时营销推荐

实时营销推荐是广告中最常见的场景,在该场景下,最大的痛点在于:广告主在使用营销平台时,常常面对如何推广、通过何种渠道推广等问题。

基于这样的用户诉求,从算法角度为广告主解决该问题:通过广告主点击某些信息、某些广告点位时,判断广告主意向,结合意向和广告主本身商家店铺和商品信息,为其推荐能提升经营效果的商品以及效果更优的投放渠道,从而让广告主的投放体验更好。

基于以上需求,我们开发了一套用于捕获用户实时行为的作业:通过 Flink 计算商家实时行为日志,存储到Hologres,然后在线模型直接读取特征,通过实时特征提升模型的推荐效果。

Dolphin Streaming方案主要使用了 Flink 实时计算、Hologres实时写入以及行表的点查能力,使整体开发效率提升三倍以上,推荐效果更佳。

场景2:向量召回计算

在算法里万物皆可向量表示,尤其是在推荐算法和召回流程中,经常使用向量召回获取 Top K 相似对象,在阿里妈妈向量召回的场景中,我们使用Hologres的向量召回能力,以Lookalike场景为例具体说明:

Lookalike是广告产品的重要能力,核心是基于种子人群特征选择相似人群,常应用在拉新场景。以电商场景为例,其原理可以抽象理解为针对已经在店铺有过行为的用户,分析其特征,寻找与之特征相似的用户,将宝贝推广给此类用户,从而促进店铺新用户增长。基于向量Lookalike算法实现过程如下:

  • 第一步,广告主圈种子人群。
  • 第二步,基于种子人群计算中心向量,再通过中心向量从整体用户里召回 Top K相似的用户。

传统算法下,Dolphin会使用没有向量召回能力的传统数据库,将数据导入到数据库中。先由Dolphin查询数据库,计算种子人群中心向量,然后通过Faiss将Top K 向量查出。传统方案整体运维和管理成本较高,因此我们对其进行了升级,直接使用 Dolphin 调用 Hologres,因为Hologres能够同时支持数据库功能和Proxima向量功能,简化了计算流程。

基于 Hologres的向量召回能力,我们开发了实时向量召回和批量向量召回能力,用户直接输入 SQL 即可调用底层 Hologres,Dolphin封装了容灾和负载均衡等重要能力,简单地填入参数即可完成批量向量召回的计算。其中

  • 实时向量召回:支撑1000+QPS,平均延迟50ms+,支撑了直通车、万向台、达摩盘等多个商家段营销业务场景
  • 批量向量召回:目前已对外产品化,提升开发效率3倍+,有效支撑达摩盘、直通车等多个算法业务

总结

基于 Flink+ Hologres 的强大能力,我们得以建设更贴近业务领域的超融合一体化Dolphin引擎,主要包括基于 Bitmap 的高性能 OLAP 计算、更简单灵活的实时开发能力以及基于Hologres强大的 AI 向量召回能力。

未来,我们会在智能化、一体化方面继续探索,不断提升用户体验。

了解Hologres:https://www.aliyun.com/product/bigdata/hologram

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

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

相关文章

ios打包证书申请流程

目前的APP开发,多端开发成为了主流,所以开发APP很多都是使用uniapp来开发,而且都是使用windows电脑来开发。但是在打包ios应用的时候,是需要一个p12格式的打包证书和profile描述文件的。 那么这两个文件如何申请呢?这…

关系抽取Casrel实现(Pytorch版)

前言 关系抽取是自然语言处理中的一个基本任务。关系抽取通常用三元组(subject, relation, object)表示。但在关系抽取中往往会面临的关系三元组重叠问题。《A Novel Cascade Binary Tagging Framework for Relational Triple Extraction》提出的CASREL模型可以有效的处理重叠关…

前端基础(十)_Dom自定义属性(带案例)

Dom自定义属性 1.1、为什么要用自定义属性 例&#xff1a;很多个 li 点击变颜色。 <ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8&…

LeetCode[373]查找和最小的K对数字

难度&#xff1a;中等题目&#xff1a;给定两个以 升序排列 的整数数组 nums1和 nums2, 以及一个整数 k。定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2。请找到和最小的 k个数对 (u1,v1), (u2,v2)... (uk,vk)。示例 1:输入: nums1 …

离散数学与组合数学-01集合论

文章目录1.离散数学与组合数学-01集合论1.1 集合定义1.1.1 什么是集合1.1.2 集合案例1.1.3 集合的符号表示1.2 集合表示1.2.1属于关系1.2.2 枚举法1.2.3 叙述法1.2.4 文氏图1.3 集合基数1.3.1 什么是集合基数1.3.2 集合基数案例1.4 集合间关系1.4.1 空集1.4.2 全集1.4.3 集合的…

【Vue + Koa 前后端分离项目实战9】使用开源框架==>快速搭建后台管理系统 -- part9 项目总结

人要保持忙碌&#xff0c;因为忙碌是世界上最便宜的药。 本博客教学视频来源于imoom 《0到1快速构建自己的后台管理系统》课程 官方演示地址&#xff1a;https://talelin.com/ 目录 一、项目介绍 1.技术准备 2.学到的内容 &#xff08;1&#xff09;后端接口实现的业务逻辑…

【Kotlin】标准库函数 ③ ( with 标准库函数 | also 标准库函数 )

文章目录一、with 标准库函数二、also 标准库函数Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ; 一、with 标准库函数 with 函数 与 run 函数 功能是一样的 , 其使用形式不同 , with 函数是 独立使用的 …

LaoCat带你认识容器与镜像(三【下】)

说随缘就随缘&#xff0c;前天刚说惰怠今天就更新~。 本章内容 Docker端口映射相关。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 二章二小节中介绍docker create命令时就提供了常用的附加参数列表&#xff0c;docker run可附加参数同create命令附加参数一致&…

Flink【0】初识Flink快速又灵巧

文章目录一、Flink的引入二、Flink的起源和设计理念1.起源2.设计流程一、Flink的引入 随着大数据的飞速发展&#xff0c;出现了很多热门的开源社区&#xff0c;其中著名的有 Hadoop、Storm&#xff0c; 以及后来的Spark&#xff0c;他们都有着各自专注的应用场景。尤以Spark掀…

c++11 标准模板(STL)(std::forward_list)(四)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

软件测试:缺陷管理制度

缺陷管理制度 编制部门&#xff1a; 时间&#xff1a;编 制 人&#xff1a; 时间&#xff1a;标 准 化&#xff1a; 时间&#xff1a;审 核&#xff1a; 时间&#xff1a;批 准&#xff1a; …

(一)STM32L4(RT- Thread)——电机和蜂鸣器,独立按键,LED灯

&#xff08;一&#xff09;STM32L4&#xff08;RT- Thread&#xff09;——电机和蜂鸣器&#xff0c;独立按键&#xff0c;LED灯 文章目录&#xff08;一&#xff09;STM32L4&#xff08;RT- Thread&#xff09;——电机和蜂鸣器&#xff0c;独立按键&#xff0c;LED灯LED灯学…

5.8.2、TCP 的连接释放

1、释放流程图 释放流程图 2、TCP 使用 “四报文挥手” 释放连接的具体过程 TCP 通过 “四报文挥手” 来释放连接 数据传输结束后&#xff0c;TCP 通信双方都可以释放连接 现在 TCP 客户进程和 TCP 服务器进程都处于连接已建立状态\color{blue}连接已建立状态连接已建立状态…

k8s 文件 目录挂载

k8s 文件 目录挂载1.环境说明2.HostPath 挂载至宿主机3.挂载至nfs3.1 第一种3.2 第二种3.3 volumeClaimTemplates 挂载模板4.emptyDir-临时数据卷5.未完待续1.环境说明 k8s 1.24.3 2.HostPath 挂载至宿主机 apiVersion: v1 kind: Pod metadata:name: test-pd spec:container…

【Git 从入门到精通】Git是干什么的?

文章目录一、Git简介1.发展历史2.工作机制分析3.代码托管中心二、理解版本控制1.什么是版本控制&#xff1f;2.版本控制的好处3.版本控制的手段①集中式版本控制工具②分布式版本控制工具一、Git简介 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处…

Spool Print Fool(CVE-2022-21999 )提权漏洞

Spool Print Fool&#xff08;CVE-2022-21999 &#xff09;提权漏洞 文章目录 一、Print Spooler 简介二、漏洞简介三、影响版本四、本地复现五、漏洞修复 一、Print Spooler 简介 Print Spooler是打印后台处理服务&#xff0c;即管理所有本地和⽹络打印队列及控制所有打印⼯作…

Scala 模式匹配

文章目录Scala 模式匹配一、模式匹配1、基本语法2、语法说明3、案例示例二、模式守卫三、模式匹配类型1、匹配常量2、匹配类型3、匹配数组Scala 模式匹配 一、模式匹配 Scala 中的模式匹配类似于Java中的switch语法&#xff0c;但是scala 从语法中补充了更多的功能&#xff0…

Optional更优雅的判空

我们在日常的开发工作最经常碰到的异常就是空指针异常&#xff0c;排查起来非常麻烦影响开发效率。如果想避免这种问题&#xff0c;就要写大量的if(xx ! null){}这样的冗余代码&#xff0c;把自己的逻辑写入到括号内部&#xff0c;这样的代码看起来臃肿繁琐。JDK8中为我们提供了…

IP 分支组网解决方案

IP 分支机构组网解决方案在总部部署高性能设备作为中心网关&#xff0c;在各地分支机构分别部署一台产品作为分支机构接入网关&#xff0c;与总部网关进行加密的连接。融合多种产品特性&#xff0c;可有效、快速、安全的实现分支机构的远程接入。同时&#xff0c;采用集中管控平…

对象,类与面向对象编程 上

目录 前言 理解对象 属性的类型 数据属性【Data Properties】 访问器属性【Accessor Properties】 合并对象 对象标识及相等判定 增强的对象语法 1. 属性值简写 2.可计算属性 3.简写方法名 4.对象解构 5.嵌套解构 创建对象 工厂模式 构造函数模式 原型模式 原型…