揭秘!闲鱼拉新投放系统如何设计

简介: 短!平!快!准!狠!

作者:闲鱼技术-长玖

背景

闲鱼目前已经是国内最大的闲置物品交易平台。随着闲鱼体量的增长和用户规模不断扩大,闲鱼App上的一个普通banner抑或是feeds中的一张普通的卡片,每天都可能被数以千万计的人看到。

为了更好地服务好广大的用户群体,更加个性化的内容推荐和更加精细化的素材投放就显得尤为必要了。今天我们来聊一聊如何设计一个可以精准触达用户、运营快速试错、解放开发生产力的投放系统。

思路分析

投放是什么?举例来说,往城市广场的一块广告牌上在不同时段不同场景下更换广告画就是一种投放,当然互联网技术带来了人的维度,不同用户看到的广告画可能也是不一样的。我们来看下这样一个系统应该包含哪些功能。

1、我们把“城市广场上的那块广告牌”叫资源位,那么需要一个服务端接口来获取需要透出的素材。
2、不同资源位需要透出的素材格式可能是不一样的,可能是banner,可能是feeds,可能是运营自定义的手填数据,可能是任何合理的数据结构。
3、同一个资源位,不同时段,针对不同平台、不同人群,透出的素材可能是不一样的,那么就需要有一个服务来在一堆素材中筛选出适合资源位的内容。在资源位命中了多个素材的时候,还需要有一些机制来裁决出最终透出的那一个。

详细设计

我们设计的投放系统扮演的是前端实体资源位和后端多种数据源之间的桥梁的角色。它负责从各个业务数据源中根据一定规则筛选出在特定资源位上需要透出的数据,基本的数据流如下图所示:

undefined

资源位

所谓资源位,在我们这个体系内,是指前端页面上的实体坑位。是技术同学在产品开发中创建的。理所当然,资源位需要消费的数据结构是在开发阶段就确定了,比如banner、feeds或者结构非常灵活的手填数据等。

在我们这个体系里,我们用一个 schema 描述资源位需要消费的数据结构。

undefined

这个 schema 是用 json 描述的。技术同学在前端页面上开发实体资源位后,需要在我们的系统中创建对应的虚拟资源位,并通过一个图形化的 json schema 编辑器来定义这个资源位需要消费的数据结构

undefined

投放物料

上述 schema 定义了一个资源位所需要消费的数据的格式。但是光有 schema 是不够的,因为资源位要消费的数据,而不是数据结构本身。在我们的系统中,我们用一个动态表单模块根据schema生成动态的表单,产品运营同学通过动态表单生产的数据,我们称之为投放物料。资源位消费的就是投放物料。

对于一些手填数据,表单直接产生的数据就是资源位可用的了。但是对于 Feeds 之类的,表单往往只能定义 Feeds 的一些诸如选品等特征字段。对于这类特殊类型的数据源,服务端就不能简单的直接返回数据了,需要根据这些特征字段,做一些数据查询和数据解析工作,再返回给前端一个完整规范的数据。

undefined

投放单元

前述文章说到,同一个banner,可能对新用户投放的是红包,对年轻男孩子投放的是手机数码内容,对年轻女孩子投放的是美妆服饰。我们把这个连接了资源位、投放物料与多个投放因子的桥梁叫做投放单元。

那么投放单元需要有多少个投放因子呢?其实是视业务而定的,我们认为基础的投放因为应该包含 投放时段、投放人群、投放平台、投放AB配置等。

当资源位向投放系统发起请求拉取数据时,投放系统在这个资源位上挂载的所有投放单元中根据投放因子筛选出命中的投放单元,最后将命中的投放单元上挂载的投放物料返回给前端的投放资源位。当命中了多个投放单元时,需要有些方法来裁决出最终胜出的那一个。这个方法简单点做,可以在投放单元中配一个权重,筛选时最后选择权重高的那个,也可以引入算法决策,根据投放的 ctr 数据做排序。

undefined

投放计划

投放计划是产品运营对多个资源位管理形式。简单来说,一个投放计划下,可以挂载多个关联的资源位。试想一下,一次大促活动可能涉及到几十个资源位的投放,将这些资源位组织到同一个投放计划中进行管理,可以更加方便操作以及查看投放效果。

端侧接入

对于前端来说,我们希望通过提供一个封装的npm包,通过简单调用,传入resourceId(资源位ID) 即可获取数据。

undefined

这种调用方式对业务调用方来说是比较优雅的,但是对页面性能来说却是不省心的。因为一个页面往往由很多个资源位组成,每个资源位单独发起请求就会形成大量的并发请求,不仅页面性能会降低,还会对服务器产生比较大的qps压力。

针对这种情况,我们做了一个小优化。服务端提供一个批量查询的接口,前端SDK内部,每10ms 对模块的请求调用做一次聚合,将单个资源位的数据获取转化成批量的查询。负面影响是对部分资源位的数据加载造成最大10ms的延时,优点是提升了页面整体的性能,有效减小了服务端QPS压力。

undefined

效果

上述投放系统在我们的拉新业务实践中run得非常好,已为闲鱼应用内的数百个资源位提供投放能力支持,每天服务数以千万记的闲鱼用户。既实现了资源位的精细化投放,提高了单个资源位的利用率,又赋能运营更自由地进行各种拉新投放实验,减小试错成本,还减少了技术同学频繁参与运营实验改造的开发工作量,解放了技术同学的生产力。

总结

上述文章介绍了一个简易的投放系统的设计思路,本质上是一个连接前端实体资源位和服务端多种数据源的桥梁的设计。

其中有很多能力是依赖了团队内部其它同学努力的成果,比如:
1、描述资源位数据结构的 json schema如何设计
2、根据json schema动态生成的表单怎么实现
3、人群校验的服务和能力
4、AB测试的能力
5、feeds 的选品服务
4、个性化动态banner能力

还有很多可以优化的点,比如数据回流如何做得更好,怎样引入算法能力对策略筛选进行优化。。。持续优化、持续为业务创造价值是我们一直坚持努力的方向。

想要了解更多细节,就请关注闲鱼技术公众号吧。青山不改,绿水长流~

相关文章
|
数据采集 移动开发 文字识别
服务阿里 9 个APP|揭秘新奥创升级的质量演变
新奥创技术体系,是手机淘宝端搭载着星环中台的整个商业化研发体系,孵化出的面对无线电商领域的技术体系。过去一年在手淘完成了下单、详情、购物车三大业务域的改造,接下来还会在订单、手淘导购等领域进行技术升级。目前新奥创已经接入阿里内的9个 App,逐步成为阿里集团无线领域电商系的技术解决方案。 本文主要围绕新奥创技术体系的升级,剖析架构升级对测试保障带来的新的转变,也是新的机遇。
5617 0
服务阿里 9 个APP|揭秘新奥创升级的质量演变
|
运维 前端开发 搜索推荐
大象转身-平台架构如何拥抱业务创新
如果你正在负责一个超大复杂型平台(比如电商、支付、物流)的架构师,且面临各种技术负债(比如架构复杂性、团队协同复杂性),同时业务又面临从平台服务,到场景化创新的转型。那么这篇文章也许对你有收获。
112731 25
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
302 4
|
5月前
|
数据采集 人工智能 自然语言处理
AI重构数据价值链,解码「智能问数」如何赋能医药制造
随着中国医药制造业的蓬勃发展,中国已跃居全球第二大医药市场。随着监管政策的深入实施,市场对医药企业在生产、运营、管理等方面提出了更为严苛的要求。2025年政府工作报告明确提出,持续推进“人工智能+”行动,将数字技术与制造优势、市场优势更好结合起来,支持大模型广泛应用。
486 26
|
XML 存储 Java
万字+40张图带你探秘小而美的规则引擎框架LiteFlow
在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。
|
开发框架 前端开发 JavaScript
React 框架的优点和缺点是什么?
React框架作为当前主流的前端开发框架之一,具有诸多优点,同时也存在一些缺点
|
自然语言处理 分布式计算 算法
通过OpenSearch向量检索版进行混合检索的最佳实践
本文介绍如何通过OpenSearch向量检索版,使用稀疏-稠密向量进行混合检索,获得更好的搜索效果。
1980 0
|
算法 搜索推荐 新零售
大促背后的流量利器|手淘push升级 比你更懂你
手淘 App 的 Push 消息大部分时候是作为一个活动通知的通道,对重要活动进行通投引流。那么,经过升级改造后的整体效果如何?在这次的 618 大促中又发挥了什么样的作用?我们在背后有那些发现和思考?本文会逐一介绍。
6753 0
大促背后的流量利器|手淘push升级 比你更懂你
|
算法 搜索推荐 Serverless
打散算法的三种解决方案及其选型场景
打散算法优缺点及选型场景
6740 1
打散算法的三种解决方案及其选型场景
|
SQL 流计算 双11
双十一|又快又稳!闲鱼实时事件规则计算驱动平台
如何在一周内上线50个用户增长策略?
2328 0
双十一|又快又稳!闲鱼实时事件规则计算驱动平台