作者:闲鱼技术——思洋
背景
双十一购物节是互联网营销的典范,经历这些年,伴随一次次营销活动的失败与成功,阿里巴巴沉淀出一套互联网营销技战术打法。就像咏春拳有三板斧,相声有四门功课。互联网营销也有四要素:招、选、搭、投。“招”即招商,“选”即选品。招商选品是营销活动的起点,解决的是商业供给问题,目标是保障活动有足够的、优质的商家、商品、价格、权益等可供给到前端消费者侧。“搭”是搭建,即构造出营销活动的“场”-活动页面,解决的是消费者侧展示问题。“投”是投放,即将招选出来的物料有策略的给到消费者,目标是人货场的高效匹配。
源起
闲鱼会玩社区是以分享个人趣味生活为主的内容社区,用户可逛可玩,有精神消费。社区业务有不少场景需要接入投放能力,如帖子流,圈子,话题页等。随着业务逐步发展,对于投放系统有了更新和更高的要求,包括:
- 多资源位通投能力
支持一个任务同时投在多个资源位,实现联动效果,提升用户体验
- 更强大的定投能力
区分版本,平台,地域,自定义参数过滤等
- 实时投放效果反馈
任务数据实时反馈,实现更及时的决策和精准的流量调控
- 投放页面定制化,动态化配置
投放配置不用编写代码,提高运营效率,准确率
- 系统维护扩展
原有系统处于生涯末期,已不再维护和扩展
基于以上原因,我们决心DIY一个理想的投放系统。小编有幸参与了此系统的设计和建设。由此我们看下营销第4门功课的技术实现。
4W1H
投放系统可以用4W1H模型来描述。即将合适的物料(What),在合适的时间(When),采用合适的策略(How),在合适的地方(Where),给到合适的人(Who)。该模型是投放系统的基础,我们所有的架构设计都围绕着这个模型推演。
从领域模型视角,投放系统有如下的抽象:
资源位
资源位对应页面上的一个坐标,是资源(物料)最终展示的位置。资源位包含如下关键信息:
- ID
唯一主键,根据此ID召回资源位关联的物料。
- 状态
正常、删除。删除状态的资源位不能透出任何物料。
- 仲裁规则
资源位可透出多任务时的选择逻辑。如“赛马”-按照物料的指标分数基于一定时间规则排序。如:对商品池每隔10分钟按照成交排序。此方式可保证用户总是看到最好的物料。再如:权重随机-按照投放任务的权重值随机透出,类似抽奖。此方式可保证流量按照权重均分。
- 物料模板列表
同一资源位可支持透出多种不同类型的物料。如闲鱼会玩首页Feeds流资源位,可支持透出帖子,话题,圈子等物料。
- 资源位页面地址
用于测试环境,扫码验证
- 资源位疲劳度
疲劳度指的是此资源位透出物料的频率,高于此频率视为“疲劳”,则停止透出。如疲劳度配置为1天2次,当用户同一天在此位置看到2次投放之后,就不继续透出投放任务了,直到下一天重新开始。配置疲劳度的目的是防止打扰用户。
- 资源位流量控制
流量控制的逻辑和疲劳度类似,只是控制的维度是资源位总的曝光,如果配置为3天100W曝光,则3天内若达到此曝光值,就不继续透出任务。流量控制的目的是防止过分消耗大盘总流量。
物料模板
对于大多数场景下投放的物料,格式都是类似的。如:商品,帖子,横幅。根据DRY原则(Don't Repeat Yourself),闲鱼投放系统将这些物料标准化为不同的物料模板,后台配置任务时,只需选择相应的模板,填入物料内容即可,省去了设计物料格式的工作。在模板的生成环节,为了提高开发同学使用体验和效率,前端开发了组件化,可拖拽的界面,并且加上数据校验部分,提高数据准确率。
物料
选定了要投放的模板后,在模板中填入相应数据,即生成一份投放物料。物料可能是招商选品筛出来的货,可能是一个品牌,一场直播,一项权益,也可能是消息,互动,文章等。“万物皆可投”。
投放任务
投放任务是整个投放活动的核心和出发点。任务由这些信息组成:
- ID
唯一主键。根据此ID做投放数据效果分析。
- 时间
开始时间,结束时间。定时时间,如每周一,每晚8:00-10:00等。
- 资源位
一个投放任务可同时投在多个资源位上,实现多场景联动的效果。
- 物料
物料归属于相应的投放任务。
- 权重
权重越高的任务,透出的几率越大,统计上可获取更多的流量。权重的最高级别是“必出”,即如果此任务满足透出条件,则不考虑其他任务,直接透出此任务。
- 受众人群
只对圈选出的特定用户透出。实现上依赖于阿里巴巴强大的人群服务平台,基于各种不同维度筛选出目标用户,如对宠物感兴趣的闲鱼社区30天内低活跃度的用户。
- 平台规则
可限定目标APP的平台,如仅投安卓手机;也可限定目标APP的版本范围
- 地域
圈定任务可被透出的用户地域范围。如只投给杭州市发来的请求
- 疲劳度
即用户看到此任务的频率限制,若是资源位维度疲劳度,则是任务在其关联的每个资源位的透出频率
- 流量上限
当任务达到规定的曝光上限后,就不再透出
- 标签规则
任务的创建者还可自定义标签逻辑,前台调用者需传入相应标签,且满足规则(表达式匹配通过),才可透出
投放系统架构
前台业务层
投放系统架构如上图所示。在前台业务层,分为运营后台部分和前台场景部分。运营后台目标用户是运营及开发同学,包含资源位,任务,权限,模板,物料管理和数据分析模块。前台场景面向消费者,分为外投场景和内部分发场景。外投场景适用于增长项目,为大盘从外部拉来流量。内部分发场景对大盘流量有消耗,可用于培养心智,构建氛围等长期目标。
业务服务层
业务服务层,后台链路包括:
- 租户管理。支持多租户隔离,监控,单一租户限流等。
- 模板设计。组件化,可拖拽自动生成数据模板。
- 校验器。数据格式校验
- 搜索。支持多维度搜索指定任务和资源。
- 预览。预发环境,扫码预览测试功能
- 报表。任务数据效果统计
- 审批。 权限管理,防止越权操作
- 规则定义。自定义任务透出规则,前台传参需满足相应规则才可召回
- 定投。圈人,圈地域,时间,流量,平台,版本等
前台链路即投放任务的透出链路。是根据资源位召回最合适的任务和物料。前台链路图如下:
前台场景对性能要求较高,需要支持数万级的TPS,同时保证接口RT在10ms以内。这样才不会影响调用方接口的性能。为了达此目标,前台链路使用了两级分布式缓存,第一级存储资源位和任务ID的对应,缓存异步更新,存储N分钟滑动时间窗口内进行中和将开始的任务。第二级缓存用于加速数据库查询。对于稳定性有强要求的业务方,为了防止空数据,前台场景还可设置多重兜底,如果前台数据源因为各种原因挂掉,可兜底切换为从第三方数据源(如配置中心)拿提前准备好的兜底数据,保障消费者体验。
服务基础层
分布式缓存服务用来提高前台链路访问性能和稳定性。消息服务用于异步更新前台缓存。数据连接服务用于数据库操作。搜索服务用于多维度召回投放任务。流计算服务用于实时数据统计。人群服务用于圈选目标用户。地域服务用于圈选目标地域。
数据库
投放任务,资源位,物料模板和物料等结构化数据存储在MySQL数据库中。投放任务多维召回由Opensearch搜索引擎实现。Opensearch即阿里云开放搜索服务,是基于阿里巴巴自主研发的大规模分布式搜索引擎平台搭建而成。实时埋点数据统计结果存储在Lindorm数据库中。Lindorm是一款适用于任何规模、多种模型的云原生数据库服务,支持海量数据的低成本存储处理和弹性按需付费,提供宽表、时序、搜索、文件等多种数据模型,兼容HBase、Cassandra、Phoenix、OpenTSDB、Solr、SQL等多种开源标准接口的数据库。Tair 是一个高性能、分布式、可扩展、高可靠的Key-Value结构存储系统,专注于高速缓存场景。投放前台数据存储在Tair中。
数据驱动
任务上线,数据上线
依赖于阿里巴巴实时流式数据处理技术,我们可以实时统计任务点击曝光等指标。处理链路如上,通过日志平台,采集用户的行为日志,并发送至Blink节点做数据计算与处理,处理完成的统计数据落盘。
流量策略
有了任务实时数据效果反馈,就可以依此控制任务的流量。包含:资源位维度流量控制,如限定此资源位M天内可透出多少PV流量,防止对大盘流量过分消耗。任务维度流量控制,如控制单个任务M天内可透出多少次,超出则不透出。还可引入赛马机制,如当一次请求命中多个投放任务时,按任务点击率降序排列,点击率高的任务优先透出。对于新上的投放任务,没有积累足够的数据指标,直接赛马不占优势,为了防止马太效应,流量策略还可加上对于新任务的扶持,即冷启动策略。例如对于新任务,平台固定先给5000曝光,积累了数据后再进入大的流量池和“成熟”任务做竞争。
接入案例
闲鱼社区增长项目-异形引导
用户进入闲鱼首页,当满足一定行为策略,如浏览到第一个会玩帖子且有停留时,屏幕下方会玩入口的图标会变为用户兴趣相关图片或动图,引导用户点击进入“会玩”特定栏目。经多次迭代尝试,实验桶相比对照桶渗透率相对提升56.1%。在会玩浏览的人均时长相对提升30.4%。
闲鱼会玩热聊板块
闲鱼会玩首页“今日热聊”区域,根据用户画像,个性化透出相关话题或页面链接。丰富了会玩的产品形式,承接了多元用户社区需求,带来整体留存率提升。
展望
投放系统下一步计划在如下方面进行扩展和优化:
- 接入算法能力
利用算法对用户和物料的理解,补充固定规则灵活性的不足,优化匹配效果。
- 实时行为干预
根据用户实时行为动态匹配最合适的任务
- 历史数据积累
历史数据沉淀为投放策略打法,帮助运营决策
结语
"一代人有一代人的使命,一代人有一代人的担当"。软件工程上更新迭代的速度远高于人类代际的更迭,每个系统都是站在更早系统的肩膀上,进步了一点点,去担当崭新的需求。看了这篇文章的你,是否有多一点的信心,去自己练习下营销的第4门功课呢。