作者:alieyu 腾讯VTeam技术团队高级工程师 导语 | 信息流产品的内容分发方式包括:推荐、投放、push、订阅等,其中的"推荐"是最为主流,也是大家最为熟知的分发方式。但,在实际的信息流产品中,通常是多种分发方式相辅相成,共同打造良好内容生态,共同提升用户体验。本文将以【投放】为主线,给出个人对内容分发场景的一些浅薄思考和理解。
本篇将对如何设计与实现投放系统展开讲解,关于投放系统上篇可点击查看:把用户当作女朋友,你真的知道她喜欢什么吗?(上)
投放系统架构
如前所述,投放是连接B侧作者,和C侧用户的中介。因此,一套广义/完整的投放系统,至少/主要包括以下3部分:
下文,将按照需求/物品流向,即DSP -> TFX -> SSP的顺序,对各子模块的设计和实现进行具体分析。
需求方平台(DSP)
DSP主要包括需求(投放任务)的接入和管理两部分,是整个投放系统的入口和触发点。
投放需求的来源通常是多方面的,比如:
在技术实现层面,由于需求来源很多,包括运营系统、创作者中心、C侧客户端等,因此在投放任务(需求)接入时,需要注意通用性方面的考虑,便于灵活快速的接入多端/多场景的各类投放需求。
投放需求(或投放任务,下同)的管理模块,和常规类CMS系统等,并无太大差异,主要就是增/删/查/改等操作(好吧,应该是我自己太肤浅了!)。
任务熔断
除CURD常规操作外,DSP的一个特殊模块是任务熔断。
投放,是一次交易活动的具体执行过程,那么这个执行过程到什么时候结束呢?这里涉及到的就是熔断策略问题,例如:
简单的说,熔断的基本原则就是,要求在规定的时间内,保质,保量 的完成B侧下发的投放任务。
当然,保质、保量,本身就是一对矛盾体,因此,这里是一个平衡问题。在实际进行中,如何提升投放效果,保证投放完成率,同时兼顾三方利益,一直是我们追求的优化目标。道阻且长,吾欣然往之。
投放中介(TFX)
连接B侧和C侧的投放中介,也就是狭义上所说的投放系统, 是整个投放体系的关键部分,也是一次投放交易的决策和兑现机构。一次投放任务的下发-执行的主要流程如下:
投放中介,可分为对接B侧的离线,和对接C侧的在线,两个子系统。以下将对两部分进行具体分析。
离线子系统,是直接和需求方平台(DSP)对接的,为DSP提供投放任务的排期决策服务。如前所述,投放系统通常需要接入来自运营/号主等多方的各类投放任务。如此多的投放任务(50w级),如何保质保量的完成,这不仅是在线兑现的模块的问题,还必须依赖离线的排期决策。
任务排期,即在投放任务的生成阶段,对该任务进行排期。简单说:相当于货(流量)仓调度员,当有人来谈生意(下发投放任务)时,需要根据自己手上的货物,进行实时的评估,然后决定要不要/能不能承接这一单生意,并为后面的兑现环节做好必要的准备!!。
排期的主要作用/目的:
任务排期的几个关键步骤依次如下:
回顾一下,你带女朋友去超市买雪糕的场景即可:
你:老板,有东北大板的雪糕卖吗?
老板:噢,我看下....有,你要几根嘛?
你:给我妹子一根就好了
老板:来....
一些具体的排期策略:
投放任务:一个短视频要在48小时内,投放10w的曝光量
当然,具体的排期策略,在不同的产品/业务场景,或者同一产品的各阶段,都会有很多差异,这里只是列举一些基本/常用的策略,以供参考。策略,永远在优化的路上...
库存管理是排期策略得以实施的底层支撑。库存管理,类似一个忠诚&勤劳的仓库管理员。需要对流量库存的已使用、剩余、时间分布、定向分布等了如指掌。为上层的排期决策,提供细致准确的数据信息支持。
流量库存的数据,需要从在线服务进行抽样/采集,从而得到各个业务场景的具体流量分布情况。
在线子系统,即投放任务的真正执行/兑现机构。在C端用户请求进入时,根据任务的定向条件,或者lookalike智能扩散等,召回与用户匹配的任务,曝光给该用户,即兑现一次该任务的曝光流量。
在早期,由于投放任务量较少(1w条以下),所以一种简单粗暴且高效的方案是,在线过滤匹配即可。当用户请求进入时,循环遍历投放任务列表,把任务的定向条件与用户画像进行匹配,由于任务量很少,耗时通常在50ms以下,完全满足需求。
当任务量不断增加,则需要建立召回索引,提高在线检索性能。
定向召回的基本流程和架构,与常规的推荐召回是一致的,包括数据源接入、数据预处理、离线索引构建、在线检索等4个主要部分。架构图如下:
值得注意的是,在具体实现上,传统的倒排索引方式,无法直接满足定向召回的需求。其根本原因在于,推荐与投放是有本质区别的:
例1(错误示范):按推荐的传统倒排索引进行召回
例2(正确示范):按改良后的定向索引进行召回
改良的关键点在于,补齐/显示化所有需要匹配的定向维度,以解决召回结果被放大的问题:
经过补齐后,在检索时,就会检查到任务要求的所有定向维度,从而得到正确的召回结果。
当然,补充操作会带来一些额外代价:
这些额外代价,也可以通过继续优化去缓解,比如增加二级索引等,来解决在线检索的性能消耗问题( 具体细节,后有专文介绍 )。
凡是我们知道的问题,都不是问题;问题是那些,我不知道有问题的问题。
定向投放,只能解决明确知道目标用户群体的情况。而很多时候,运营/号主,并不知道他们该把这边文章投放给什么样的用户群体。对于这种情况,就需要一种更加智能的投放方式了,比如基于lookalike的人群扩散方式。
在智能投放(自动化人群圈定)场景下, 即根据已有的少量种子用户,通过算法模型来计算其他用户 与 种子用户的相似程度,从而得到一个与种子用户群体相似的,更大的用户群体。
在投放时,即可将该“相似的,更大的用户群体”作为投放任务的目标人群,进行投放,从而解决定向条件未知的问题。
在具体实现中,这里也涉及很多方面,比如:
供应方平台(SSP)
整个投放系统,供应/售卖的是C侧用户带来的流量。流量,即资产。因此,供应方平台解决的就是,如何通用灵活的接入C侧流量的问题,尤其在类似一些多端多场景的情况。
当然,如果要建设一套通用/开放的信息流投放平台,自然就需要接入更多的流量场景,并且要灵活快速的支持各场景的随时下线和新增上线等需求。
供应方平台涉及的相关技术点,主要是常见后台接入层的系列挑战,如: 一些需要考虑的基本问题:
由于这些挑战点,与投放本身关系不大,因此就不再具体展开讨论。
投放系统透视图
到此,对一套投放系统所涉及的最主要模块进行了逐一的分析。当然,还有很多子模块,如连接离线与在线的任务分发模块,负责播放控制的Pacing调控模块,以及投放效果管理平台(TMP) 等等,这些遗留部分,后续争取找机会分享补齐(如果你相信的话)。
在此给出一张一般/通用的投放系统的完整架构图,以供参考:
总结与展望
沿着,为什么要投放,投放是什么,怎么做投放,这样的路线,对一般意义上的 通用的信息流投放系统,进行了深入浅出的 较为完整的 讨论(自认为如此?)。
一套完整的投放系统,所涉及的点确实很多,包括:B侧/平台/C侧, 管理端/后台/算法/客户端等诸多参与方。本文,仅根据个人在业务实践中的理解,斗胆分享一些浅薄的所思所想,以供参考。部分术语并非十分严格/准确,部分思路也未必正确,欢迎各位随时交流讨论 / 批评指正。
由于篇幅 / 时间所限( 其实还是懒),文中抛出了诸多悬而未决的问题点。仅 "具体细节,后有专文介绍" 这种骗人鬼话,就出现了5+次,在此,有必要对看到3+次的你,表示感谢和歉意。
最后:
感谢团队里一起建设投放系统的小伙伴;
欢迎各信息流的相关团队/同学,进行更加深入的讨论和协同共建等
近期热文推荐
你“在看”我吗?