这篇文章我们回顾一篇经典博客,Netflix官方博客介绍的推荐系统架构,虽然文章发布已有六年, 但是现在回看起来我自己还是蛮惊讶的,因为Netflix的推荐系统架构居然到现在依然是主流。

当然,框架中的诸多技术在不断的迭代更新,因为近期与Netflix的很多同行有过交流,也可以更新一下框架中一些模块的最新进展。

Netflix推荐系统架构图

Netflix推荐系统架构图

Netflix的推荐系统从上至下依次分为离线(offline)、近线(nearline),在线(online)三部分。

离线(offline)

存储离线数据,利用大数据查询工具进行数据查询和处理,离线模型训练。离线部分对于数据数量和算法复杂度限制很少,以批量方式完成数据处理,但是数据处理的实时性非常差,无法做到数据和模型的即使更新。可以看到当时还是hive,pig等工具的天下,现在spark 是主流,但也有越来越多的offline job被合并到near line之中,可以说当前的offline和nearline的界限日渐模糊了。

近线(near line)

基于数据消息队列,利用一些流计算平台进行数据的准实时处理。它居于离线和在线之间,既可以以分钟级别甚至秒级的延时来准实时地处理数据,也有一定的数据批量处理能力。

nearline可以说是近几年大数据架构发展的重中之重了。当时Netflix开发了自己的流处理框架Manhattan,但现在已经是Flink一统天下的时候,Netflix内部的Flink平台每天会运行上千个不同的流处理任务。涵盖了特征实时计算、数据监控、BI、模型实时训练等等。越来越多的offline任务被替代,也许Kappa架构彻底替代Lambda架构的日子不太远了。

在线(online)

online部分的主要任务是进行用户请求的实时处理,模型的在线服务。在线部分需要更快地响应最近的事件和用户交互,因此对于延迟的要求比较苛刻,一般都要求在100ms以内完成所有处理,这会限制所用算法的复杂性和可处理的数据量。

正是online部分极高的响应延迟要求和相比离线、近线较弱的数据处理能力,要求online部分采用不同的高效的model serving方法去支持个性化推荐服务。这也是前段时间我们专栏花了几篇文章介绍model serving的原因。

从阿里的User Interest Center看模型线上实时serving方法
如何解决推荐系统工程难题——深度学习推荐模型线上serving?

AWS

大家要注意架构图右上角的AWS的标志,它意味着Netflix的所有服务器和大数据设施都是架构在amazon的云平台上的,而且一直沿用至今。作为AWS的第一大用户,Netflix服务的云化还是非常彻底的。

有的时候我也挺佩服美国这些互联网公司的选择,像Netflix、Pinterest这些公司,已经是不折不扣的互联网巨头,居然非常放心的使用AWS,AWS确实能够提供非常专业安全的云服务。这样开放的精神还是让我挺感慨的。国内的阿里云发展当然也非常好,但是巨头级别的公司完全依赖阿里云的案例还是不多,从这一点上,国内和国外整个互联网的氛围还是有一些微妙的区别。

不同层之间的配合与系统整体性

可以看到,从离线到在线,数据的实时性从上到下依次增强,而数据规模和处理能力从上到下依次减弱
但作为同一个系统之中的不同功能层,只有整合发挥不同层的优势,才能够让系统整体发挥出最大的作用。所以我们可以在架构图中看到很多跃层的调用。

比如从online 到nearline和offline通过用户消息队列(User Event Queue,现在基本都使用Kafka)来缓存数据流,这是连接online和其他层的接口。

而从nearline和offline中连接online的接口则是algorithm service,online data service,以及model到online层的接口。他们分别存储了算法结果,数据特征和模型文件。

在架构图正中央的存储部分,也有不同的数据库作为数据中心作为不同模块的数据交换接口。比如cassandra更适宜存储大数据量的nosql数据,mysql当然是适合结构化的小数据量数据,而EVcache则作为内存数据库当作数据缓存使用。当然,技术的发展使得现在已经有更合适的技术选型,AWS的dynamoDB,以及redis都可以作为更好的替代方案。

总结

最后的总结就直接用netflix官方博客的总结吧。

We want the ability to use sophisticated machine learning algorithms that can grow to arbitrary complexity and can deal with huge amounts of data. We also want an architecture that allows for flexible and agile innovation where new approaches can be developed and plugged-in easily. Plus, we want our recommendation results to be fresh and respond quickly to new data and user actions. Finding the sweet spot between these desires is not trivial: it requires a thoughtful analysis of requirements, careful selection of technologies, and a strategic decomposition of recommendation algorithms to achieve the best outcomes for our members.

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

能让我拍案叫绝的技术经验不多,上面的标黑部分算是一句,写的多好,我几乎可以认为这是一个工程师乃至架构师的最高境界,与大家共勉。

照例跟大家讨论一个问题:
Netflix的架构从大框架上看过时了吗?业界还有其他的推荐系统工程架构方案吗?

参考资料:
1.https://netflixtechblog.com/system-architectures-for-personalization-and-recommendation-e081aa94b5d8
2.https://www.infoq.cn/article/2013%2F04%2Fnetflix-ml-architecture

本文原创于公众号「王喆的机器学习笔记」,是资深算法工程师,《深度学习推荐系统》《百面机器学习》作者王喆的个人公众号,关注推荐系统、计算广告、个性化搜索的业界前沿进展。

扫码关注我们

认为文章有价值的同学,欢迎关注「王喆的机器学习笔记」(wangzhenotes),跟踪计算广告、推荐系统、个性化搜索等机器学习领域前沿。

王喆的机器学习笔记」近期优质内容

  • 见微知著,你真的搞懂Google的Wide&Deep模型了吗?

  • 回顾经典,Netflix的推荐系统架构

  • 关于深度学习推荐系统领域的15个问题

  • 从阿里的User Interest Center看模型线上实时serving方法

  • 为什么有些深度学习网络要加入Product层?

  • YouTube深度学习推荐模型最全总结

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

回顾经典,Netflix的推荐系统架构相关推荐

  1. 推荐系统学习笔记——四、Netfilx经典推荐系统架构

    四.Netfilx经典推荐系统架构 Netflix公司发布的经典推荐系统架构,一共分为3层: ONLINE(在线层) NEARLINE(近线层) OFFLINE(离线层) 这三层分别做自己的事情,配合 ...

  2. 回顾亚马逊推荐系统20年发展

    回顾亚马逊推荐系统20年发展 推荐系统 亚马逊 阅读2164  近期,IEEE Internet Computing上发表了一篇名为<亚马逊推荐系统二十年>的文章,提纲挈领地回顾了亚马逊推 ...

  3. 如何设计推荐系统架构?

    推荐系统是移动互联网时代非常成功的人工智能技术落地场景之一. 本文我们将从架构设计的角度回顾和讨论推荐系统的一些核心算法模块,重点从离线层.近线层和在线层三个架构层面讨论这些算法. 本文不会讲解一些具 ...

  4. 腾讯音乐:全民K歌推荐系统架构及粗排设计

    编辑整理:张振.于洋 导读:腾讯音乐娱乐集团 ( TME ) 目前有四大移动音乐产品:QQ音乐.酷狗音乐.酷我音乐和全民K歌,总月活超8亿.其中,全民K歌与其他三款产品有明显的差异,具体表现如下:以唱 ...

  5. 基于 Apache Flink + Hologres 的实时推荐系统架构解析

    简介:<实时数仓入门训练营>由阿里云研究员王峰.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打 ...

  6. 基于实时深度学习的推荐系统架构设计和技术演进

    简介:整理自 5 月 29 日 阿里云开发者大会,秦江杰和刘童璇的分享,内容包括实时推荐系统的原理以及什么是实时推荐系统.整体系统的架构及如何在阿里云上面实现,以及关于深度学习的细节介绍 本文整理自 ...

  7. 实时数仓入门训练营:基于 Apache Flink + Hologres 的实时推荐系统架构解析

    简介: <实时数仓入门训练营>由阿里云研究员王峰.阿里云资深技术专家金晓军.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建 ...

  8. 推荐系统架构与机器学习基础理论

    一.推荐系统架构与机器学习基础理论 1 机器学习发展历程与架构原理 1.1 发展历程 大数据时代: 频率近似为概率 计算机性能 :计算速度提升 时间段 发展时期 主流技术 二十世纪五十年代初至七十年代 ...

  9. 【王喆-推荐系统】(task1)DL推荐系统架构(基础架构篇)

    学习心得 通过task1的学习在脑海里建立DL背景的推荐系统架构:为了解决[在"信息过载"情况下,用户怎么高效获取感兴趣的信息]的问题,并且构建更好的拟合数据和表达能力的模型,深度 ...

最新文章

  1. 在Windows/Ubuntu上使用Visual Studio Code作为Go语言编辑器操作步骤
  2. java数组赋值语句,稳进大厂
  3. 谷歌54量子计算机,量子计算机要来了:谷歌开发了一种名为“ Sycamore”的新型54比特处理器,其200秒产生的输出将需要世界上最快的超级计算机10,000年 - googleblog...
  4. 简约而不简单|值得收藏的Numpy小抄表(含主要语法、代码)
  5. HDU-Yuna's confusion 树状数组 Or Multiset
  6. 总线的集中式仲裁(讲述计时器定时查询方式,独立请求方式,链式查询方式的优缺点)
  7. tensorflow: deep_dream代码及原理分析
  8. 20200608每日一句
  9. Rust: codewars的Sum by Factors
  10. 记录一下:调试了虹软的人脸识别sdk,存到数据库中
  11. Python爬虫爬取LOL所有英雄皮肤
  12. Windows系统查看电脑系统信息(操作系统与版本、系统型号、处理器具体型号、BIOS版本、BIOS模式、主板信息等等)
  13. 复杂多边形的三角剖分
  14. bookmarks_2021_9_28
  15. python安装cpickle_python中cPickle
  16. 浏览器无法打开网页-重置网络命令
  17. mysql查询当年年份
  18. 找出一个二维数组中的鞍点
  19. oracle数据库or exists,Oracle Not Exists运算符
  20. JS任务机制 - springboot实战电商项目mall4j

热门文章

  1. Could not obtain connection metadata
  2. Redis 3.0.2集群搭建以及相关问题汇总
  3. Tracing mysqld Using DTrace
  4. [转载] linux cgroup
  5. 和吴昊一起玩推理 Round 2 —— 蚂蚁爬杆问题
  6. PHP中的get_defined_funciton和get_defined_vars
  7. 《塔木德智慧全书》(之四)
  8. void init(void) 分析 ! \linux-1.0\init\main.c
  9. 我用过 | Keil的发展历史
  10. 嘉立创又搞大事情了,与你我相关!