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

这篇文章我们回顾一篇经典博客,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秘籍

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

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

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

相关文章

CNCC 技术论坛 | 知识图谱赋能数字经济

2018中国计算机大会(CNCC2018)将于10月25-27日在杭州国际博览中心(G20会场)举行,大会主题为「大数据推动数字经济」(Big Data Drives the Digital Economy)。10月15日前报名可享优惠&#xff0c…

计算机网络:我把所有计算机网络的基础都汇总到这里了!

原文链接:https://cloud.tencent.com/developer/article/1388529 前言计算机网络基础 该是程序猿需掌握的知识,但往往会被忽略今天,我将献上一份详细 & 清晰的计算机网络基础 学习指南,涵盖 TCP / UDP协议、Http协议、Socket等…

算法--递归--走台阶问题(2种递归+递归改循环)

文章目录递归:注意事项:问题1思路1.递归代码(未考虑重复计算问题)2.循环代码3.递归代码(避免重复计算问题)测试运行时间问题2递归: 一个问题可以分解成若干子问题,且求解思路一样&a…

最新2019 蚂蚁金服4面(Java)面试题

蚂蚁金服Java一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式,回收算法。 4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程。 5 CMS回收停顿了几次,为什么要停顿两次。 6 Java栈什么时候会发生内存溢出&…

论文浅尝 | 基于表示学习的大规模知识库规则挖掘

链接:www.ict.griffith.edu.au/zhe/pub/OmranWW18.pdf动机传统的规则挖掘算法因计算量过大等原因无法应用在大规模KG上。为了解决这个问题,本文提出了一种新的规则挖掘模型RLvLR(Rule Learning via LearningRepresentation),通过利用表示学习…

深度学习推荐系统中各类流行的Embedding方法

Embedding技术概览:对其它Embedding技术不熟悉,可以看我的上一篇文章:深度学习推荐系统中各类流行的Embedding方法(上)Graph Embedding简介Word2Vec和其衍生出的Item2Vec类模型是Embedding技术的基础性方法&#xff0c…

超强干货!7个腾讯最常用的用户研究方法

超强干货!7个腾讯最常用的用户研究方法调查知识2017-09-19每天都有互联网产品上市,人们电脑上、手机上的应用在短期之内就可能增增减减换了很多波,最终留下的、那些最经典的产品,都是以好的体验设计取胜。这些产品或许看似很“简单…

算法--递归--汉诺塔问题

文章目录1. 问题分析2. 面试题1. 问题分析 游戏规则:一次只能挪一片;小的只能在大的上面;把所有的从A柱挪到C柱。 递推公式: 上部 n - 1 个 A 到 B;最底下 1 个 A 到 C ;上部 n - 1 个 B 到 C;…

论文浅尝 | 面向跨语言实体对齐的知识图谱与实体描述协同嵌入方法

来源: IJCAI2018链接: https://www.ijcai.org/proceedings/2018/0556.pdf动机近年来,随着多语言知识图谱嵌入(Multilingual KG embedding)的研究,实体的潜在语义表示以及跨语言知识推理等任务均取得一定成效,因此也推动了许多知识驱动的跨语言…

最新阿里聚划算Java 5轮面试题,涵盖GC收集器、多线程锁等

一面 详细的介绍JVM的内存模型结构 JVM最常用的参数配置讲讲 GC垃圾收集算法、GC垃圾收集器有哪些,以及新生代老生代 分别用什么算法 多线程的几种加锁方式详细介绍 实现线程安全的方式?ThreadLocal原理?线程池了解吗说说看?自…

2004-2019十六年热点事件库HistoryHotEventBase项目

HistoryHotEventBase historyhotevent projrct ,which concentrate on the dayily hot event covers the time range from 2004 to 2019, 16 years in total,从2004年至2019年共16年的每日热点事件项目,目标包括构建起从2004年至今共16年的历时热点标题数…

OSI七层模型详解-开放系统互联参考模型详解

原文链接:https://blog.csdn.net/yaopeng_2005/article/details/7064869 OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。 完成中继功能的节点通常称为中继系…

最新天猫Java3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper

天猫一面 自我介绍、项目介绍 Spring拦截器、实现了哪些方法?底层原理 AOP如何配置,底层原理、2种动态代理,aop注解实现,xml定义切面 Bean的作用域,单例模式是否线程安全?恶汉模式是否线程安全&#xff…

NLP中的少样本困境问题探究

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者:JayLou娄杰(NLP算法工程师,信息抽取方向)前言在医疗、金融、法律等领域,高质量的标注数据十分稀缺、昂贵,我们通常面临少样本低资源问题。本文从「文本增强」和…

军事武器知识图谱构建与自动问答项目QAonMilitaryKG

QAonMilitaryKG QAonMilitaryKG,QaSystem based on military knowledge graph that stores in mongodb which is different from the previous one, 基于mongodb存储的军事领域知识图谱问答项目,包括飞行器、太空装备等8大类,100余小类&#…

python--从入门到实践--chapter 9 类

类的定义格式: class Name(Father_class):def __init__(self, para, ...):self.para xdef __init__(self, para, ...):super().__init__(para, ...) #调用父类的构造函数class Car():def __init__(self,make,model,year): #构造函数self.make makeself.model mo…

连载 | 知识图谱发展报告 2018 -- 前言

OpenKG 将开始连载《知识图谱发展报告(2018)》,希望该连载能够让更多的人深入了解知识图谱。欢迎各位读者留言讨论。1. 知识图谱的研究目标与意义 知识图谱(Knowledge Graph)以结构化的形式描述客观世界中概念、实体及其关系,将互…

网址(url),域名,ip地址,dns,hosts之间的关系

网址(url),域名,ip地址,dns,hosts之间的关系 什么是ip? 我们知道,在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址&…

事理图谱概念辨析及其与风险标签分类结合的应用探讨

以事件为描述核心,以揭示事件之间的演化逻辑关系的事理图谱自提出后,引起了工业界的极大兴趣,在积极探索事理图谱本质、事理图谱构建技术细节的同时,如何找到技术与应用场景之间的结合成为目前广泛讨论的问题。我们团队持续对以上…

一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)

涤生_Woo2017年11月11日阅读 15544关注一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍。一图看完本文一、 计算机网络体系结构分层计算机网络体系结构分层计算机网…