推荐系统提供web服务的2种方式


推荐系统提供web服务的2种方式

文章插图

推荐系统是一种信息过滤技术,通过从用户行为中挖掘用户兴趣偏好,为用户提供个性化的信息,减少用户的找寻时间,降低用户的决策成本,让用户更加被动地消费信息 。推荐系统是随着互联网技术的发展及应用深入而出现的,并在当前得到广泛的关注,它是一种软件解决方案,是toC互联网产品上的一个模块 。用户通过与推荐模块交互,推荐系统通过提供的web服务,将与用户兴趣匹配的标的物筛选出来,组装成合适的数据结构,最终展示给用户 。推荐系统web服务是前端和后端沟通的桥梁,是推荐结果传输的最后通道,信息传输是否通畅,传输是否足够快速,对用户体验是有极大影响的 。本文我们就来讲解推荐系统提供web服务的两种主要方式,这两种方式是企业级推荐系统最常采用的两种形式 。
 
具体来说,这篇文章我们会从什么是推荐系统web服务、推荐系统提供web服务的两种方式、事先计算型web服务、实时装配型web服务、两种web服务方式的优劣对比、影响web服务方案的因素及选择原则等6个部分来讲解 。通过本文的介绍,期望读者可以深刻理解这两种web服务方式的具体实现方案以及它们之间的差别,并具备结合具体的业务场景来决策采用哪种方式的能力 。
 
一、什么是推荐系统web服务作者在《构建优质的推荐系统服务》第一节中已经对推荐系统web服务进行了简单介绍,这里为了让读者更好地理解本文的知识点,以及为了内容的完整性,对推荐系统web服务进行简略介绍 。
 
用户与推荐系统交互的服务流程见下面图1,用户在使用产品过程中与推荐模块(产品上提供推荐能力的功能点)交互,前端(手机、PC、Pad、智能电视等)请求推荐web服务,推荐web服务获取该用户的推荐结果,将推荐结果返回给前端,前端通过适当的渲染将最终的推荐结果按照一定的样式和排列规则在产品上展示出来,这时用户就可以看到推荐系统给他的推荐结果了 。
推荐系统提供web服务的2种方式

文章插图
 
图1:用户通过推荐web服务获取推荐结果的数据交互流程
 
上图中的绿色虚线框中的数据交互能力就是推荐web服务的范畴,它是前端(也叫终端)与后端的互动,图中蓝色方块(推荐web服务模块)是部署在服务器上的一类软件服务,它提供HTTP接口,让前端可以实时与之交互 。用户与终端的交互属于视觉及交互设计范畴,虽然与推荐web服务无直接关系,但是是整个推荐服务能力完整实现必不可少的一环,也是用户可以肉眼直接感知到的部分,在整个推荐系统中非常重要,对推荐系统发挥价值有极大影响,不过不在我们这篇文章的讨论范围,对这一块感兴趣的读者可以参考《推荐系统的UI交互与视觉展示》这篇文章 。
 
为了给前端提供个性化推荐服务,上图中的推荐web服务模块需要完成3件事情 。首先需要获得该用户的推荐结果(直接获得已经计算好的推荐结果,这就是第三节要讲的,或者通过临时计算获得推荐结果,这就是第四节要讲的),其次是将结果组装成前端最终需要的数据结构(第一步获得的推荐结果一般是标的物id的列表,实际展示给前端还需要标的物的各种metadata信息,如名称,价格,海报图等,这些信息的组装就是在这一步完成的,这些信息一般会存放到关系型数据库中,或者采用json的形式组织存放到redis、文档型NoSQL中,所以这里至少还有一次额外的数据库访问),最后是响应前端的HTTP请求(一般是GET请求),将最终推荐结果返回给前端 。本文我们讲解的推荐系统提供web服务的两种方式,就是这里讲的第一件事情,即推荐web服务怎么获得给用户的推荐结果 。
 
推荐web服务模块是最终为用户提供推荐能力的部分,它设计得好不好直接影响用户体验,一般来说,该模块需要满足稳定、响应及时、容错、可以随着用户规模线性扩容等多个条件,具体的细节读者可以参考《构建优质的推荐系统服务》这篇文章 。这里提一下,随着Docker等容器技术及kubernetes等容器管理软件的发展和成熟,推荐web服务中的各个子模块都可以分别部署在容器中,采用微服务的方式进行数据交互,这样就可以高效管理这些服务,更好地进行服务的监控、错误恢复、线性扩容等 。
 
上图只是一种简化的交互模型,在实际企业级服务中,往往比这个更加复杂,在前端和后端之间往往存在一层CDN层做缓存加速,以减轻前端服务对后端并发访问的压力(在用户量大的情况下,推荐系统属于高并发服务),并且一般推荐web服务中还存在一层Nginx代理层,通过Nginx代理,让推荐web服务可以水平扩容,以满足推荐系统高并发的要求 。下面图2就是一种可行的完整推荐系统服务方案 。


推荐阅读