京东架构师的showtime京东个性化推荐系统实战
推荐系统核心任务是排序,从线上服务角度看,就是将数据从给定集合中数据选择出来,选出后根据一定规则策略方法进行排序。
线上服务要根据一定规则进行架构设计,架构设计是什么?每一次权衡取舍都是设计,设计需要理解需求、深入理解需求基础上做权衡取舍。复杂系统架构需要需求方与研发人员反复沟通探讨。这需要技术领导者能理解并鼓励这种行为,才能有所谓技术驱动,否则光喊口号不会产生什么所谓的技术驱动。
品类召回配置化,通过对每一个key进行配置管理,配置项包含偏好取得数量以及卡分配置、排序优先级等多个配置项。每一个配置生成一个配置对象,配置绑定到一个ABTest算法上。配置管理界面、配置管理服务构成配置管理平台。
素材、特征召回配置化,根据分类召回素材,根据用户、分类、素材、设备、季节等多个条件拉取素材。素材与特征全部通过配置化进行实现,由人管理配置文件由xml构成、
素材、特征召回这两项特点是召回量大,要注意有大量此类偏好数量,这种数据获取最好用线程池,设置超时如超时则这次请求有部分数据未请求到,并进行记录。
特征上报,为了方便模型组进行模型训练,因为一些数据是比较散的,就是说这种情况下需要对数据进行进行响应处理,在进行上报,每一种数据处理方式是不同的,需要对特征进行分类处理。
并且为了避免增加新特征或者修改特征就进行上线,这是与模型组探讨,根据需求设计可配置,或者说基于配置文件的特征计算。要建立一套与特征归一化相应多种计算规则,以支持多种类型特征配置归一化。
分类召回级平台,素材、特征召回级平台,均存在一个配置更新后怎样获取问题。配置更新是一个通用问题,大概存在几种方式:一种是配置管理界面更新时更新服务配置信息,一种是定时更新方式,一种是通过通知方式,当有变更时发起更新。
最简单方式就是,在管理平台修改后进行更新,但现在线上服务多为微服务集群,通过更新管理平台,同时更新多个微服务节点不是一种可行方式,在过去单体web系统中是可行的。
定时更新方式实现简单,并且能保证比较好一致性,并且就算这次更新集群存在个别节点更新失败,下一次更新也会更新成功。但这种方式要注意不要用线上服务定时拉取数据库,因为会导致数据库压力过大,可以采取将数据库节点数据同步到redis方式,通过redis来支持定时更新,因redis能支持极大读qps。
通知方式最优雅,即观察者模式。观察者订阅事件,事件发生时,各个订阅节点根据事件进行响应操作,当配置更新发生时,线上服务节点更新配置到最新,通过Zookeeper可以很容易实现此种配置方式,其实也需要比较懂zookeeper原理与编程。
过滤建立职责链进行实现,扩展性强,可读性强。分类过滤,最近购买过分类,分类过滤白名单。过滤包括但不限于用户已购买、以曝光。在问答业务上,像我提问我已经回答,构建职责链逻辑清晰易理解。
配置化,通过配置文件实现整个逻辑通用化,是小伙伴最初的梦想和模型组构建出来配置化召回素材以及特征架构,很给力。通过配置实现对于品类素材特征召回,并且支持分层ABtest,并且配置中包含对特征计算,特征计算主要是上报特征用于模型计算,但是有些数据需要进行归一化处理,以方便模型训练使用。并且给人编辑配置文件为xml,通过程序转换成json,并且通过json来支持程序使用,能够方便程序进行解析,xml对人友好,json对程序解析友好。
特征归一化是特征上报很重要一环,他的特点是情况多,要根据数据分布情况做相应处理,就需要提前归纳总结多种情况,因为反射性能差线上服务是接受不了的,就需要提前对数据处理分成几类,提前想好处理逻辑,根据配置项选择相应逻辑进行处理。
上报特征服务、日志白名单服务,上报特征服务将两部分特征进行上报,一部分是简单特征由服务本身进行配置上报,另一部分是复杂特征由其他服务计算后调用上报特征服务,两部分合并进行特征上报。
日志白名单平台,服务可以配置相应用户信息,并且提供服务支持其他服务上报用户在白名单中进行相应记录,并且提供平台界面支持检索。这样可以方便定位线上服务问题,快速解决问题。
推荐系统是个复杂系统,由多个模块构成,构建推荐引擎,我们在一步步探索。
推荐系统架构,推荐系统由品类平台,素材、特征召回平台、模型计算打分服务,排序服务构成。
将请求封装成QueryInfo对象,通过对象来向下完成一步步数据召回。首先是通过QueryInfo对象召回品类、分类信息。
前边有人问到是怎样实现通用化?好问题,当时答得不太好,现在梳理总结一下,分类平台通过配置品类、分类信息,配置选取个数、配置过滤品类信息,通过每一种配置情况构建分类信息,分类信息完全由配置文件构成。
召回品类扩展QueryInfo对象构成QueryInfoExtern对象,为下一步进行素材、特征召回做准备,因为品类、分类数据量少,传输时不会因为数据量消耗太多时间,而素材、特征召回量极大,可通过分布式形式将素材进行召回,此时召回量最大可满足线上服务要求,召回之后,每组分别进行打分计算,打分之后进行取前边数据进行返回。
再由品类召回节点合并将高分素材进行返回,熟悉ElasticSearch同学,会发现和ElasticSearch集群架构很像,其实推荐本身和搜索就有很多相似之处,研究搜索引擎对于推荐引擎构建也会大有益处。
数据返回之前由排序服务对数据按展示效果进行商品按照品类、分类进行分隔,文章内容按标签、主题进行分隔。分隔目的是为了好的展示效果,提升用户体验,通过上面这一系列过程构建成推荐系统大致过程。
除了上边架构逻辑,还存在存储以及数据流转体系。分类、素材、特征存储在redis、HBase中供服务读取使用。
对于实时反馈,用户点击、浏览会通过存储在redis中用于过滤,以及调整后续推荐分类、素材权重,已作为一种最实时反馈手段。
上报特征本身通过JDQ消息队列进行上报,上报异步进行,通过先写日志文件再上报日志文件内容,来达到异步上报,以避免同步上报导致线上服务性能受影响。JDQ本身基于开源kafka打造。
JDQ本身为了资源情况限制上报速度为5M/s,为了更好利用上报机器资源,会构建内存队列,充分利用内存资源来控制发送速度,而不是一味通过扩容来解决问题。
一个挺不错的Java架构交流学习群:688583154里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多:
关注公众号:Java架构师学习
日志白名单本身按照服务、属性、关键字进行存储,在ElasticSearch中可方便按属性、关键词检索使用,通过图形化界面展示,方便快速定位线上问题。
监控本身除了Ump对系统功能、性能、可用性进行监控,引擎本身就要配备全面监控避免程序某个分支存在问题,导致线上服务正确性、可用性存在问题,再有因为程序很多由配置文件动态构成,性能也要进行全面监控。
对于线上效果,线上模型与分支进行绑定,当分支A效果实时效果好于B效果,要将线上模型进行更新调整,监控时间以几个小时效果为准。线上效果也要进行相应监控,如效果不好要对效果进行报警,以便算法人员对情况进行处理。
京东架构师的showtime京东个性化推荐系统实战的更多相关文章
- 京东架构师:日均 5 亿查询量的ElasticSearch架构如何设计?
作者:张sir 来源:京东技术(id:jingdongjishu) 1. 背景 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数 ...
- 最新linux运维高级架构课13期 架构师课程
有会员购买的,分享给大家.完整一套,可以学习一下. ├─L001-2017linux运维高级架构师13期-运维与自动化运维发展-10节 │ 1-1运维职业发展.avi │ ...
- 系统网站架构(淘宝、京东)& 架构师能力
来一张看上去是淘宝的架构的图: 参考地址:http://hellojava.info/?p=520 说几点我认可的地方: 架构需要掌握的点: 通信连接方式:大量的连接通常会有两种方式: 1. 大量cl ...
- 京东T8通过企业实例展示软件架构实际应用,带你迅速成为架构师
在软件行业,架构师和软件工程师是非常辛苦的职业.一方面新技术层出不穷;另一方面业务需求也层出不穷,让人疲于应付.导致的后果就是常常加班,生活质量低下.只有曾经身在其中的人,才能够体会其中的酸甜苦辣. ...
- 分享系列--面试JAVA架构师--链家网
本月7日去了一趟链家网面试,虽然没有面上,但仍有不少收获,在此做个简单的分享,当然了主要是分享给自己,让大家见笑了.因为这次是第一次面试JAVA网站架构师相关的职位,还是有些心虚的,毕竟之前大部分时间 ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘
15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
随机推荐
- 求树的重心 poj 1655
题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...
- 366. Find Leaves of Binary Tree输出层数相同的叶子节点
[抄题]: Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all ...
- Shell中read命令--学习
read命令 -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 1.基本读取read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后,read命令将数 ...
- java_22 Map接口
1Map Collection是孤立存在的,向集合中存储元素是一个一个放进去的 Map中的集合存储是成对的,可以通过键找到值.即将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值 ...
- Selenium 笔记
1. 截屏:get_screenshot_as_file(“C:\\b1.jpg”) 2. 退出:(1).close----关闭当前窗口 (2).quit()-----用于结束进程,关闭所有的窗口 一 ...
- 本机连接Spark Standalone--最简单的spark调试方式
为了既能远程连接spark 查看ui 又能本地练习 安装简单 去官网 http://spark.apache.org/downloads.html 选择对应版本下载 tar包 解压 tar ...
- centos 7 安装pip
1.首先检查centos 有没有安装python-pip 包, >>yum install python-pipnotice:NO package python-pip available ...
- 通过github安装crawley出现的问题
http://www.cnblogs.com/hbwxcw/p/7086188.html
- scrollIntoView()窗口滚动
1.某DIV窗口滚动到顶部: document.getElementById("某DIV的ID").scrollIntoView(true); 2.某DIV窗口滚动到底部: doc ...
- 利用springloaded进行java class动态替换
我们知道对于一个java文件,如Test.java,首先需要通过javac命令(javac Test.java)进行编译,生成class文件,再将class文件在jvm上进行加载运行,也就是java命 ...