说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Netflix公布个性化和推荐系统架构,3种类型作业通实时

HTML文档下载 WORD文档下载 PDF文档下载
Netflix的推荐和个性化功能向来精准,3月27日他们公布了自己在这方面的系统架构。其公布的系统框架图中包含了多种机器学习算法,通过将作业分为离线、近在线和在线三种方式来对抗延时。
Netflix的推荐和个性化功能向来精准,前不久,他们公布了自己在这方面的系统架构。

3月27日,Netflix的工程师 Xavier Amatrain和 Justin Basilico在官方博客 发布文章,介绍了自己的个性化和推荐系统架构。文章开头,他们指出:

要开发出这样的一个软件架构,能够处理海量现有数据、响应用户交互,还要易于尝试新的推荐方法,这可不一点都不容易。

接下来,文章贴出了他们的系统框架图,其中的主要组件包括多种机器学习算法。

他们这样解释其中的组件和处理过程:

对于数据,最简单的方法是存下来,留作后续离线处理,这就是我们用来管理离线作业(Offline jobs)的部分架构。计算可以以离线、接近在线或是在线方式完成。在线计算(Online computation)能更快地响应最近的事件和用户交互,但必须实时完成。这会限制使用算法的复杂性和处理的数据量。离线计算(Offline computation)对于数据数量和算法复杂度限制更少,因为它以批量方式完成,没有很强的时间要求。不过,由于没有及时加入最新的数据,所以很容易过时。个性化架构的关键问题,就是如何以无缝方式结合、管理在线和离线计算过程。接近在线计算(Nearline computation)介于两种方法之间,可以执行类似于在线计算的方法,但又不必以实时方式完成。模型训练(Model training)是另一种计算,使用现有数据来产生模型,便于以后在对实际结果计算中使用。另一块架构是如何使用事件和数据分发系统(Event and Data Distribution)处理不同类型的数据和事件。与之相关的问题,是如何组合在离线、接近在线和在线之间跨越的不同的信号和模型(Signals and Models)。最后,需要找出如何组合推荐结果(Recommendation Results),让其对用户有意义。

接下来,文章分析了在线、接近在线和离线计算。

对于在线计算,相关组件需要满足SLA对可用性和响应时间的要求,而且纯粹的在线计算在某型情形下可能无法满足SLA,因此,快速的备用方案就很重要,比如返回预先计算好的结果等。在线计算还需要不同的数据源确保在线可用,这需要额外的基础设施。

离线计算在算法上可相对灵活,工程方面的需求也简单。客户端的SLA响应时间要求也不高。在部署新算法到生产环境时,对于性能调优的需求也不高。Netflix利用这种灵活性来完成快速实验:如果某个新的实验算法执行较慢,他们会部署更多Amazon EC2实例来达成吞吐处理目标,而不是花费宝贵的工程师时间去优化性能,因为业务价值可能不是很高。

接近在线计算与在线计算执行方式相同,但计算结果不是马上提供,而是暂时存储起来,使其具备异步性。接近在线计算的完成是为了响应用户事件,这样系统在请求之间响应速度更快。这样一来,针对每个事件就有可能完成更复杂的处理。增量学习算法很适合应用在接近在线计算中。

不管什么情况,选择在线、接近在线、还是离线处理,这都不是非此即彼的决策。所有的方式都可以、而且应该结合使用。 …… 即使是建模部分也可以用在线和离线的混合方式完成。这可能不适合传统的监督分类法(supervised classification)应用,因为分类器必须从有标记的数据中批量培训,而且只能以在线方式使用,对新输入分类。不过,诸如矩阵因子分解这样的方法更适合混合离线和在线建模方法:有些因子可以预先以离线方式计算,有些因子可以实时更新,创建更新的结果。其他诸如集群处理这样的非监督方法,也可以对集群中心进行离线计算,对集群节点进行在线作业。这些例子说明:模型训练可以分解为大规模和复杂的全局模型训练,以及轻量级的用户指定模型训练或更新阶段,以在线方式完成。

对于离线作业(Offline jobs),主要用来运行个性化机器学习算法。这些作业会定期执行,而且不必与结果的请求和展示同步。主要有两种任务这样处理:模型训练和中间与最终结果批量计算(batch computation of intermediate or final results)。不过,他们也有一些学习算法是以在线增量方式完成的。

这两种任务都需要改善数据,通常是由数据库查询完成。由于这些查询要操作大量数据,以分布式方式完成更方便,因此通过Hadoop或是Hive、Pig作业就是自然而然的事情。一旦查询完成,就需要某种机制发布产生的数据。对于这样的机制,Netflix有如下需求:

  • 可以通知订阅者查询完成。
  • 支持不同存储方式(不只是HDFS,还有S3或是Cassandra等等)
  • 应该透明处理错误,允许监控和报警。

Netflix使用内部的工具Hermes完成这些功能,它将数据以接近实时的方式交付给订阅者,在某些方面接近 Apache Kafka,但它不是消息/事件队列系统。

无论是离线还是在线计算,都需要处理三种输入:模型、数据和信号。模型是以离线方式训练完成的参数文件,数据是已完成处理的信息,存在某种数据库中。在Netflix,信号是指输入到算法中的新鲜信息。这些数据来自实时服务,可用其产生用户相关数据。


对于事件和数据分发,Netflix会从多种设备和应用中收集尽可能多的用户事件,并将其集中起来为算法提供基础数据。他们区分了数据和事件。事件是对时间敏感的信息,需要尽快处理。事件会路由、触发后续行动或流程。而数据需要处理和存储,便于以后使用,延迟不是重要,重要的是信息质量和数量。有些用户事件也会被作为数据处理。

Netflix使用内部框架Manhattan处理接近实时的事件流。该分布式计算系统是推荐算法架构的中心。它类似Twitter的 Storm,但是用处不同,而且响应不同的内部需求。数据流主要通过 Chukwa,输入到Hadoop,进行处理的初步阶段。此后使用Hermes作为发布-订阅机制。

Netflix使用Cassandra、EVCache和MySQL存储离线和中间结果。它们各有利弊。MySQL存储结构化关系数据,但会面临分布式环境中的扩展性问题。当需要大量写操作时,他们使用EVCache更合适。关键问题在于,如何满足查询复杂度、读写延迟、事务一致性等彼此冲突的需求,要对于各种情况到达某个最优点。

在总结中,他们指出:

我们需要具备使用复杂机器学习算法的能力,这些算法要可以适应高度复杂性,可以处理大量数据。我们还要能够提供灵活、敏捷创新的架构,新的方法可以很容易在其基础上开发和插入。而且,我们需要我们的推荐结果足够新,能快速响应新的数据和用户行为。找到这些要求之间恰当的平衡并不容易,需要深思熟虑的需求分析,细心的技术选择,战略性的推荐算法分解,最终才能为客户达成最佳的结果。

原文链接: Netflix公布个性化和推荐系统架构

“ 第五届中国云计算大会 ”将于2013年6月5-7日在北京国家会议中心隆重举行。猛击报名! 

相关活动已经火热启动:

2013中国云计算大调查,每周大奖等你拿! “ 

Innovation Cloud 2013云创新产品与应用项目征集,欢迎研发者、团队和创业企业参加! 

真的不够用!Apple Watch常规使用续航3.5小时 Activiti实战 百度BAE携手科技寺助力应用一站式部署 不仅仅是高速传输,Qualcomm演示骁龙810处理器功能 利用JS高效开发原生游戏 Cocos 2d-JS中文版API文档正式上线 同行代码审查实战分析 在Swift中使用JavaScript的方法和技巧 增强用户体验 让网站和APP更具动感的几点建议 《近匠》蒲公英:一站式免费应用内测平台 用Swift开发iOS 8新应用:斯坦福免费课程上线iTunes U Swift开发必备技巧:static和class的使用 你可能没听过的11个Python库 移动Web技术的春天来了?Facebook发布React Native,用JavaScript开发移动原生应用 开发不易!2015年移动应用开发趋势总结 .NET开发者必备的工具箱 热情不减!七款Swift应用开源项目推荐 如何给苹果提交Bug或功能需求? 深入钻研Augular两年 谈谈其究竟适用于哪些场合 唐巧:谈谈React Native 在Swift中,如何更优雅地处理网络返回数据? Spark生态系统解析及基于Redis的开源分布式服务Codis 阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析 Bowery为什么放弃Node.js,转向Go? 《近匠》有了APM,用户快到碗里来——专访听云CTO Wood 联通WO+梦工厂唐敏:走进厦门 构建移动数字生态 HTML5 VS 原生,世界究竟是谁的? 完全开放 微软开源.NET Core的执行引擎CoreCLR Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic 网络技术,从“数制”开始学起——跟随王达老师一步步学习 UPYUN CTO黄慧攀:UPYUN这些年,一段“刚好”的旅程 2015移动游戏重中之重:需成功把握1%付费用户的心 谁有CNTService的源代码,我急用,多谢!!! 一个very easy(对您来说)的问题: 有关网络带宽占用问题 如何将html源码存成word文档 中秋大送分,祝大家节日快乐,心想事成!! C#调用C++写的DLL中返回字符串的问题! 我要辞职,怎么办手续?求大家帮帮我!!!!!!!!!!! 类似李洪根这样的高手请出手帮忙 ! 中秋大送分,祝大家节日快乐,心想事成!! 在上海找了半个月工作,为什么只有外资公司愿意要我!!?555~~~~~~ 关于datagrid里删除的问题 天下第一黑客 如何开发手机短信程序? 中秋佳节又加了一个角,双喜---------散分! 有没有将一个数组中重复的值删除的Function? 中秋大送分,祝大家节日快乐,心想事成!! 想用ADO的如下两个变量,需要做哪些预操作,设置或Include等,我怎么用不了 用了query界面好像死了一样 怎样给自定制的Web控件添加事件(分全给了) Apache+php我老是配置不成功,请教各位大哥,能不能将一份Apache+PHP配置资料贴出来(曾今配置成功),详情如下。 中秋大送分,祝大家节日快乐,心想事成!! VS.net 打开htm页面时报错,导致VS关闭,重装VS.net2002也不行。 请问hibernate中,用query.list()和用session.find(query)有什么不同呢? 准备贩卖人参去了? 人生在世 how many? 何必苦苦 study? 有了MM go to see..其累无比也happy..... 公司局域网其中一台机访问不到另一台机,help 歪诗一首表心意 Apache+php我老是配置不成功,请教各位大哥,能不能将一份Apache+PHP配置资料贴出来(曾今配置成功),详情如下。 ocx中字符参数应如何设置 如何用javascript设置或取得<asp:textbox .../>的值? 使用dbexpress连接mysql问题! 关于 SQL Server 查询遇到的问题。 高分请教:怎样得到PB函数对象的地址? 超链接列的数据绑定问题. datagrid和sql,在线等待 在北京想要参加oracle的培训,时间最好在一周!请给个推荐! 如何把一个aspx页面作为两个页面来用? 帮帮忙:显示窗口变化导致显示物体变形问题 为什么订阅成功了而它的状态是失败或从未启动???请高手帮忙!!! 怎样判断字符串中有半个中文字符? 如何将ClientDataSet.Delta置空? js文件是什么? 如何在hibernate中一次提交删除多条记录? *.mdf壞了,應如何恢復? 怎么读去一个数据库中的所有表的名称 请教一个文件上传的问题! 急!!VS.NET的MSDN突然看不了(绝大部分),报IE找不到服务器错误!!! ----怎么在程序打包后创建一个卸载的快捷方式? java 做的记事本中如何加打印功能 打造功能最强,代码风格最标准的留言簿,欢迎挑刺. 问个关于结贴的问题 max中的GI,焦散分别是什么?我是新手对于max中的这些东西的概念都还没搞清,万分感激! 25分之三等于()平方千米 如果a乘b小于零,那么a,b同号还是异号? 删繁就简三秋树 领异标新二月花的意思是什么? 删繁就简三秋树 的下一句是什么? 删繁就简三秋树的下句 向量a 1 2向量b的模5 2 a 2b a 2b求a的夹角b为多少 删繁就简三秋树"后一句是什么?拜托拉!拜托了各位 谢谢 若向量a+2b与a-b垂直,向量a-2b与a+b垂直,求非零向量a与b的夹角 用普通的氢气球体积有多大?刚刚看了好多资料,就是找不到普通的氢气球体积有多大,就是儿童玩的那种,想算一下看多少个气球能带我飞 用白话叙述一下VRAY中GI一次反弹和二次反弹的原理和彼此的关系,还是有没有关系?比如,一次反弹些什么,二次反弹又反弹些什么?为什么只启用一次反弹就能达到一定的间接照明效果,那么在渲 德科学家揭秘太空行走:太空服可被几毫五分之三美国人债务积累超储蓄大洋洲孔子学院联席会议在珀斯召开浙江省政协公开征集提案线索 侧重群众巴消息人士称尸检报告排除阿拉法特死于以色列科学家:真正的发现之旅在于拥有美国艺术家用鸽子从古巴走私雪茄第六届“汉语桥”世界中学生中文比赛开印尼苏门答腊1座火山再度喷发 当地居第二届世界浙商大会26日开幕 马云宗外交部:中印重申不将军事能力用于针对琼州海峡春运首日进出岛4.6万人次建立消防安全信用体系哈里里遇刺案开审浙江昨起实施凶手被执行死刑对象事项范围扩大上春晚不靠谱H7N9大规模凤凰机场春运首日客流火爆埃面临过渡进程关键节点李娜:不会再代表国家队比赛东方妖精传网游之武林生死驱魔狂徒凡途争仙阿离恶魔之名灭王神鸿蒙缘七刀录穿界神魔传秦汉外史阿莫斯的帝国飞沙堰旅游鱼嘴旅游石围塘火车站旅游国家大剧院旅游芙蓉国粹旅游青泥洼桥旅游环岛海滨浴场旅游东山石窟旅游卢舍那大佛旅游万佛洞旅游牡丹园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘