闲鱼高效投放背后的秘密——鲲鹏

avatar
@阿里巴巴集团
原文链接: mp.weixin.qq.com

背景

闲鱼业务发展迅猛,首页feeds等多个大流量场景成为了各条业务线的产品、运营争抢的流量入口。随着海量的投放需求提到技术团队,陈旧的开发、运营模式的弊端就显现出来了:现有技术难以保障多业务方的pv目标、点击转化效率,无法解决多业务流量争抢冲突,难以对日趋多样的运营玩法快速开发上线,业务试错成本高。我们急需设计一套新的技术方案来解决这些问题。

思路

我们要解决的根本问题是在总流量一定的情况下,如何从全局视角做调控,最大化全局流量转化效率。为了解决这个问题,我们需要从以下几个角度着手:

  • 保障多方投放的流量目标在单一场景下(如首页feeds、搜索结果页)的达成,且在满足投放目标的前提下提升转化效率。

  • 在满足单一场景各项数据指标的前提下,打通多场景对全局转化效率做优化提升

  • 通过工程手段赋能业务方,加速新业务的快速上线、快速调整投放策略,降低业务试错成本。

基于以上考虑,我们决定与达摩院算法团队合作,从工程上打通都江堰算法平台,使得各投放业务能够以极低的成本享受算法红利,保障业务目标达成与转化效率提升。同时,我们设计了一套全新的投放系统,理念是各种运营能力可快速扩展、可组件化沉淀,且特殊素材投放需求支持全新并行化研发模式,给予业务方更多的尝试机会。

鲲鹏系统建设

为了实现运营能力可复用、易管理、灵活投放策略等特性,我们抽象了活动、场景、素材的3级结构,并支持在每个场景下定义多套模板来管理素材。场景是鲲鹏系统中最大的一个概念,它是素材投放的舞台。必须先定义好场景,才能进行针对性的业务开发与素材配置、投放等。以搜索结果页为例,就划分为以下5个场景:长颈鹿运营场景、搜索结果feeds场景、poplayer场景、query词干预场景、背景氛围场景,如下图所示。只有定义好了这些场景,才能决定运营素材的生效范围在哪里。

有了场景之后,我们根据各运营的投放需求差异为各业务创建个性化的素材模板,然后就可以由运营同学在模板约束下自主创建素材。各种已沉淀下来的运营能力(如uv疲劳度过滤、搜索关键词过滤、平台过滤、版本过滤等)都可以由运营同学配置素材时,自主在界面上进行勾选或填写。素材创建完成后,通过创建活动,指定人群、生效时间把素材投放出去,即可完成整个投放工作。

业务在制定投放计划时都是有预期目标的,运营只需要在投放过程中把业务投放目标填写在控制台上,鲲鹏系统就会自动与都江堰算法平台进行协作,帮助业务目标达成及转化效率优化。运营同学通过鲲鹏控制台配置的投放目标(如3天共100万曝光pv)、投放策略(尽快投放、平滑投放、自由投放)及其他各项素材内容,会通过鲲鹏离线数据链路T+1回流到算法平台,供混排算法模型制定次日的全局投放计划。各素材实际的曝光、点击数据包含鲲鹏下发的业务唯一标识,这份数据回流到混排算法平台,用于模型的不断优化迭代。各垂纵算法(业务定制的算法数据提供方,比如直播垂纵算法、求购垂纵算法)经过混排后实际曝光的数据,会通过鲲鹏通用曝光过滤数据链路回流到垂纵算法过曝表中,解决垂纵数据重复曝光问题。

在接入了鲲鹏平台后,用户发起一次请求的数据处理流程如下图:

从上图可以看到数据处理过程中涉及到较多的模块,我们在鲲鹏系统设计过程中尽可能把各种模板通过可扩展的架构实现,把各业务实现的定制功能沉淀为公共组件,横向助力更多业务快速迭代。

整个系统的架构设计如下图所示:

DataFetcher扩展点子系统

鲲鹏的DataFetcher扩展点子系统是能够实现多人低成本参与并行开发的关键之一。各业务线的数据投放需求如果需要从远端服务实时获取(比如根据用户搜索词实时推荐关联导购信息),那么业务开发同学通过继承DataFetcher扩展点基类,在子类的回调方法中调用远端服务获取数据、编写DO转换的逻辑,即可轻松完成业务开发和投放。至于多DataFetcher的RPC并发、资源隔离、指标监控等功能都已经在鲲鹏底层包装好了,对业务同学完全透明,业务开发同学只需要关注业务本身即可。而在诞生鲲鹏系统之前,各业务的投放都需要开发者对投放场景的主干代码极为熟悉才行,导致搜索、首页feeds等场景的投放开发工作只有场景owner一个人能够胜任,成为开发单点资源瓶颈,鲲鹏彻底消除了这个局面。

DataFetcher子系统是鲲鹏“积木化”特性的重要实现。比如闲鱼首页feeds场景需要为新用户投放一批实时推荐的优质权益商品,通过DataFetcher实现。那么以后运营需要在搜索结果页、猜你喜欢页面投放此类权益商品时,此DataFetcher可以直接复用,通过鲲鹏控制台注册到对应场景即可,有效节省了开发资源,也提升了业务上线效率。

过滤器子系统

随着业务对精细化运营的需求越来越高,我们在鲲鹏上打造了一套积木化的过滤器子系统,沉淀成为基础组件供所有业务使用。除了大家熟知的分人群定投之外,我们还提供了分平台(iOS/Android)、分版本、灰度流量比例、搜索词严格匹配、搜索词模糊匹配、页码过滤、uv疲劳度过滤等前置过滤器。如果业务有相关的运营定投需求,可以在控制台上选择对应的过滤器直接使用。

如果业务有特殊的定投需求,现有的过滤器还不能满足,那么可以通过继承MatFilter基类轻松实现特殊的业务逻辑,并沉淀为通用过滤器组件,所有业务都可以复用。如此一来,鲲鹏的过滤器子系统能力将不断积累沉淀,实现跨业务的能力共享。

举一个实际的搜索竹蜻蜓投放例子:游戏运营同学的需求是,当用户来闲鱼搜索“王者荣耀”“跑跑卡丁车”这几个词时,把游戏竹蜻蜓的素材针对特定的游戏爱好者人群、仅在andoird客户端6.6.7~6.7.1这几个版本上投放15%的灰度流量,且每个用户每3天最多曝光10次。这样一个需求中用到了众多的过滤条件,有了鲲鹏的加持,这些过滤器能力都可以无需开发直接复用快速上线。而在此之前,这些需求需要经过prd评审、开发、联调、测试、发布后才能上线生效。

都江堰算法平台

鲲鹏的一个重要目标是借助达摩院算法能力助力业务目标达成,实现全局流量分配调优。我们与达摩院共建了都江堰算法平台,实现了一套通用的混排算法,从工程侧打通离线数据通路与在线服务链路,各业务都可以低成本复用此算法能力。闲鱼首页feeds、闲鱼首页金刚卫上多条业务线投放已经使用了鲲鹏系统提供的通用混排算法能力,在保证业务方达成投放pv目标的基础之上,还把pvctr指标提升了60%~100%,且随着算法模型的不断迭代优化,效果指标还有很大的上升空间。

分组管理与审批流

鲲鹏系统在多个大流量接口落地(首页、搜索SRP、猜你喜欢等),每个接口都有众多业务线的运营同学来进行投放,需要进行合理的分组权限管理来规避错误修改其他业务素材的问题。鲲鹏系统搭建了分组管理子系统,每个业务同学都必须归属于某个业务分组,此分组下的同学都只能看到自己分组下的素材,无法看到其他分组下的素材。创建素材、活动时必须归属于一个分组。这样就实现了有效的人与素材的分组管理。一旦素材或活动的配置发生变化,都会自动触发一个审批流工单,流向本分组的审批人。通过审批流程规避人为失误的风险。

接入鲲鹏后的角色分工

以前老的开发模式中,运营与开发的界线存在模糊地带。由于投放平台能力不完善,很多运营类配置变更都需要通过服务端推开关甚至修改代码来实现。接入鲲鹏之后,开发与运营的角色分工就非常清晰了:

  • 场景开发owenr负责对接鲲鹏系统。

  • 业务开发同学负责在鲲鹏扩展点上实现自己的业务需求。

  • 运营同学负责在鲲鹏控制台上配置素材,把业务开发同学的扩展点实现投放出来,并根据实际需要选择合适的运营基础组件来达到投放效果。

开发实现了业务需求后,后续所有的运营类变更都由运营同学自助在控制台操作完成。如果投放不符合预期,运营可以自助修改、自助下线,全程不需要开发参与。

效果

目前闲鱼鲲鹏系统已经在闲鱼首页feeds、首页金刚位、搜索结果页、猜你喜欢、搜索底纹推荐等多个场景中落地,对各业务方目标达成提供了极大助力,pv转化率提升了60%~100%,uv转化成本降低了40%左右,且还有很大的优化空间。由于多种基础运营组件可以免开发直接复用,DataFetcher扩展点机制使得各业务方开发资源也可以并行投入进来,业务需求总体上线耗时缩短了50%以上。

展望

鲲鹏系统提供的算法赋能、扩展点并行开发、场景素材管理与投放、积木化运营能力沉淀,都对业务投放效果与研发效率带来了非常显著的正面提升。后续我们将会继续深挖垂纵算法通用能力、更灵活的扩展点开发模式、横向打通更多场景优化全局流量调控效果,为业务带来更多增长点。

2020,感谢有你

I will be at your side

抖音:@闲鱼技术

今日头条:@闲鱼技术

● 扫码关注我们