QCon全球软件开发大会8折优惠倒计时最后3天,购票立减¥1760!了解详情 >>> 了解详情
写点什么

社区内容流量调控系统设计——成本与指标平衡的背后

2021 年 8 月 04 日

社区内容流量调控系统设计——成本与指标平衡的背后

背景

在闲鱼,除了可以进行闲置交易,当你点击第二个 tab“会玩”后,还会发现一个好玩、有趣的内容社区。内容分发作为社区的重要环节,核心目标是实现内容与用户之间的匹配效率最大化,核心指标就是内容的点击率(CTR)和停留时长,这也正是算法推荐模型的优化方向。同时运营在内容分发环节有着各种各样的需求,主要有以下几类:


null


• 活动运营:对于社会热点、节日氛围和品牌活动相关的内容,运营需要进行提前布局,给予更多流量。

• 社区生态:存量的内容由于历史积累的行为数据更多,更容易被算法推荐,导致流量分发存在马太效应,内容新鲜度不够。同时对于擦边球的内容,虽然 CTR 很高,但是从长期平台生态来看,需要限制其流量。

• 流量扶持:对于核心内容创作者、BD 作者,运营需要进行一定的流量扶持,长期来看可以促进内容供给。


如果单纯依赖推荐算法实现以上需求会带来 2 个问题,一是开发成本高,二是有的运营需求短期会带来核心指标的下降,和算法模型的优化目标是冲突的。因此我们设计了一套流量调控系统,面向运营提供灵活的流量调控能力,在内容分发时打通推荐算法,快速实现运营需求,同时兼顾核心业务指标。

系统整体设计

null

运营的需求整体可抽象为两类:

1.针对具体内容的流量调控任务,核心是对具体内容,在具体时间、具体分发场景、针对具体目标人群、实现具体的调控目标(曝光量)。

2.基于规则的流量调控,即当特定事件发生时,自动生成流量调控任务。比如当特定等级的创作者发布了特定质量的内容时,我们在一阶段给与一定的曝光量,如果曝光目标完成后,同时 CTR 指标达到一定标准,会再次给予一定的曝光量。


针对上面的需求,我们设计了策略链路动态创建具体调控任务,然后通过调控链路实现调控任务的管理和调度,同时调控链路也支持运营手动创建调控任务。


分发链路则打通了推荐系统,在完成调控任务的同时,尽可能的优化核心指标。


流量数据处理服务负责采集用户的曝光埋点数据,为流量调控模块提供实时的调控任务状态更新,同时沉淀数据资产,供流量洞察分析使用,最终在流量策略中心运营后台为运营提供决策支撑。限于篇幅,这部分内容后续有机会再和大家分享。

具体方案实现


策略链路

策略事件接入将各种异构的消息事件进行归一化处理,形成标准的策略事件,供后续的各种策略执行器进行订阅。


null

运营的各种调控策略被抽象为标准的策略处理器(StrategyManager),当监听到策略事件后,策略路由器将其转发给订阅了该事件的策略执行器,策略执行器处理事件,创建相应的调控任务。


null

调控链路

调控任务生成后,经过任务调度,实时同步到算法所需的调控内容池(采用图数据库存储),进行后续的内容分发。当内容在指定的分发场景曝光后,数据采集模块会实时采集客户端上报的用户行为日志埋点,进行 3 部分操作:

• 通过处理产生曝光、点击等数据指标并存储。

• 产生干预消息,实时更新调控内容池。

• 判断指标是否达到目标曝光值,产生任务结束消息,结束任务调控。


数据采集需要满足高吞吐、低延时,采用流处理平台实现。


null

分发链路

• 召回:推荐系统在收到前台请求的时候,同时从调控内容池(冷启动内容池、保量内容池)以及大盘正常召回链路进行个性化召回,保证即使是调控内容,也和用户兴趣相匹配。

• 排序:推荐系统会通过相关的核心指标预估模型,以及特定类型调控任务(如冷启动)的算法模型,对内容进行排序。投放系统会根据运营设置的优先级,进行排序。

总结和展望

目前实现了运营保量投放能力,以及特定创作者的内容冷启动策略,其中

• 运营手动保量投放调控日新增任务数 30+,调控曝光百万级别。

• 针对特定作者的冷启动调控业务实现了对于优质创作者的流量扶持,极大地激励了创作者积极性,日均发帖量提升 14.4%。


后续针对流量调控系统将进行进一步的能力升级:

• 多目标调控,除曝光量外增加点击,甚至涨粉能力。

• 策略配置化。当前通过代码的方式实现运营策略,后续可实现调控策略配置化,热更新。实现运营策略的 0 代码、SOP 化支持。


本文转载自:闲鱼技术(ID:XYtech_Alibaba)

原文链接:社区内容流量调控系统设计——成本与指标平衡的背后

2021 年 8 月 04 日 13:00908

评论

发布
暂无评论
发现更多内容

零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品

代码制造者

编程 低代码 行业资讯 零代码

以区块链为基础 通证经济是下一代互联网的数字经济

CECBC区块链专委会

区块链 落地应用

learn go with tests 学习笔记(三) 指针和错误

半亩房顶

golang golang新手

learn go with tests 学习笔记(七)反射

半亩房顶

golang 反射 golang新手

RocketMQ源码解析-开篇

Edison

RocketMQ 中间件

数据采集能力受限?企业数字化运营如何迈出第1步

易观大数据

真正的勇士,会跨过六道裂谷,奔向云与AI的彼端

脑极体

从数据中台到AI中台,企业到底要建什么中台?

脑极体

learn go with tests 学习笔记(四)依赖注入

半亩房顶

golang golang新手

《effective-go》 学习笔记

半亩房顶

golang

“啰嗦”是成事唯一正确的方法

霍太稳@极客邦科技

团队管理 个人成长 团队协作 沟通

我是如何参与硅谷顶级开源项目并赚得2500美金

阿水

硅谷 Minio

2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》

谙忆

learn go with tests 学习笔记(五)并发

半亩房顶

golang golang新手

关于微服务架构思考

Arthur

nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

谙忆

learn go with tests 学习笔记(六)进程同步

半亩房顶

golang golang新手

疫情之年 下半年区块链应用落地会加速么?

CECBC区块链专委会

区块链 场景应用落地

MySQL事物-学习笔记

Edison

MySQL 数据库 数据库事务

learn go with tests 学习笔记(二) 数组与切片

半亩房顶

golang golang新手

Python爬取微信公众号文章保存到数据库

wjchenge

消息疯狂堆积!RocketMQ出Bug了?

Edison

RocketMQ 中间件

LeetCode题解:24. 两两交换链表中的节点,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

原来你是这样的B+树

Java技术宝典

B+树

政策加持迎来区块链技术应用“红利期”

CECBC区块链专委会

用户体验(UX)设计≠用户界面(UI)设计

刘华Kenneth

敏捷 设计 UX 用户体验

500行代码写一个俄罗斯方块游戏

程序员生活志

话题讨论 | 特朗普正式封禁微信,iPhone 和微信二选一?

InfoQ写作平台官方

写作平台 话题讨论

Executor看不懂?教你如何盘它

Edison

线程池 后端开发

踩坑记 | Flutter升级影响了NestedScrollView?

哈利迪

android

你为什么还在用存储过程?

架构师修行之路

数据库设计 架构设计

移动应用开发的下一站

移动应用开发的下一站

社区内容流量调控系统设计——成本与指标平衡的背后-InfoQ