58同城推荐系统架构设计与实现-top100summit(纯干货)

2014年11月21日,58同城将在top100summit峰会的“架构设计专场”分享“58同城推荐系统架构设计与实现”,本文是对分享主题的一个“简要”的介绍。

主题

58同城推荐系统架构设计与实现

一、推荐系统架构介绍

推荐系统是一个微庞大的工程、算法与业务综合的系统,其主要分为三大子系统:

1)线下推荐子系统;

2)线上推荐子系统;

3)效果评估子系统;

后文将重点讨论以上三大子系统的设计与实现。

二、线下推荐子系统

线下推荐子系统又主要分为线下挖掘模块数据管理工具两大部分。

线下挖掘模块

线下挖掘模块,是各类线下挖掘算法实施的核心,它读取各种数据源,运用各种算法实施线下数据挖掘,产出初步的挖掘结果,并将挖掘结果以一定格式保存下来。典型的,实施这些挖掘策略的是一些跑在hadoop平台上的job,并行实施策略,并将挖掘结果保存到hadoop上。

数据管理工具

数据管理工具,即DataMgrTools,它是一个工具(或者服务),它能够接受一些管理命令,读取某些特定格式的线下数据,将这些数据实时或者周期性的打到线上的redis或者内存中,供线上服务读取。

数据管理工具是一个与业务无关的通用工具,它需要支持多种特定格式数据的上传,因为线下挖掘模块产出的数据可能存储在文件里,HDFS上,数据库里,甚至是特定二进制数据。

该工具的实现要点是:定义好线下数据格式,线上数据格式,通过上下游API做数据的迁移和转换。

三、线上推荐子系统

线上推荐子系统主要分为展示服务、分流服务、推荐内核、策略module服务等几个部分。

展示服务

展示服务,或者说是接入服务,它是整个推荐系统线上部分的入口,即整个推荐系统的接入层,它向上游提供接口,供上游业务方调用。

展示服务是无状态的服务(线上子系统各个服务都是无状态的服务),可以任意水平扩展,该服务的实现要点是:定义好通用的接口格式。

分流服务

分流服务,它是推荐系统中一个非常有特色也非常重要的一个服务,它的作用是将上游过来的请求,按照不同的策略,以不同的比例,分流到不同的推荐算法实验平台(也就是下游的推荐内核)中去。

分流服务如何判断上游过来的一个请求分配到那个推荐算法实验平台呢?答案是通过策略和配置。从架构图中可以看到,几乎所有的服务都需要读取数据(data)和配置(conf),这些data可能是在线的动态变化的数据(例如:从redis中读取的数据),亦可能是相对静态的数据(例如:城市列表),conf比较好理解,即一些配置(例如:所有请求80%流量必须走A算法实验平台)。通过这些策略和配置,配合请求带过来的参数,分流服务计算出流量分配到哪个实验平台。

该服务的实现要点是:实现通用的支持与或非关系的可配置的分流规则,与下游实验平台定义好通用的接口以实现将流量按需打往不同的实验平台。

推荐内核

推荐内核,是各类线上推荐算法实施的核心,它其实只是一个通用的实验平台容器,每个推荐服务内部可能跑的是不同类型的推荐算法。

虽然推荐服务中跑着不同的推荐算法,但每个算法的实施步骤都是相同的,都需要经过:

(1)预处理;

(2)预分析;

(3)去重过滤;

(4)排序;

(5)推荐解释;

等五个步骤,每个步骤都可能存在多种不同的算法,不同的模型,各个步骤中的一种算法组合起来,完成一个完整的流程,构成一个“推荐算法实验平台”。

对于上述每个不同步骤中的不同模型,可能需要访问不同的外部module服务,例如:

推荐解释步骤,可能有两个模型,第一个模型在推荐解释阶段可能需要访问“解释-module1-服务”,第二个模型在推荐解释阶段可能需要访问“解释-module2-服务”,这些不同模型访问不同业务的需求,在架构层面都需要支持。

该服务的实现要点是:在一个推荐服务框架中跑多种策略,支持多个算法工程师在一个框架内并行开发/实验多个推荐算法,配合分流服务实现推荐算法实验平台。

策略服务

策略服务,又叫策略module服务,它实现了一个个推荐内核下游的推荐module。在推荐内核执行各个推荐步骤时,每个步骤中都可能存在不同的算法/策略,这些算法/和策略可能需要调用一些和策略绑定比较紧密的module服务,它们并不是通用服务,而是相对专有的服务。

例如:排序module服务,需要有一套方便,高效,可扩展的排序服务。

该服务的实现要点是:实现一个通用的服务框架,让算法人员能够快速的生成module服务,并将自己的需求在module中实现,且能够在算法实验平台方便的进行module服务的调用。

四、效果评估子系统

效果评估子系统又分为推荐服务调用端浏览器上报端实施效果分析端

推荐服务调用端

调用推荐系统接口的58同城业务线,例如招聘业务线。

浏览器上报端

浏览器端js,调用招聘服务时,能够在页面展现出推荐系统中推荐出来的结果,并且能够知道哪些推荐结果被点击了,且会将这些被展示的与被点击的信息进行上报。

实时效果分析端

浏览器js将被展示的推荐结果,与被点击的推荐结果进行上报后,有一个实时效果观察的平台,第一时间得知上线后推荐算法/推荐策略的效果。

五、总体架构图

综合前面章节所述,58同城推荐系统总体架构图如上。

推荐系统是一个工程、算法和业务的综合性系统,上线了推荐系统,从此58同城正式进入了智能数据推荐的时代。

关于-分享者

58沈剑,前百度高级工程师,现58同城高级系统架构师,产品技术学院优秀讲师。

上面的修饰词看上去很帅气的样子,但本质上还是一个程序员。

关于-top100summit

top100summit软件技术峰会,每年甄选有代表的100个技术创新/研发管理案例,梳理案例背后的成功(或教训)要素,共同形成行业智库。2014年会议将于11.21-11.23在北京国际会议中心召开,有兴趣的小伙伴欢迎来参加哟。

关于-58同城推荐业务

58同城是一个用户与商户共依的平台,信息的推荐对58同城而言至关重要。以58同城的招聘业务线为例:在招聘用户端,为用户推荐更多很好的相关职位,能够增强用户的体验,也增加了58同城的PV;在招聘商家端,为商户推荐更多更好的相关简历,能够增强商家的体验,促进简历的下载量,从而增加58同城的收入。

推荐业务如此重要,在技术层面,如何设计推荐系统的架构,是本文重点讨论的内容。

末了,欲了解更多“58同城推荐系统架构”细节,11.21下午,国家会议中心,top100summit峰会现场见口罗。

原文发布于微信公众号 - 架构师之路(road5858)

原文发表时间:2014-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

WeTest-玩转手游自动化测试

目前针对普通APP应用的自动化测试已经有很多,并且Android4.1版本后也已经支持UIAutomator,可以做自动化测试。还有比较成熟的开源自动化框架Ro...

2772
来自专栏领域驱动设计DDD实战进阶

领域驱动设计-划分界限上下文

4823
来自专栏企鹅号快讯

关于小程序的历史留存

微信小程序有一个很重要,但是却经常被忽略的功能——使用历史自动留存功能。 该功能最直观的表现形式是,小程序的使用历史列表。而除此之外,还有两个人们可能不太会注意...

24710
来自专栏云计算D1net

多云工作负载迁移:自动化是何作用?

为了高效地管理一个多云计环境,请同时考虑应用架构和用户部署两方面的选项。此外,自动化可有助于多云的高效管理,但它对于工作负载决策方面具有战略意义。 ? 云计算正...

2817
来自专栏云计算D1net

多云环境带来管理挑战

企业中多云环境的增长点燃了降低复杂性和冗余性管理工具的需求。 根据Gartner的数据,接近半数的大型企业将在2017年末之前运行混合云架构。灵活性、可伸缩性和...

42710
来自专栏企鹅号快讯

什么是API

今天看了一篇博客,关于什么是API看完之后还是有很多的感触的。先说说此时此刻的感触。刚才我在看WebSocket API,提到我们可以利用JavaScript调...

2145
来自专栏云计算D1net

将应用程序移动到云计算的5个步骤

组织对于关键业务应用程序的迁移,需要进行充分的前期准备,并保持其在整个过程中所需要的控制。 ? 业务应用程序以创纪录的数量进入云端,使用户和IT团队进入了访问...

3505
来自专栏成猿之路

[福利]人工智能学习资料

1506
来自专栏PPV课数据科学社区

【工具】MongoDB和orange使用案例

Orange Digital Orange Digital 是法国电信的子公司,负责向英国的EE(英国最大的移动数字服务提供商)和全欧洲的Orange输送数字服...

3145
来自专栏Java架构师历程

学习微服务的十大理由

始终关注新技术,语言和框架,以彻底改变您的组织。如果你仍然在你的立方体中使用整体框架中的代码搞乱,那么你可能生活在过去,那里有一个小应用程序和一些员工来处理它。...

2753

扫码关注云+社区

领取腾讯云代金券