个性化推荐系统架构设计(一)
优采云 发布时间: 2022-05-24 05:50个性化推荐系统架构设计(一)
互联网在不断发展,技术在不断演变。作为架构师,工程管理者需要与时俱进。
个性化推荐是一个由数据挖掘和机器学习的综合学科,它基于用户兴趣和喜好,提供相关服务精准的推荐,而且这种口味和喜欢的收集,是在用户无过多参与之情况。
我们以 Service-oriented 架构 — SOA为核心,以 Full Stack 技术为特点,结合当前炙手可热的机器学习在实际软件工程中的运用。我会介绍如何实现文本采集,关键字查询与推荐引擎技术。
推荐系统目标是构建一个高扩展和高可用产品。所用技术栈如下:
Node.js ,RPC / REST, RabbitMQ/Kafka, Crawler, MongoDB, TensorFlow
系统分为如下四部分:
1、Web前端:采用Node.js实现一个动态网站让用户访问,根据当前用户画像返回其感兴趣的内容,包括搜索结果。
说明:前端不处理任何业务逻辑,全部通过 RPC 调用后端服务 API。
2、后端服务层:使用 Python 实现 REST API ,接受前端请求,读写数据库或消息队列,调用推荐引擎,返回当前用户画像的内容,比如 TensorFlow Serving。
3、文章采集器:用来实时采集资讯数据,连续运行(不同的时间规则)的网络爬虫,不断抓取其它网站信息,然后进行过滤&归类&标签,用户画像集合&定义,更新数据库。
用户画像建模
用户行为收集
个性化推荐系统收集的用户行为信息,主要来自以下两类数据:
1)访问日志
一般为Web服务器的日志,如Nginx。其内容包括来源IP,客户端,HTTP响应码,来源,UserAgent代理版本等。
网站访问日志一般不会有遗漏,无论是什么场景的产品,对于开发者都是个宝贵财富,是数据统计、挖掘与分析的基础和重要来源。
2)客户端
一些用户操作行为,在日志里不能完全体现,外部环境如硬件,操作系统,软件,内部如分享,收藏,转发以及用户社交帐号(比如微博)、Cookie、浏览深度和时间长度。一般采用Ajax异步处理。
这些埋点用事先准备好完备的REST接口,加载相应服务。为提高效率,一般服务器采用异步处理,使用MQ(Rabbit或Kafka)队列来统一收集数据 。
服务器端可启动多个服务进程实时*敏*感*词*这些MQ数据,然后做相应处理。
数据解析
接下来我们需要对类数据进行解析。我们可定时大批量处理,小批量处理以及单条逐一处理。
1)定时大量处理。使用Scribe/Scribe,或Python/Java若干小时或每天处理。一般为处理用户画像;
2)逐条处理。主要针对埋点的用户数据 处理,借助MQ,加上Storm进行处理。
3)小批量处理。每隔分钟级,秒级的的单条处理。
(未完待续)