Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vivo 应用商店推荐系统探索与实践

vivo 应用商店推荐系统探索与实践

原创
作者头像
2020labs小助手
修改于 2021-03-22 02:32:59
修改于 2021-03-22 02:32:59
1.2K0
举报
文章被收录于专栏:vivo互联网技术vivo互联网技术

介绍 vivo 应用商店推荐系统如何高效支撑个性化的推荐需求。

一、前言

商店的应用数据主要来源于运营排期、CPD、游戏、算法等渠道,成立推荐项目之后也没有变化,发生变化的是由推荐系统负责和数据源进行对接,商店服务端只需要和应用推荐系统进行对接即可。

如果读者以为我们单纯是把商店服务端代码给照搬到推荐系统这边来了那就真的是too young too simple 了,不做优化或者升级直接copy一个系统是不可能的,这辈子都不可能。以下我将介绍我们如何去设计和规划应用推荐系统的。

二、面临的挑战

在笔者眼中,商店应用推荐系统除了要具备高性能、高可用性及核心指标的监控能力之外,还有一个核心的能力就是高效支撑商店流量场景接入个性化推荐。

如何定义高效支撑?

  • 最起码能支撑三四个并行的需求同时进行吧。
  • 一个需求开发周期最起码不能超过2天吧。
  • bug少一点吧,平均下来每个场景不应该超过2个吧。
  • 产品同学的常态性的需求基本都能快速支持吧。

分享我们一个应用推荐的策划case看看:

在xx场景下,

如果主应用A属于应用类,

  • 则首先从从x1数据源去取Q1队列。
  • 然后从x2数据源去取Q2队列。
  • 然后用Q2队列去截断Q1队列,交集之后进行同开发者过滤和一级分类过滤。
  • 如果交集为空则用Q2去兜底,然后取交集队列的n1和n2 位置上的元素作为返回队列。
  • 如果前面都没有取到数据的话从大数据xxx表中按照主应用下应用点击的概率取点击率最高的分类下的n个,同时需要对这些数据进行队列内的同开发者过滤。

如果主应用A属于游戏类,

  • 则xxxx
  • 进行二级分类过滤
  • 如果量不足的话,则从x(n)取数据然后进行处理,
  • 如果数据不足3个的话,需要从周榜单中取同一级分类下的应用按照下载排行进行兜底。

没错,读者朋友不要怀疑自己,为了不把各位读者大大绕晕,我们这里只是挑选了一个简单的需求。实现这么一个功能也没有什么大不了的,但是当这种个性化推荐需求有几十个,后面还可能一致扩展下去的时候会不会心里发慌?来,简单看下我们现在个性化推荐的一部分需求,如图(一)所示:

图(一)
图(一)

使用商店服务端之前的case by case的开发方案,无论如何都无法实现上文中描述的要支撑商店高效接入推荐场景了,接着就是我们如何去实现优化的过程了。

三、如何解决

为了更好的说明解决思路,我们从实际思考过程出发,一步步讲解问题的解决过程。

3.1 业务流程抽象

单纯从策划上面来说,我们每个场景都需要至少做如图(二)中的几件事情:

图(二)
图(二)
  • 获取推荐列表:调用各个数据源获取的推荐队列(需要注意的是不同场景下调用的接口并不一致,此外接口返回的字段和结构可能也不一样)。
  • 队列融合:将1中提到的进行交集或者并集并等操作。
  • 数据过滤(队列内/队列间):在队列中进行各项过滤,过滤操作主要是为了提升相关性。
  • 数据兜底:指在队列数据不够的时候,用榜单兜底,可能取周榜单数据的同一级分类数据,同二级分类数据。

笔者从开发便捷性出发,对模型进行了进一步的调整,调整后为图(三)

图(三)
图(三)

获取队列后对队列进行安装过滤和队列内过滤(如主应用同开发者过滤等)可以进行流程合并,主要有如下的原因

  • 方便定义每一个数据源的过滤策略,实际需求中不同的队列也会使用不同的过滤策略。
  • 这种方式非常匹配模板设计模式,能确保我们获取推荐列表过程是一致和稳定的。

3.2 抽象流程延伸

到图(三)这里,读者会发现我们依然没有能够解决我们前面提到的各种推荐场景里面的差异化过程。

其实在接触几个需求以后,我们会发现,想要在一套代码里面去解决这么大的差异性,几乎不可能,或者即使实现了,那么也会让代码变得无比复杂。与其这样子,我们还不如正视这种差异性,让差异在场景插件里面去实现,我们花更多的精力去打理主干。

那么为了支持让场景能够具备灵活的扩展能力,笔者在基于图(三)的基础上增加了四个环节:

  • 队列结果线程内共享:使用ThreadLocal来实现。存储各推荐队列的结果主要是为了便于后续使用某推荐队列做填充的需求,另外就是避免需要再重复请求三方数据接口,减少接口重复调用。
  • 插件队列兜底:主要目的是在过滤后在数量不足需求的情况下,使用指定的队列完成填充,场景插件亦可按需填写实现填充逻辑,实现队列内容的补充。
  • 插件接口回调:该环节主要是对前面的队列做个性化的处理,如对队列进行干预等,没有将插件接口回调和插件队列兜底融合在一起主要原因是插件队列融合可以实现可配置化的设置。
  • 周榜单兜底:提供通用的周榜单数据查询能力,支持按照各种维度进行查询,此部分数据作为队列的最后兜底。

拓展后的流程图如图(四)所示

图(四)
图(四)

3.3 整体逻辑框图

经过上述的分析可知,我们可以尽可能的把个性化的场景内容放在插件层实现,框架层负责加载按场景加载场景插件的具体个性化推荐逻辑。

系统从分层思路上讲从上至下共分为:插件层,框架层,协议适配层,数据源服务层,原子服务层,基础服务层,上层通过 SDK 依赖下层的服务(接口),各层次职责为:

  • 插件层:各个场景对应的插件,框架层对插件回调或者扩展接口提供默认实现,插件层按需实现具体的逻辑。
  • 框架层:定义推荐数据的核心流程和执行逻辑,回调插件层的实现的扩展和回调接口。
  • 协议适配层:负责按照场景找到场景对应的数据源服务,并封装转换协议和进行数据转换
  • 数据源服务层:与各个队列提供方提供的RPC服务封装层。
  • 原子服务层:过滤类型的相关服务,主要是依赖于商店的 RPC 服务,使用组合的设计模式,服务可以进行组合。
  • 基础服务层:支持从开发者、一级分类、二级分类、应用类型等纬度进行相关性的判断或者过滤,同原子服务层一样,此层服务也是原子粒度,支持进行组合控制。

至此,相信大家都知晓了,针对于个性化的推荐,我们的开发工作最终将聚焦于开发场景插件,不需要再额外开发每一个业务流程了。

应用推荐系统架构

3.4 关键实现

在完成第三步整体逻辑框图设计之后,我们从场景参数定义,服务设计原则,设计模式使用,场景热插拔等方面进行了相关的方案研究并最终实现了方案的落地。

3.4.1 场景服务参数定义

为实现推荐场景足够通用,我们将数据源层,原子服务层,基础服务层的内容进行了服务配置的映射,通过在配置中定义对应的配置项来实现服务的映射和组合,针对于差异性的内容在插件层进行实现。以如下的配置项示意图来说明:

  • sourceMap:场景服务定义为map用于支持场景下多个模块或者实验组的情形,其中key为模块ID,商店服务端请求推荐的时候,需要携带此参数。
  • cpdRequest 、algorithmRequest 、gameRequest:用于定义对应的RPC调用的请求参数。
  • filterRequest:用于定义队列内的过滤请求,如主应用同开发者过滤等。
  • unionStrategy:定义队列合并和融合及队列间的合并规则。
  • supplement:兜底策略;
  • sourceList:使用的数据源,如上图中定义了两个数据源,则表示在此场景下需要从两个数据源获取数据,然后进行队列合并及后处理。

3.4.2 服务原子化与唯一化

实现服务原子化与服务唯一化对本系统至关重要,在实现过程中是严格遵照如下两点来:

应用推荐依赖的三方RPC服务及内部的一些过滤逻辑都封装成了细粒度的原子服务(方法)的SDK。SDK中的内容不包含个性化推荐场景的具体业务性的能力,体现的重点是基础功能项,业务内容需要在场景插件中进行实现,统一类型的服务尽可能支持组合。

服务唯一化在对于实现系统的收敛和代码规模可控至关重要,我们也是不断的在朝着这个努力。各服务层都是以SDK的形式对外提供相关的功能,在SDK中实现服务调用入口的唯一性。

3.4.3 合理使用设计模式

系统中使用了较多的设计模式来优化整体架构,如下重点来介绍使用的模板设计模式、策略模式及组合模式:

在获取推荐原始队列中使用了模板设计模式和策略模式来实现此过程。

使用模板设计模式的好处显而易见,能够容易促进此部分处理逻辑流程化。 针对不同的数据源,需要使用不同的数据源服务和方法,使用策略模式的好处是便于定义在不同场景下对不同的接口的调用。

同类型的原子服务或者方法尽可能支持组合模式,这种会为后续的扩展提供很大的便利性。

以实际的实现方法来说明,在我们定义过滤类型的时候,支持传入多个过滤类型,上层业务在使用的时候按需传入即可。使用组合的设计模式在提升扩展性方面起到了巨大的作用。

3.4.4 场景的热插拔

系统中为实现场景之间的隔离和互不干扰,笔者使用了Java SPI的方式,在框架层定义了场景接口,接口实现类则在各个场景在独自的Jar中实现。这种方式有助于插件程序对框架层和基础服务层的侵入性降到最低。

四、带来的改变

以前商店服务端在各个接口的service层写完整的推荐队列获取、融合、组装、过滤逻辑,有大量的重复内容,且随着版本的不断迭代,有很多版本不同的处理逻辑夹杂在一起,导致改造难升级难,牵一发动全身。目前应用推荐系统在两个方向带来较大改善:

  1. 流程框架的逻辑完全抽象并独立,各个业务场景只需要按需写很少的插件回调逻辑即可,(不涉及十分特殊的场景可完全不用写插件回调扩展,通过配置对应的场景规则配置即可,可完全实现免开发,目前有30%左右的场景免开发)。
  2. 场景之间完全隔离和独立, 涉及复杂的功能升级可通过升级对应的场景id或者模块id来做增量实现,不影响现有逻辑。

五、写在最后

通过上述相关的方案落地,针对于各个推荐场景,我们大概减少了75%的开发工作量,同时bug率也得到大幅度的降低。

作者:vivo-Huang Xiaoqun

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
推荐系统中召回的定义及起源是什么?
召回是指生产者按照规定程序和要求,对存在缺陷的消费品,通过补充或者修正警示标识、修理、更换、退货等补救措施,消除缺陷或者降低安全风险的活动。这个定义主要适用于消费品领域,尤其是当消费品存在由于设计、制造、警示等原因导致的危及人身、财产安全的不合理危险时。
jack.yang
2025/04/05
1410
旅游推荐系统的演进
背景 度假业务在整个在线旅游市场中占据着非常重要的位置,如何做好做大这块蛋糕是行业内的焦点。与美食或酒店的用户兴趣点明确(比如找某个确定的餐厅或者找某个目的地附近的酒店)不同,旅游场景中的用户兴趣点(比如周末去哪儿好玩)很难确定,而且会随着季节、天气、用户属性等变化而变化。这些特点导致传统的信息检索并不能很好的满足用户需求,我们迫切需要建设旅游推荐系统(本文中度假=旅游)。 旅游推荐系统主要面临以下几点挑战: 本异地差异大。在本地生活场景中用户需求绝大部分集中在本地,而在旅游场景中超过30%的订单来自于异地
美团技术团队
2018/03/12
2.5K0
旅游推荐系统的演进
深度解析京东个性化推荐系统演进史
在电商领域,推荐的价值在于挖掘用户潜在购买需求,缩短用户到商品的距离,提升用户的购物体验。 京东推荐的演进史是绚丽多彩的。京东的推荐起步于2012年,当时的推荐产品甚至是基于规则匹配做的。整个推荐产品线组合就像一个个松散的原始部落一样,部落与部落之前没有任何工程、算法的交集。2013年,国内大数据时代到来,一方面如果做的事情与大数据不沾边,都显得自己水平不够,另外一方面京东业务在这一年开始飞速发展,所以传统的方式已经跟不上业务的发展了,为此推荐团队专门设计了新的推荐系统。 随着业务的快速发展以及移动互联网的
用户1263954
2018/01/30
2.3K0
深度解析京东个性化推荐系统演进史
个性化推荐系统(四)--- 推荐系统服务端
 推荐系统怎样稳定高效提供服务,持续不断满足业务需求,持续不断面对技术挑战,是每一个服务端开发同学应该持续思考,和持续不断优化线上服务。         以前我们开发的程序更多的是网站,并且以单体服务
杉枫
2018/03/12
1.8K0
个性化推荐系统(四)--- 推荐系统服务端
饿了么推荐系统:从0到1
随着移动互联网的发展,用户使用习惯日趋碎片化,如何让用户在有限的访问时间里找到想要的产品,成为了搜索/推荐系统演进的重要职责。作为外卖领域的独角兽, 饿了么拥有百万级的日活跃用户,如何利用数据挖掘/机器学习的方法挖掘潜在用户、增加用户粘性,已成为迫切需要解决的问题。 个性化推荐系统通过研究用户的兴趣偏好,进行个性化计算,发现用户的兴趣点,从而引导用户发现自己的信息需求。一个好的推荐系统不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。 本次分享介绍饿 了么如何从0到1构建一个可
CSDN技术头条
2018/02/12
1.6K0
饿了么推荐系统:从0到1
混合推荐系统介绍
作者在前面几篇文章中对常用的推荐算法,如基于内容的推荐、协同过滤、矩阵分解、分解机、基于标签的推荐、深度学习等进行了详细介绍(点击蓝色字体阅读相关文章),并在这些文章中详细说明了这些算法的优缺点。在本篇文章我们会介绍混合推荐系统(Hybrid Recommender Systems),就是利用多种推荐算法配合起来做推荐,期望避免单个推荐算法存在的问题,最终获得比单个算法更好的推荐效果。
石晓文
2019/12/19
2K0
混合推荐系统介绍
舍弃 Python,为何知乎选用 Go 重构推荐系统?
声明:本文由微信公众号 「AI 前线」原创(ID:ai-front),未经授权不得转载
崔庆才
2019/05/06
1.4K0
舍弃 Python,为何知乎选用 Go 重构推荐系统?
深度解析京东个性化推荐系统演进史
作者 | fisherman、Davidxiaozhi 本文摘自《决战618:探秘京东技术取胜之道》,两位作者时任京东推荐系统负责人和系统架构师。 在电商领域,推荐的价值在于挖掘用户潜在购买需求,缩短
Spark学习技巧
2018/01/31
1.5K0
深度解析京东个性化推荐系统演进史
快手类推荐系统实践
1. 什么是推荐系统 推荐系统是一种信息过滤系统,近年来非常流行,应用于各行各业。 比如大家耳熟能详的快手、头条、手机百度、淘宝、京东、应用宝...几乎各个平台都有一个智能推荐的功能。 2. 推荐的主要方法 推荐系统产生推荐列表的方式通常有两种: 基于算法的推荐:协同过滤,逻辑回归、决策树 基于内容推荐 协同过滤方法根据用户历史行为(例如其购买的、选择的、评价过的物品等)结合其他用户的相似决策建立模型。这种模型可用于预测用户对哪些物品可能感兴趣(或用户对物品的感兴趣程度)。 基于内容推荐利用一些列有关物品的
机器学习算法工程师
2018/03/06
1.6K0
快手类推荐系统实践
超详细丨完整的【推荐系统】架构设计
本文我们将从架构设计的角度回顾和讨论推荐系统的一些核心算法模块,重点从离线层、近线层和在线层三个架构层面讨论这些算法。
Ai学习的老章
2020/09/22
2.1K0
超详细丨完整的【推荐系统】架构设计
干货 | 美图个性化推荐的实践与探索
个性化推荐的目标是连接用户与内容、提升用户体验和优化内容生态。为了实现以上目标,算法需要理解内容,了解平台上可用于推荐的内容;同时也要理解用户,了解用户的兴趣爱好,从而进行精准推荐。
美图数据技术团队
2018/08/22
1.2K0
干货 | 美图个性化推荐的实践与探索
《推荐系统实践》—— 读后总结
在刚刚毕业的时候,当时的领导就问了一个问题——个性化推荐与精准营销的区别,当时朦朦胧胧回答不出。现在想想,他们可以说是角度不同。精准营销可以理解为帮助物品寻找用户,而个性化推荐则是帮助用户寻找物品。
用户1154259
2018/01/17
9740
《推荐系统实践》—— 读后总结
集体智慧的结晶:个性化推荐系统
在DT(datatechnology)时代,人们的日常生活已经和各种各样的数据密不可分,例如在网络购物、在线视频、在线音乐、新闻门户等都在产生海量的数据。海量的数据产生也带来了信息过载和选择障碍的困扰,每个用户的时间和精力是有限的,怎样帮助用户进行信息的过滤和选择,在DT时代是非常有价值的。
博文视点Broadview
2020/06/12
9450
集体智慧的结晶:个性化推荐系统
有赞推荐系统关键技术
个性化推荐是随着移动互联网发展不断发展起来的,它是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。有赞微商城使用个性化推荐系统,尤其是在关键节点增加推荐入口,进行场景化推荐,帮助商家进一步提高用户的付款转化率,最大化流量变现。
有赞coder
2020/08/25
1.1K0
有赞推荐系统关键技术
读书笔记 |《推荐系统实践》- 个性化推荐系统总结
推荐系统实践 对于推荐系统,本文总结内容,如下图所示: 推荐系统.png 文章很长,你可以跳着看你感兴趣的部分。 一、什么是推荐系统 1. 为什么需要推荐系统 结论是,为了解决互联网时代下的信息超载问
小莹莹
2018/04/20
1.8K0
读书笔记 |《推荐系统实践》- 个性化推荐系统总结
解密游戏推荐系统的建设之路
本文从零开始介绍了游戏推荐项目的发展历程,阐述了大型项目建设中遇到的业务与架构问题以及开发工程师们的解决方案,描绘了游戏推荐项目的特点以及业务发展方向,有着较好的参考与借鉴意义。
2020labs小助手
2023/02/27
8300
推荐系统与精细化运营
随着大数据与人工智能(AI)技术的发展与成熟,国家政策层面对大数据与人工智能技术、创新、创业层面的支持,企业越来越意识到数据和AI技术的价值,并逐步认可数据是企业的核心资产。怎么利用大数据和AI技术从这些价值密度低、源源不断地产生的海量数据中挖掘商业价值,提升公司的决策力和竞争力,是每个提供产品/服务的公司(特别是toC互联网公司)必须思考和探索的问题。
石晓文
2020/03/05
1.5K0
推荐系统与精细化运营
推荐系统浅谈
通过将内容 (生产方) 与用户 (消费方) 进行匹配, 提供符合不同消费方各自偏好的内容, 在不同业务方的知识体系中可能会被称为: 智能分发, 个性化推荐, 千人千面
runzhliu
2020/08/06
5850
推荐系统产品与算法概述 | 深度
作者在《推荐系统的工程实现》(点击蓝字可回顾)这篇文章的第五部分“推荐系统范式”中讲到工业级推荐系统有非个性化范式、完全个性化范式、群组个性化范式、标的物关联标的物范式、笛卡尔积范式等 5种 常用的推荐范式。本文会按照这5大范式来讲解常用的推荐算法,但不会深入讲解算法的实现原理,只是概述算法的实现思路,后面的系列文章我会对常用的重点算法进行细致深入剖析。
AI科技大本营
2019/06/20
1.7K0
推荐系统产品与算法概述 | 深度
达观数据推荐系统实践—实时演算用户动态数据 提升运营效率
本文曾在infoq大数据微信群和数据猿直播平台上进行过分享,是对分享内容最直观的表达,同时对推荐系统架构和算法解释的也很详尽。 随着移动互联网技术的迅猛发展、互联网信息的爆炸式增长和种类的纷繁复杂,导致用户常常在面临信息选择时感到无所适从。这种选择多样性不但没有产生经济效益,反而降低了用户满意度。同时,互联网上的各种物品又存在长尾(long tail)现象,指大部分商品属于冷门而没有展示的机会。 Chris Anderson在2006年出版的《长尾理论》一书中指出,传统的80/20原则(80%的销售额来自于
达观数据
2018/03/30
2.2K0
达观数据推荐系统实践—实时演算用户动态数据  提升运营效率
相关推荐
推荐系统中召回的定义及起源是什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档