四、Netfilx经典推荐系统架构

Netflix公司发布的经典推荐系统架构,一共分为3层:

  • ONLINE(在线层)
  • NEARLINE(近线层)
  • OFFLINE(离线层)

这三层分别做自己的事情,配合组合一起完成系统的运行。

在线层:就是用户看到的层。 用户和产品(Client,就是电脑端、APP等等)进行交互,用户除了看到内容之外,还会有很多操作,比如说播放、评分、浏览点击、购买等等,这些操作就是事件的序列,产生打点日志 。打点日志会有两个分发,一个离线分发到Hadoop,第二个是以队列的形式分发到Netflix.Manhattan(类似于Storm的实时流式计算框架)

所谓打点日志,是指用于数据统计的日志,一般前端会有打点的方法,而后端也会有类似需求。按理说,后端的一般的日志也可以做到打点的效果,但是因为一般的日志离散,风格不统一,得到的日志格式不好,不容易切分统计,所以就会想要一个独立的打点日志来实现打点。

离线层一般是天粒度或者小时粒度进行计算 。得到打点日志以后,一般会存储于Hadoop的HDFS,然后使用HIVE、PIG或者Spack,进行大数据的计算,包括:数据的过滤、提取,得到查询结果Query results,把查询结果打进一个调度平台Netflix.Hermes。

  • Netflix.Hermes调度平台,结合当天离线数据和历史离线数据两方面的数据,进行两个分发,第一个是离线计算,第二个是模型训练,就是机器学习的算法,得到一个模型,一般指模型的参数。
  • 模型有两个使用,第一个打到在线层,当用户的实时请求过来之后,会使用模型实时的进行计算,进行预测。另一个是到离线层的计算,这个计算综合很多的数据,比如这个模型可以预算两个结果,一个是提前预算用户的推荐列表,另一个是进行矩阵分解,得到用户向量和物品向量,可以用于在线使用。

近线层,位与在线层和离线层之间,起一个桥梁的作用。优点:几乎可以进行实时处理。事件流:比如说Kafka得到队列形式的日志之后,会进入流式计算的平台,进行近线层的计算。这个近线层的计算会获取离线数据、调用机器学习的算法、获取在线层的输入。

  • 比如说用户做了什么发出了一个信号,近线层的计算结果会存储一些高速缓存(Cassandra、MySQl、EVcache[evcache类似于redis])。
  • 一个系统通常由多种缓存。Cassandra可以存储大辣的数据,T级别,主要提供高速的读取服务。
  • EVcache和Cassandra搭配,也是高速缓存,读取更快,也接受写操作,类似于redis
  • MySQL,结构化存储和查询,主要支持事务型操作,问题是在线访问的时候读写很慢。

在线层用户操作之后,发出了结果,用户怎么得到推荐列表

  • 一般来说,一个应用服务,都会有一个统一的算法服务来进行调度,这个算法服务,会从高速缓存中获取数据,然后调用在线的计算,需要很快的返回结果。可以使用数据服务,获取需要使用的数据,也可以在线使用机器学习训练好的模型,可以得到离线系统发出的信号。
  • 当计算好了之后,会把结果推给计算服务,计算服务给用户展示最终的结果

这个架构,需要解决的是工程问题。
挑战:架构技能处理海量数据,又能及时响应用户交互

在线层:需要快速响应
  • 特点:快速响应,使用最新数据输入;比如200MS。

    • 需要读取的数据存储在高速缓存,可以迅速读取,几毫秒、几十毫秒进行返回
    • 需要的机器学习的算法也是简单的,比如LR。
  • 缺点:不能使用复杂算法,只能读取少量数据

离线层:
  • 特点:大部分计算包括模型训练都在这层完成

  • 优点:可采用复杂算法,不受限制;可扫描海量数据

  • 缺点:不能对最新情景和新数据做响应,比如天粒度

近线层:
  • 特点:离线和在线的折中,一般将结果存入高速缓存

  • 优点:能使用几乎最新数据计算,延迟10秒~1分钟级别

  • 优点:允许更复杂的算法处理,加载查询更多数据

  • 能实现海量数据、复杂算法的实时响应的映射

组合使用的例子
1、天粒度:离线层对用户数据做矩阵分解,得到用户向量和物品向量做数据存储MySQL

2、10秒钟:近线层根据用户行为,查询TOPN相似的物品列表,存入Cassandra

3、200毫秒:在线层查询第2步的结果,更新推荐列表

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

  1. C#回顾学习笔记四十:三层架构

    1)三层框架是什么? 按照书籍和博客文章里千篇一律的解释就是:UI层.BLL层.DAL层.这样的解释通常无法让人一时半会理解含义,总而言之在这里先大概说明一下三层架构.正如其他文章提到的一样,三层架构 ...

  2. 推荐系统学习笔记——特征工程

    特征工程 一. 概述 二. 特征工程构建原则 三. 常用的特征有哪些 四. 常用的特征的处理方法 五. 特征选择 六. 总结 推荐系统学习笔记系列链接: 推荐系统学习笔记--特征工程 推荐系统学习笔记 ...

  3. 推荐系统学习笔记召回策略之基于协同过滤召回

    基于协同过滤的召回 1. 概述 2. 基于近邻的协同过滤算法 3. 相似度计算方法 4. 协同过滤算法的进化-矩阵分解 图1. 推荐系统整体架构 推荐系统学习笔记系列链接: 推荐系统学习笔记--特征工 ...

  4. Python推荐系统学习笔记(3)基于协同过滤的个性化推荐算法实战---ItemCF算法(下)

    本文在 Python推荐系统学习笔记(2)基于协同过滤的个性化推荐算法实战---ItemCF算法 一文的基础上,对其基本的ItemCF算法做出改进. 一.相关概念 1.ItemCF中,基于行为(喜好) ...

  5. Python推荐系统学习笔记(5)基于协同过滤的个性化推荐算法实战---UserCF算法(下)

    本文在 Python推荐系统学习笔记(4)基于协同过滤的个性化推荐算法实战---UserCF算法(上) 一文的基础上,对其基本的UserCF算法做出改进. 一.相关概念 1.UserCF中,基于行为( ...

  6. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  7. 学习笔记----SLAM的概论与架构

    文章目录 学习笔记----SLAM的概论与架构 一.SLAM的提出与发展 二.从滤波器谈SLAM 1.基于概率估计做出定位 2.通过概率不断更新自身位置 三.SLAM的新突破--图优化 四.SLAM的 ...

  8. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  9. 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    [Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...

最新文章

  1. Ubuntu安装、使用postgresql数据库
  2. 【Tools】C/C++开发SDK下载汇总
  3. 提升领导力 六商是基础
  4. python里删除range里的数字_python中range函数与列表中删除元素
  5. C语言--第2次作业
  6. 使用openocd调试Linux内核,OpenOCD-JTAG调试
  7. 【codevs1477】【BZOJ2733】永无乡,Splay+启发式合并
  8. (06)FPGA工程师能力
  9. CentOS7添加自定义系统服务
  10. 解决MFC 窗口创建时 争夺焦点的问题
  11. Flutter之Align和AlignmentGeometry
  12. Cheat Engine 特征码
  13. 小米手环如何连接苹果手机
  14. Redis底层数据结构——跳跃列表
  15. 第4章 Vue全家桶(vue-router+vuex) - 4.23 如何添加商品到购物车中6步骤
  16. 阿里云专网服务器连接互联网的设置
  17. 前端埋点数据收集及上报方案
  18. 视频教程-跟宁哥学Go语言视频课程(10):反射-Go语言
  19. 手指在屏幕上滑动,红色的小球始终跟随手指移动。
  20. 今天全网的网站都变成了灰色了,这其中是如何实现的呢?

热门文章

  1. 《MATLAB智能算法30个案例》:第27章 无导师学习神经网络的分类——矿井突水水源判别
  2. 获取微信二维码返回乱码
  3. PowerBI Server端管理数据网关
  4. 读书:冯唐的《金线》
  5. 数字示波器的三大指标
  6. 北邮复试 | 北邮机试往年题汇总 | 计算机院 | 网研院 | 网安院 | 软院
  7. pycharm配置深度学习环境:conda env create -f environment.yml报错
  8. python+appium+mumu模拟器自动化测试
  9. 详解docker镜像管理命令
  10. ecshop常用修改