DII—算法服务利器

随着集团内各种离线处理、实时反馈、在线学习和分析系统的发展壮大,为算法同学使用数据提供了更多的手段和玩法,能够从数据中挖掘出更多的宝藏。但是仅仅产出数据是不够的,他们需要将数据结合算法在线服务的方式应用到业务中去,才能真正产生价值。从搜索事业部的现状来看,算法的作用方式主要有两种,一种是嵌入引擎内部跟着引擎一起run,一种是作为独立的算法服务存在。前一种方式相对聚焦,一般不会做很发散的事情,主要是结合在线的特征做一些排序和打散。后一种方式下,可以做的事情更多也更加灵活,以这种方式作用的服务包括号称搜索大脑的QP,以及suggest, relatedsearch等等。DII的诞生,就是为了支持算法同学玩转这类系统。我很难用一句话就描述清楚什么是DII,还是先一起来看看DII设计上的一些思考吧。

DII的主要特点

一、增强的链式处理框架

链式处理框架的精髓在于,将业务逻辑拆分为多个相对独立的业务模块,每个模块完成一个比较内聚的功能,模块之间可以传递数据进行协作;当接入一个新业务时,可以通过组装现有模块(必要情况下增加新模块)的方式得到满足功能的一条模块链,简称服务链。一个DII服务中一般会同时存在多个服务链,提供业务线上不同的服务接口。一个示例DII服务逻辑如下图所示。

链式处理框架是算法同学在长期工作中提炼出来的有效的运行模式。DII中对传统的链式处理框架进行了部分功能增强,主要包括:1.引入了参数传递的声明和限制机制,每个模块只能操作自己声明过的输入输出参数,这一方面使得模块的输入输出参数一目了然,带来了管理的便利性;另一方面也增强了安全性,避免参数的污染。2.在模块的process接口基础上增加了prepare接口,并且可以灵活定制处理链执行的分段策略,可以最大限度地增加对外部依赖访问的并发度,降低处理链的latency。

二、丰富的本地索引支持

ODPS上产出的数据都是行列式的表格结构,在线使用时为了提升查询效率自然要建立一个合理的索引结构,因此DII提供了丰富的本地索引结构,也称为表。目前支持的表类型包括:
1. kv表。可以指定ODPS表的某一个字段作为key,其它的多个字段作为value fields。
2. index表。可以对若干需要进行倒排查询的字段按照某种分词方式建立索引。

与ODPS表对应,DII中表的记录也是分字段带类型的,可以直接按字段的方式使用。DII使用的是isearch5的索引实现indexlib,因此也天然具备了indexlib强大的检索功能和优秀的性能。在召回之上,DII还提供了过滤和排序机制,包括内置的过滤和排序规则以及用户自定义插件接口。此外,DII还封装了几种常用的组合查询方式,包括迭代、join、merge,使用起来更加便利。DII的索引机制是可扩展的,可以根据用户需求新增索引类型,例如目前正在开发的Trie树索引结构,用来满足一些使用前缀查询的业务场景。

三、原生的外部服务访问集成

"小而美”是DII服务的一个共同特点,也是DII设计的初衷,所以免不了会访问一些外部服务。在搜索内部,最集中的体现就是访问iGraph--一个在线图存储和查询服务。DII集成了iGraph访问的功能,并且在易用性和性能两方面都进行了重点考量。首先,通过让用户模块在prepare阶段声明访问请求,框架收集后统一并发访问,可以大大降低整个服务的延迟。其次,通过让用户以配置的方式声明访问请求,可以提升开发和发布效率。

四、完善的数据更新链路

数据更新包括两方面,一是ODPS表到DII表的全量更新,二是表数据的实时更新。DII在这两块都提供了完善的支持。用户只需要在自助接入的web上建立好ODPS表到DII表的映射关系,之后系统就会在ODPS表有新的分区产出时自动构建索引,触发线上DII表的全量更新,用户不需要参与。实时更新则有两种方式,一种是通过DII提供的工具来执行,另一种是调用API直接更新。前一种比较适合运营或算法同学手工干预,第二种适合由外部的实时更新系统持续调用。

五、简便的自助接入和配置

系统的自助接入曾经算是特色,现在应该已经成为标配了,DII自然也不例外,当然在用户体验上我们还需要不断学习和改进。

六、方便的本地开发调试

DII的服务大部分都是直接面向业务的,业务逻辑可能会比较复杂,用户直接接入集群环境进行调试不太方便,因此DII也提供了方便的本地开发调试工具,包括模块代码自动生成,本地索引构建脚本,外部依赖mock等等。用户可以在本地完成模块开发和功能调试,然后再接入日常环境使用真实数据进行性能测试和联调,最后再同步到线上环境对外提供服务。

七、快速的BTS迭代机制

BTS迭代效率从某种程度上来说是算法同学的生命线。DII作为算法服务的后台自然要支持快速的BTS迭代。我们利用了搜索事业部的bts server来进行bts流量管理和数据报表查看,同时自身提供了两方面的支持,一是快速部署,结合运维管理系统,几分钟之内可以完成部署一个新bts集群,这样就可以方便地将应用的正式集群和若干bts集群物理隔离,从而兼顾线上稳定性和bts效率。二是提供流量切分入口,有些调用方自身还没有接入bts server,因此DII服务本身提供一个流量切分入口,目前是通过一个nginx统一接入层来实现的,调用方看到的是nginx这一层,但是流量会根据bts参数设置落到应用不同的DII集群去。

八、强大的运维配套支撑

刚才说BTS时提到的是”快",对线上服务来说,可能更重要的又是”稳”,同时还要保证资源的利用率以及服务容量的弹性伸缩。DII集成了hippo的支持,所有的DII应用都是运行在hippo之上的,再配合上DII运维管理系统的水位监控和健康分机制,能够基本解决资源利用率和服务容量的问题。这里重点说明一下DII在稳定性方面做出的努力。一是对数据的校验,包括对离线数据的size检查,字段的类型校验,以及产出索引的size检查和完整性校验。二是对服务的校验,DII的运维管理系统中集成了业务的冒烟case检查,再加上完善的日志监控和服务指标监控,基本上可以在第一时间发现服务的异常,当然这点对冒烟case的要求也非常高,百分百的安全是做不到的。三是对灰度切换和上线支持,一般重要的线上应用都会部署规模不等的多个集群,DII在数据切换和上线时是可以自动灰度进行的,每次灰度之后进行服务校验,如果发现问题会立刻终止并发出报警。四是对快速回滚的支持,主要包括数据的回滚和应用配置的回滚,数据回滚可以支持到单表和多表级别,一般回滚处理的时间可以达到十分钟级别。

一口气罗列了DII的这么多目标,有些是基本已经达到了,有些还在努力建设中,像自助接入的体验和运维配套设施的完善,还需要时间打磨。下面再来看一看目前已经有哪些典型的应用正在使用DII,达到了什么样的业务效果。

典型应用

一、RTP

RTP(real time prediction)是业界标准的实时rank server,用于ctr,cvr等各种机器学习模型预估的特定服务器,主要是进行实时的特征提取,预估打分用于线上的排序。在刚刚过去的是双十一中,RTP 作为实时rank server 为”天坑一号“ ,购物链路,行业等50多个场景提供打分排序服务。 集群高峰流量达到20.1wqps,每秒对2890w宝贝进行打分,并且支持了部分实时性要求比较高的数据进行小时级别数据回流,为推荐算法效果助一臂之力。由于使用了DII框架,RTP系统可以只专注在特征提取和计算上,像数据更新,索引查询,集群管理这些问题统统不用操心。

二、基于lucy的相关搜索和下拉提示

lucy是Query理解和应用小组的词推荐业务算法库,服务的主要场景是根据用户输入词给出相关词,其中相关搜索和下拉提示是最典型的两个应用。lucy从设计之初就选定DII作为其服务的承载框架。基于lucy的相关搜索从诞生第一天起就与DII紧密结合,采用了DII的倒排召回、join查询、自定义排序等特性,支撑了更复杂的算法逻辑,取得了良好的效果提升。同时借助DII的快速开发和接入特性,除了原有的主搜pc相关搜索业务,还快速支持了海外淘等其他部门的类似业务。目前下拉提示后台服务也从老的系统向DII中进行迁移。

三、阿里翻译

阿里翻译是将指定的源语言翻译成目标语言的在线翻译服务。国际化作为阿里巴巴集团的三大战略之一,其重要性不言而喻,不同国家之间的商品实现便捷的在线交易,离不开翻译的影子。阿里翻译目标就是实现不同语种的相互翻译并不断提升翻译质量,用户不需要学习其它国家的语言,也可以方便地购买其产品。目前阿里翻译已经在天猫国际、淘宝海外、AE和SC等诸多场景下应用,正在发挥越来越重要的作用。阿里翻译也是DII上的一个重要应用,它利用了DII的kv表来存储短语数据,同时利用了表插件的机制来支持重排序模型和语言模型,整个翻译算法的过程也是以DII的插件来实现的。由于翻译语言的多样性,词典的数据量超过了单机容量,需要部署多个小集群来分别处理不同的语言,利用DII的快速部署功能也已经轻松的实现。

四、SCRankingService

SCRankingService是基于DII框架开发的国际广告SC引擎的在线算分服务。作为SC引擎相关算分的统一服务平台,一方面服务于imatch,提供对在线召回广告进行实时算分,以进行广告的排序;另一方面服务于bp(广告主后台),实时计算广告的排位排价以及广告与词之间的相关性星级。随着业务的发展,算法插件和模型越来越多,针对不同流量的算法策略都不尽相同。原先策略管理都在算法插件内部,算法插件不仅要进行各个处理单元的管理(如计算score的ectr模块和计算相关性的mlr模块),还要根据流量进行策略选择。因而算法插件越来越重,开发和维护成本越来越高;并且插件只能通过全量流程更新,更新较慢。在这种情况下,SCRankService2.0应运而生,利用DII的插件机制,将算法模块拆成各个处理Module,并进行统一管理;模块与模块组合成完整的处理链,使用DII框架进行流量策略选择,从而算法插件只需要专注自身的算法逻辑,简化了算法代码,优化整体处理性能。并且利用DII支持的UPC机制,可支持算法在线插件的分钟级更新。

五、QP

QP(QueryPlanner)是搜索算法同学的主战场,目前囊括了针对各个搜索业务线的query分析服务,包括主搜,天猫,1688,村淘,聚划算等等,以及一些提供给外部合作方的算法服务。QP中既有一些基础模块,比如分词、改写、纠错、打标、类目预测,也有一些业务相关的,比如个性化,协同,导航等等。QP是搜索的大脑,对效果和体验有巨大的影响。目前QP正在进行迁移DII的大动作,主要的目的包括以下几个方面:1.完成服务的合理拆分和解耦,保证多个业务线互不干扰。2.增强数据schema化和正确性、完整性校验。3.推动模块和服务链配置的web化、自助化。4.完善bts集群和流量划分机制,支持算法同学的快速试错。5.完善运维配套手段,包括异常监控和检测,灰色发布,快速回滚等等。这些都与DII的设计要点紧密贴合。

六、懒人购交互服务

懒人购交互式服务用于懒人购这一搜索、APASS共建的以服务为主导的导购类产品中,通过属性及场景的交互将用户的需求最终定位到淘宝的商品,并引导成交。这个目前来说还是一个创新型的小应用,但是它的快速接入恰恰验证了DII的价值。算法同学在离线做了大量工作,完成了比较复杂的数据挖掘,产出了几份词表数据,通过接入DII,将离线数据导入DII的表中,开发了几个并不复杂的在线处理模块,之后就快速完成了效果联调,资源申请,集群搭建,并最终实现对外提供服务。

这篇文章的主要目的,是向大家介绍一下什么是DII,以及我们为什么要做DII。总的来说,DII目前还是一个出生不久的婴孩,四肢和大脑都处在快速生长阶段,也还存在一些体验上的问题,不管怎么样,我们设计的初衷不会变,为算法同学提供最优支撑的理念不会变,在今后的发展中,期望与大家一起成长。

该文章来自于阿里巴巴技术协会(ATA)精选文章

时间: 2025-01-25 01:38:50

DII—算法服务利器的相关文章

第1期实时在线培训:@淘宝丁奇,如何解决影响MySQL使用的9大问题?

大江南北,一路飞雪. 云栖大会: 1月20日的云栖大会上海峰会成功落幕.但在无数的重磅发布中,我们对DT世界的思考才刚刚开始. 1. 王坚:数据创业要学习小岗村 2. 详解阿里云一站式大数据平台"数加"的首批20款产品 3. 视频回放:与九州云.英伟达.润和软件.优客工场的战略合作 4. 视频回放:60+场高浓度技术实战与行业实践演讲 5.<2015-2016中国云栖创新报告>下载 6.<2015首届云栖奖评选>揭晓 详见云栖大会上海峰会回顾专题. 头条系列:

DockOne微信分享(六十九):微服务选型之Modern Node.js

本文讲的是DockOne微信分享(六十九):微服务选型之Modern Node.js[编者的话]目前Node.js的发展非常快,大家可能还停留在:Node.js性能很好,Node.js里都是回调,写起来很恶心,Node.js只能做前端工具,Node.js是单线程部署会有问题,以及这样的八卦<uber用go替代Node.js重写了地理位置服务>... 可是真相呢? 在微服务盛行的今天,为什么我们要选用Node.js去构建微服务呢?本次分享将试图从以下2个方面给出答案: 被误解的Node.js:除

阿里云承建国家级工业云平台 目标服务10万家制造企业

近日,在国家工业和信息化部组织召开的全国云计算工作交流会上,国家工业智能公共服务云平台(下称"国家工智云平台")正式签约启动,以进一步加快落实<云计算发展三年行动计划(2017-2019年)>,推动我国工业互联网云平台的发展. "国家工智云平台"由阿里云计算有限公司(简称"阿里云").中国电子信息产业发展研究院(简称"工信部赛迪研究院").工业和信息化部电子第五研究所(简称"中国赛宝")共同发起

阿里云机器学习平台使用——协同过滤推荐算法快速应用

标签: 数加 概述 PAI机器学习平台是构建在阿里云ODPS计算平台之上,集数据处理.建模.离线预测.在线预测为一体的机器学习平台. 该平台为算法开发者提供了丰富的MPI.PS.BSP等编程框架和数据存取接口,同时为算法使用者提供了基于Web的IDE+可视化实验搭建控制台.平台目前整合了阿里集团内最先进的算法,为用户提供算法服务. 今天做了一件事情来体验PAI,就是拿最经典的电影推荐场景来做协同过滤算法的测试. 数据准备 电影数据来源于http://grouplens.org/datasets/

使用Python提供高性能计算服务

前言 python具有丰富的库,并且很容易作为胶水语言很容易与c/c++进行交互集成. 因此为了适应快速变化的业务和兼顾计算效率,在上层采用python作为server提供service,在底层采用c/c++进行计算是一种对于算法开发者非常适宜的方式. python flask库提供http接口以及相关demo页面,gunicorn提供多核并行能力,底层c++库提供单线程上的计算. 下面通过一个例子说明这种架构.代码地址:python_hps 准备 在实验开始之前,需要安装flask.gunic

“算法经济” 会创造什么新模式与趋势

中国 PC 时代互联网自 2000年 左右经过 10年 发展,创造了 "流量经济":移动互联网自 2010年 左右开始大跃进 5年,催生了 "共享经济":站在 2015年 的驿道上,最令人心驰神往的路标非 "互联网 +" 莫属,这个以新一代信息通讯技术.云计算.大数据和物联网为基础,推动消费互联网向产业互联网转移及传统行业 + 互联网升级转型的创新生态逻辑,无疑像夜空中最亮的星一样,指引着中国科技创新创业前行的方向.那么,在中国互联网速度的跨越式

ITTC数据挖掘平台介绍(综述)——平台简介

数据挖掘方兴未艾,大量新事物层出不穷.本系列将介绍我们自主设计的数据挖掘软件平台.与大家共同分享对知识,微博,人际等复杂网络的分析,以及对自然语言处理的见解. 一.我们需要怎样的数据挖掘系统       一直以来,以高校为代表的学术界和以公司为代表的商业界,都有很大的隔阂.学术界普遍不会做产品,商业界普遍不会搞研究.如果两者都强,那就是美国军方了.        在数据挖掘领域更是如此,大量关于复杂网络,自然语言处理的牛文层出不穷,却被研究机构和大公司养在深闺人未识.绝大多数智能机器学习算法被封

千亿特征流式学习在大规模推荐排序场景的应用

摘要:2017云栖大会机器学习平台PAI专场,阿里巴巴高级技术专家陈绪带来千亿特征流式学习在大规模推荐排序场景的应用的演讲.主要从电商个性化推荐开始谈起,进而描述了技术挑战和PAI解决方案,重点分享了鲲鹏框架和算法调优,最好作了简要总结. 以下是精彩内容整理: 电商个性化推荐 淘宝.天猫在无线.PC端各个场景的商品个性化推荐大家都很熟悉,这些展示都是由个性化推荐排序算法决定的.根据每个用户不同的兴趣,做到千人千面的个性化展示,比如手淘首页的猜你喜欢,它是阿里电商最大的推荐场景,还有人群导购.看了

专访阿里云闵万里:云上逐鹿,ET大脑要做行业化、垂直化的创新运用

2017杭州云栖大会详情请戳这里! 闵万里,阿里云人工智能科学家,ET大脑负责人.2004年博士毕业以后加入IBM,参与IBM智慧城市研究,主攻大数据的研发和运用,2010-2012年在IBM新加坡做智慧城市,推动创新项目落地.2012年加入Google,担任数据科学家,做广告竞价的竞价模型.2013年9月加入阿里巴巴,组建了数据科学团队,支持聚划算和天猫做数据化运营.2015年加入阿里云,组建大数据孵化器团队,探索DT技术在垂直行业的创新及落地.2017年开始担任阿里云大数据事业部的总经理继续