原文地址: https://mp.weixin.qq.com/s/sYTJlbYbnkyysefCZHrfgw
今天读了《微博推荐架构的演进》这篇文章,感触如下:
微博庞大的用户量上一篇已经提到了,这一次就不提了,因为他的用户量,会收到很多很多的文章,他有一套自己的推荐体系:在微博推荐发展的过程中遇到体系方向的变化、业务的不断更迭、目标的重新树立,其产品思路、架构以及算法也随之进行变迁。本文主要阐述在这个过程中推荐架构的演进,从产品目标、算法需求以及技术发展等维度为读者呈现一个完整的发展脉络,同时也希望通过这个机会跟大家一起探讨业务与技术的相互关系。为了便于理解微博推荐架构演进,在介绍之前需要陈述一下微博推荐在流程上的构成,其实这个和微博本身没有关系,理论上业内推荐所存在的流程基本都是相同的。如图2所示,推荐是为了解决用户与item之间的关系,将用户感兴趣的item推荐给他/她。那么,一个item被推荐出来会经过候选、排序、策略、展示、反馈到评估再改变候选等等形成一个完整的回路。
下图是微博推荐的链路图:
1、独立式:
将架构特点划分为优点和缺点进行描述。那么优点是:简单,易于实现,不需要额外的基础支撑、利于业务的功能快速实现、利于多业务并行开展,相互不影响。而不足是:推荐流程不完整,缺乏反馈、评估等等重要内容,对于数据方面也极度缺乏统一处理方法、没有提供给算法相关的支撑,很难将推荐做的深入、几乎无法进行专业运维、QA的测试仅仅能到功能层面,模块级别的测试几乎不可能,因为太过于分散、很难进行团队协作,不利于项目的分解。尽管存在诸多的缺点,但是在其发展的过程中,也给后面的架构优化奠定了基础,其成果如下:在微博高速发展的过程中,满足了微博对于推荐的业务支撑要求,在这段时期里面共完成二十多个独立项目。诞生了woo的基础框架,后面的内部高效运算框架来源于此、 诞生了mapdb的静态存储,成为后期微博推荐静态存储的雏形、web应用层的不断需求的总结,组建形成推荐通用应用框架。
2、分层式:
架构为:应用层:主要承担推荐策略以及展现方面的工作,其特点在于充分发挥脚本语言的特点响应迭代需求。大部分的推荐内容经过排序之后已经可以展示了,但是由于前端产品策略的设定需要融合、删选以及重排操作,需要这一层来完成,在技术层面属于IO密集型的。在技术选型上,早期在原有apache+mod_python基础上进行了框架开发产生了common_recom_frame。该框架面向的是二次开发者,基于此框架可以很好的实现推荐业务流程。该框架的核心思想是提炼出project、work以及data的三层interface,project针对每一个推荐项目,work针对每个推荐项目中不同推荐方法,而data则是管理下游数据的访问方法。同时,设定了两个规范:一个是统一了推荐接口,无论是用户、内容还是垂直业务;另一个是屏蔽了不同协议数据库访问方法,极大提高了开发效率。common_recom_frame框架的诞生基本上解决了产品的各种推荐策略需求,走在了产品的前面。优点是:支撑完整的推荐流程,对于数据方面拥有统一的处理方法在兼顾业务功能快速实现的同时保证了效果技术的不断深化给算法提供了很好的支持提出以数据为先的思想,可以全面对比效果,推荐效果不断得以提升封层体系易于部署以及QA介入进行测试
而不足是:和推荐核心有一定的距离,并没有完全为推荐量身定做将推荐的策略算法完全交给了开发者,不利于推荐通用型对于算法的训练并没有涉及,仅仅是一个线上投放系统,不足以构成完整的推荐体系:微博推荐的核心业务均在该体系下完成:正文页推荐、趋势用户推荐、趋势内容推荐、各个场景下的用户推荐、粉丝经济的粉条、账号推荐等等产品 诞生了lab_common_so的基础框架,并进行了开源。 诞生了静态存储集群解决方案lushan,并进行了开源、RUF框架的诞生极大提升了业务生产效率,同时也为openresty社区做出一定贡献。
3、平台式
架构为:两个标准:一个是针对应用层,作为整体框架输出,应用层设定all in one 接口标准,其标准包含了输入以及输出参数;另外一个是针对动态输入rin,由于离线计算我们可以确定结构,因此一个输入层工具r9-interface不需要设定规范,但是rin是需要进行标准设定,从属性/交互数据/日志等等层面进行划分。计算层增加对于候选的标准生成方法:Artemis内容候选模块,item-cands用户候选模块、……,在项目开发中只需要选择这些候选生成方法即可。增加了策略平台EROS,解决算法模型的问题。EROS主要的几个功能是:1)训练模型 2)特征选取 3)上线对比测试。数据层中的r9-interface以及rin增加对于候选的生成方法,在线以及离线使用推荐通用策略生成结果。
主要描述其优势:继承了原有2.0的特点,保留了其优势、对于推荐理解更为深入,结合更为紧密、解决了推荐候选/排序/训练的算法最重要问题微博推荐3.0的诞生,其成果如下:1) 微博推荐的核心业务会逐步迁移到该体系下,以算法数据作为驱动,提升效果。2) 诞生了EROS的训练流程,提出了训练的标准方法。3) 针对推荐设定了标准的输入输出方法。4) 针对候选,产生了具有抽象意义的推荐方法集合。
总结:1) 技术来源于业务同时提升业务发展,业务发展又反过来推动技术的前进,他们是一个相互影响相互促进的关系。和业务共同发展的技术才是有生命力的。2) 技术架构的选型建议是寻找当前最短路径,然后进行不断优化迭代,一口气吃撑是不现实的,也是不合理的。3) 推广某个框架和工具最好的方式不是行政命令也不是请客吃饭,而是的大家都是参与者,如同开源项目,每个人都是它的主人,这样人人维护,人人使用。4) 团队崇尚简单可依靠,它说起来容易做起来难,不过有一个好方法就是懂得自己不应该做什么,而不是应该做什么。5) 说到推荐这个特殊领域上来,设定目标,跟踪目标很重要,把数据和目标摆出来,产品、架构以及算法都会想办法去解决的。