优酷提出基于图执行引擎的算法服务框架,系统架构概览
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
背景
在阿里的业务中,有广泛的算法应用场景,也沉淀了相关的算法应用平台和工具:基础的算法引擎部分,有成熟的召回和打分预估引擎、在线实时特征服务;推荐算法应用领域,有算法实验平台 TPP(源于淘宝个性化平台),提供 Serverless 形式的算法实验平台,包括资源弹性伸缩、实验能力(代码在线发布、AB 分流、动态配置)、监控管理(完善的监控报警、流控、降级)等能力,是算法在线应用的基石。
但在实际的算法应用业务中(如优酷推荐业务),算法应用场景众多(100+ 活跃场景),需求灵活多变,如果没有一套通用业务框架抽象出通用和定制化的部分来提高算法组件的复用度,会严重拖慢算法实验的节奏。基于图引擎的算法服务框架就是为了封装这样一套框架,抽象算法在线服务的通用算子,支持运行时算法流程的装配,提升算法服务场景搭建的效率。
设计概览
算法推荐典型的在线处理执行流程是:多路粗排召回、合并、预估、打散策略。推荐服务根据用户的设备 ID 等其他必要信息进行多路并行召回,在召回引擎中粗排后,经过必要的过滤处理,截取一定数量的内容调用 Rank 引擎进行精排预估,预估结果经过一系列算法策略处理后输出最终结果。
整个过程中召回、合并、预估、打散等业务处理既有并行处理也有串行处理,可以根据业务需要灵活配置。基于图的推荐业务执行引擎是运行在算法实验平台上的执行引擎,它的典型处理流程是:在 AB 实验分桶上,通过图形化交互页面配置数据源、业务算子的执行依赖关系,并配置每个算子的运行时动态参数。
系统总体结构如下图所示,共分成五个主要模块(DAG 图执行引擎、图执行算子元件、图形化配置 DAG、图配置动态解析、Debug 调试)。
图:系统总体架构
当推荐请求到达时,引擎读取 AB 参数,根据参数上配置的算子信息,通过反射机制创建算子实例,动态组装成可运行的 DAG。根据条件分支配置,动态裁剪运行时的 DAG 实例,根据图运行占用最大线程数配置,动态调整线程复用。算子通过算法实验平台的底层协程池并行运行。
关键模块
1 图执行算子元件
1) 数据集
在 DAG 图中流转的数据统一封装为 DataSet 数据集,数据集是结构化多行二维数据的封装,在数据集上封装便利的基础算子操作。
数据集上一系列处理操作基于 Java 的 Stream API 来处理,以此达到集合处理的最好性能,将非 Action 操作延迟到最后数据处理时运行。
2) 数据源
将能够返回数据或者数据交互的二方服务封装为通用数据源,所有业务算子围绕数据源的数据进行业务开发,通用数据源包括召回数据集、在线算法需要的辅助数据集(如存放在 KV 内存存储的旁路召回数据、特征等数据)、打分预估结果集、内存数据源等。
数据源的封装通过动态参数配置方式实现通用性和可扩展性。数据查询只需要修改配置即可实现数据获取,不需要开发代码。
3) 基础算子
在 DataSet 数据集上封装的基本操作作为基础算子,比如 Join、Union、Filter、Sort、Map、Collect 等流式操作。在 DataSet 上重新封装 Stream 相关 API,便于对 DataSet 进行流式处理。
4) 业务算子
召回、预估、合并、打散、过滤等业务操作封装为业务算子,在业务算子中可以查询数据源,返回数据集后通过基础算子计算得到结果。
2 图形化配置 DAG
优酷提出基于图执行引擎的算法服务框架,系统架构概览
3 配置动态解析和优化
1)根据 AB 配置实时变更图执行结构
为了减少解析图结构的耗时,图引擎在运行时对图结构做了缓存,但在 AB 配置更新时需要实时反映到图引擎中,所以要根据图配置的哈希值校验的方式检测图配置是否更新,图结构变更后会重新创建引擎实例。
2)子图并行线程优化
在 DAG 执行时,所有算子都交给线程池异步运行,但是在大多数情况下子图可能是一个顺序执行图,不需要并行,不应该占用其他线程,所以在图执行时,动态根据依赖关系识别节点是否需要占用新线程运行。
3)条件分支动态裁剪
如果图结构中存在条件节点,会根据条件节点的动态结果裁剪后续图节点的运行。如果一个图节点的执行条件为否,后续单独依赖它的节点都不会运行,条件节点具备传递性。如果后续节点不单独依赖不运行的节点,则当前节点可运行。
4 DAG 图执行引擎
1)并发控制
通过图中依赖关系动态解析节点需要通过并行还是串行执行,在图中配置最大并发线程数来控制图的最大并发度。最大程度复用线程,减少线程切换带来的开销。
2)超时控制
通过整个图上配置超时时间来控制图的超时,根据业务粒度将子业务配置为子图,从而通过控制子图的超时时间来控制子业务的超时时间。
3)通过协程优化异步执行
DAG 运行依赖线程池运行,算法实验平台提供了基础线程池,并同时将线程池在 JVM 层面优化为协程,通过压测比对,普通线程池的性能要低于协程池的性能。
总结 & 展望
基于图引擎的算法服务框架建设,通过抽象算法业务的通用组件,提供图形化流程编排工具和图执行引擎,实现了 0 代码、配置化支持算法业务需求。为快速的算法应用,不断提升用户的个性化服务打下了坚实基础。对推荐、搜索、广告等算法应用业务有参考价值。
接下来,为了进一步提升引擎性能,我们将在构图优化和引擎执行性能上做优化,在保持业务表达灵活简洁的同时,追求更优的执行性能。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-10
本文作者:阿里文娱技术团队
本文来自:“infoq”,了解相关信息可以关注“infoq”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数智时代新基石,贾扬清重磅发布新一代云原生数据仓库与数据湖
6月9日, 在2020阿里云峰会上,阿里巴巴副总裁、阿里云计算平台事业部高级研究员贾扬清宣布推出新一代云原生数据仓库和数据湖解决方案。基于创新的技术架构,新一代云原生数据仓库可支持PB级数据关联分析和实时查询,实现离线、实时、分析、服务的四位一体。同时推出的数据湖解决方案,采用一种存储多种计算理念,基于存储与计算分离架构和全新大数据分析加速引擎,可实现与本地计算一样的快速体验,激发企业数智动能。 以下为贾扬清演讲全文[(附视频回顾>>)](https://summit.aliyun.com/events?liveId=2923 如今我们谈到产业数字化,数字产业化,今天绝大多数的经济活动、数据的沉淀分析和服务都是离不开的。同时我们又说摸着石头过河,绝大多数的企业在业务升级跟技术升级的过程当中,往往都采取一个摸着石头过河的方法,在遇到不同的数据分析跟服务的需求的时候,寻找单个的单点的系统来解决它实际的单点的问题。这样的一个过程就会遇到最后的一个问题,是在一个看似完整的系统背后,是一个一个的数据的孤岛,这些孤岛之间数据的联通,数据的实时传输都变成了非常大的问题。从一个整个企业的角...
- 下一篇
阿里云&HiShop海商创新合作—线上商城这样做更合适
做商城一直是企业商家经久不衰的话题,尽管人们对于网上商城系统的了解已经有很多。距离电商真正来到与消费者做到息息相关,或许还要很长的路要走。人、货、场三种元素没有实现根本联通是一个很重要的原因。那么企业应该怎样搭建线上商城才能最符合当下消费者的需要呢?阿里云与HiShop海商创新合作,结合商城软件+云资源硬件联合“企业上云一站式产品服务”打造一款全渠道全场景商城系统—移动云商城。不再烦恼缺人、缺钱、缺方案,不仅仅在商城软件上实现全渠道全零售全场景模式,七大商城端口用户在哪,商城就做到哪,借势阿里云云资源作为底层架构为商城软件数据以及系统稳定性保驾护航。一、企业对于线上商城的发展方向应该怎样进行把握?1、了解商城系统与人们社交息息相关每一个阶段人们都有不同的诉求。在PC时代,用户大多数是通过电脑来实现自己的需求,而到了移动互联网时代,用户需求更加偏向于“娱乐和社交”。这就要求我们在小小的手机屏幕里既表现自己的产品特色又能给消费者带来愉悦的感受。而且有更多的社交元素,与用户产生社交的设计,比如一键拨号或在线客服这些在所有的商品页面都应该有,这样可以增加移动商城网站的曝光度,传播力度也会非常大...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题