安排!活动素材的亿级用户精准投放

1.背景

  随着闲鱼用户快速增长,运营活动越来越趋于精细和个性化,运营会根据用户偏好为其投放合适的活动,如下图所示在闲鱼首页商品展示时,会在商品的列表中插入活动Banner,通过这些活动banner引导用户进入到相应活动会场,实现会场导流。闲鱼投放系统负责闲鱼运营活动的配置、管理、投放。

主要解决了以下几个问题
  1.配置环境隔离问题,根据开发规范,任何线上业务必须先进行线下环境发布,测试验证通过后再发布上线。所以提供的管理平台需要拥有线上和线下环境隔离的能力。
  2.检索中的性能问题,在同一资源位下会配置多个活动,每次检索时需要把该资源位下的所有活动拉出来,按照条件进行筛选出符合要求的活动,这个过程会随着资源位下的活动增多检索遇到性能瓶颈。
  3.人群管理问题,在活动中会配置投放的人群,每次检索活动时人群作为活动的检索条件,需要验证用户是否属于当前活动的人群,所以需要解决用户和人群关系的管理。
  4.AB测试问题,运营投放的活动往往需要进行AB测试比较不同策略的表现,此时需要提供AB测试的能力。
下面将通过介绍闲鱼投放系统设计、技术方案设计和实现过程,进一步阐述如何解决上面提出的四个问题。

2.系统架构设计

  闲鱼投放系统是一个配置管理和配置检索的系统,换句话讲他不生产任何活动素材,他只是活动素材的搬运工。下面介绍闲鱼投放的系统设计。


  如上图所示闲鱼投放系统共分为了活动素材层、投放配置层、业务流程层和应用层四个层次。
  活动素材层是对在闲鱼投放系统中所有素材源的汇总,目前闲鱼投放中主要汇集了三种素材鲁班素材、马赫素材、TPP素材,鲁班素材提供了用户个性化Banner的能力,他的原理是根据用户的行为获取到偏好的商品,然后把商品图和素材模板组合为一个Banner;马赫素材提供规则圈选商品,他的原理是利用规则引擎把规则转换为SQL语句,然后利用该SQL在商品表中捞出符合规则的商品,同时马赫利用流计算能力对增量商品也实现了实时的规则圈选。TPP素材提个性化商品推荐,例如首页的商品推荐和猜你喜欢的商品推荐,TPP作为个性化推荐平台,可以根据不同的算法实现不同的推荐策略。
  投放配置层是开放给运营能力的汇总,包含活动配置、环境隔离、数据报表三种能力。活动配置是对一个资源位下所有投放行为的具体配置,如下图所示

  每个资源位会投放多个活动,活动与活动之间需要进行排期,每个投放活动中包含人群和素材两类信息,人群用来确定该活动投放的对象,素材用来确定该活动投放的内容,同时在人群下支持AB的能力。环境隔离是为了能够区分线上和线下业务,保证线上的投放环境在线下充分验证后再进行上线。数据报表是对所有投放活动关键指标的数据汇总。
  业务流程层是闲鱼投放系统的关键,主要负责投放活动的检索,根据调用方传入的用户信息和资源位信息,返回该资源位下符合该用户的活动。

  具体的检索逻辑如上图所示,首先在DB中查询当前资源位下的所有在线活动,然后依次过滤每个活动下的人群信息是否符合当前用户,从符合该用户的活动列表中选取一个活动,如果该活动下有AB测试,需要请求AB测试平台获取AB测试中配置的素材信息,最后返回该活动下的素材内容,客户端拿到活动素材后进行展示。
  应用层是对客户端能力的汇总,包括获取素材、素材样式展示、数据埋点。素材展示是直接与用户交互的部分,需要前端提供多种展示样式,数据埋点是为了验证AB策略和收集活动关键指标数据。

3. 技术方案设计

  在上文中我们提到闲鱼投放面临四个需要解决的问题,分别是环境隔离问题、活动检索问题、人群管理问题、AB能力问题。下面将分别从这几个问题出发介绍解决的方法。

3.1 人群管理问题

  人群管理使用的是集团内的奥格人群平台,他为我们提供了人群圈选和人群验证的能力,在很大程度上解放了闲鱼投放的人群管理,下面简单的介绍一下该平台的实现原理。


  如上图所示展示了奥格几个核心功能点,实现原理是这样的,首先平台会提供给用户可选择的规则,然后利用规则引擎把所选的规则,生成SQL查询语句和流计算规则,SQL查询语句用来离线圈选用户和流计算规则用来实时筛选新增用户,通过离线规则和在线规则实现了奥格的人群圈选,在人群验证阶段,首先利用倒排检索的思想,用户和人群的关系利用倒排数据结构标识,该方法解决了单用户与多人群关系验证的效率问题,最后利用多级缓存和热点数据本地缓存的方式解决人群检索RT问题。

3.2 AB测试管理问题

  AB测试是用来验证方案的常用方法,常用的AB测试方案大多是用户唯一属性取模的方式按比例划分用户,但是会面临很多复杂的问题1.按照用户的id进行取模计算,对于未登录用户处理是一个常被忽略的问题。2.测试白名单管理,在AB测试时需要把特定人员划分到特定测试桶里。3.多个AB正交测试,如果有多个AB测试,此时需要正交测试时会出现更复杂的情况。在闲鱼投放中使用了集团的一休AB平台,一休提供基于用户、设备等多维度AB策略,同时支持白名单与正交AB测试的复杂场景,在AB基本能力的基础上提供了数据分析的能力,实现了调用到数据管理的一体化。

3.3环境隔离问题

  解决环境隔离问题主要是为了方便测试,先在线下看效果,然后再把数据配置到线上。为了实现环境隔离迭代两次技术方案。
  首先介绍第一个方案,依照总体功能设计我希望平台中每个模块都可以灵活复用,可以利用已有模块,快速搭建出满足业务要求的投放活动,所以从业务角度进行了抽象,把能拆分的模块尽可能的抽象出来,最终的实体关系如下图所示。从业务逻辑角度共抽象了6个实体分别是资源位(Resource)、活动(Activity)、人群(Crowd)、素材(Data Source)、资源位和活动的关系(Resource Plan)、活动和人群素材的关系(Activity Plan)实体,每个模块之间可以按照下图的关系进行自由组合成一个投放活动。

  在该方案中利用每个实体中的env字段解决环境隔离问题,无论是在投放活动配置还是在检索过程中,只可以利用相同env字段的实体,该方法完全实现了环境隔离,但是在实际的应用中效果却不是很好,因为利用一份数据表中的env字段实现环境隔离,所以线上和线下对应的Resource Plan和Activity Plan关系表中关联的实体ID不同,那么将无法实现线下配置直接拷贝到线上,此时需要在线下和线上两次配置,由于配置过于复杂增加错误风险。
  下面介绍第二个方案,第二个技术方案中对方案一中提出的问题进行优化。具体的设计如下图所示:

  如上图所示,实体对象由6个转换为4个,下面一次介绍这些实体和如何解决环境隔离问题。
  首先介绍新引入的Data Schema实体,DataSchema是由开发同学负责,提供了一个配置好的JSON配置模板,他与Resource进行关联,意味着当前Resource下的所有DataSource都将按照该DataSchema提供的JSON模板进行配置,同时在解析时也按照当前的DataSchema进行解析
  Resource不再区分线上和线下环境,因为Resource无论是线上和线下他总是存在的并且不会改变的,所以区分线上和线下是没有必要的。
  DataSource不再用env字段区分线上和线下环境,利用preData和onlineData进行区分线上和线下配置,由于引入了DataSchema模板,所以彻底解放了DataSource,他不再需要进行繁琐的配置,只需按照DataSchema把所有的需要字段都配置到对应的Schema中即可。这样在线上和线下DataSource是一条数据主键不再改变。
  Activity实体是DataSource和Resource的关系实体,同时包括活动的人群、起止时间等属性。由于DataSource和Resource实体线上和线下环境中主键ID都不会改变,那么意味着Activity可以把线下的配置直接同步到线上,在同步过程中需要做的是如果线上没有配置就插入一条如果存在就更新。那么怎么映射Activity线下和线上的关系呢,在Activity里面引入了mapId字段,线下的Activity实体在mapId中存储线上Activity实体的主键Id,利用这种映射关系实现了线下和线上的映射。


  具体的如上图所示,通过这种表和表之间映射关系,实现了环境隔离问题,同时简化了业务中的实体,让配置更简单更易用。

3.4活动检索问题

  在实际应用中,我们遇到了检索能力的性能瓶颈,根据每次检索时都需要拉出当前资源位下的全部活动,然后按照起止时间、人群作为过滤条件,筛选出满足当前用户的活动列表。以上过程中每次检索都会发生与数据库的IO操作。当资源位和访问QPS增多时,数据库IO操作将成倍数增长,此时会成为检索的瓶颈,所以在以上的技术方案中,需要一个完备的缓存方案支撑检索的正常运行。按照常规的缓存设计方案进行了如下的缓存方案设计。


  所有的查询都是先进行缓存查询,如果未命中再查询数据库,把查询到的数据回写到缓存中。对于所有的更新操作,都是先更新数据库,然后再失效缓存,在更新活动时,需要在失效活动缓存的同时,也要失效该活动对应资源位下活动列表的缓存。
  但是在使用过程中遇到了一个问题,资源位下的活动列表存储采用了kv结构,key为资源位ID,value为活动列表的JSON序列化,当资源位下的活动增多时value也会随着膨胀最后超出阈值,所以把活动对象进行了简化仅存储活动Id和人群Id。优化后检索过程将有所变化如下图所示:

4.总结与展望

4.1总结

  通过以上的整体功能设计、技术方案设计、代码实现,介绍了一个投放平台从设计到实现过程中遇到的问题点和解决方案。目前投放平台已经在闲鱼的用户实时触达、首页feeds投放、淘宝闲鱼小程序投放中使用,完美支持运营根据人群精准投放活动。

4.2展望

  闲鱼素材投放平台但仍有需要持续完善的地方,首先是精准人群的个性化,例如在首页的投放中,针对圈选的人群透出的Banner图片都是一样的,目前我们的投放最小粒度是人群未来将会做到个人。然后是投放能力自优化,目前活动针对资源位的争夺还是利用权重、人群、起止时间作为前置条件,未来将会通过投放数据回流利用算法计算其关键指标实现投放的自优化。同时闲鱼素材投放将对接集团内部的更多优秀的素材提供源丰富闲鱼的活动。


#阿里云开年Hi购季#幸运抽好礼!
点此抽奖:https://www.aliyun.com/acts/product-section-2019/yq-lottery?utm_content=g_1000042901

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql计算年增长率

数据库格式如下: SELECTt1.YEAR,t1.quantity / t2.quantity increase_rate FROMyear_sales t1INNER JOIN year_sales t2 ON t1.YEAR - 1 t2.YEAR结果如下

云+X案例展 | 传播类:九州云 SD-WAN 携手上海电信,助力政企客户网络重构 换新颜

本案例由九州云腾投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。随着网络技术快速发展…

刚刚,阿里开源 iOS 协程开发框架 coobjc!

刚刚,阿里巴巴正式对外开源了基于 Apache 2.0 协议的协程开发框架 coobjc,开发者们可以在 Github 上自主下载。 coobjc是为iOS平台打造的开源协程开发框架,支持Objective-C和Swift,同时提供了cokit库为Foundation和UIKit中的部分A…

zookeeper 单机和集群搭建(windows环境+linux环境)

文章目录一、单机操作1. 下载2. 解压3. 修改配置文件4. 启动二、集群操作2.1. zoo.cfg添加集群配置2.2. 在3台zk数据目录下面创建myid文件2.3. 分别启动3台zk三、伪集群操作3.1. zk-01 配置3.2. 把zk-01复制2份3.3. zk-02配置3.4. zk-03配置3.5. 创建zk数据目录3.6. 在3个zk数据…

天线接收功率计算公式_对讲机天线到底有多重要?通信效果好不好全靠它了!...

天线是任何一个无线电通信系统都不可缺少的重要组成部分。各类无线电设备所要执行的任务虽然不同,但天线在设备中的作用却是基本相同的。任何无线电设备都是通过无线电波来传递信息,因此就必须有能辐射或接收电磁波的装置。所以,天线的第一个…

Java List集合转换相关操作

1、List转换为String字符串&#xff0c;并且指定分隔符 ArrayList<String> keyList new ArrayList<>();keyList.add("name");keyList.add("id");String keys StringUtils.join(keyList.toArray(), " , ");System.out.println(keys…

基于Blink构建亲听项目以及全链路debug项目实时响应能力

案例与解决方案汇总页&#xff1a;阿里云实时计算产品案例&解决方案汇总 本文全面总结了大数据项目组在亲听项目以及全链路debug项目上进行的实时流处理需求梳理&#xff0c;架构选型&#xff0c;以及达成效果 一、背景介绍 1.1亲听项目 亲听项目专注于帮助用户收集、展…

腾讯启动“SaaS技术联盟”联合行业制定互联互通标准

近日&#xff0c;腾讯宣布正式启动“SaaS技术联盟”&#xff0c;联合金蝶、用友、有赞、微盟、销售易、六度人和、道一、肯耐珂萨(KNX)等外部SaaS厂商&#xff0c;以及企业微信、腾讯会议、企点等腾讯内部SaaS产品共建技术中台&#xff1b;同时&#xff0c;工信部信软司相关领导…

WINDOWS 如何关闭3306端口

关闭windows中被占用的端口 1.查找到端口的PIDnetstat -aon|findstr "3306"TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4736 打开任务管理器

mysql innodb索引原理

聚集索引&#xff08;clustered index&#xff09; innodb存储引擎表是索引组织表&#xff0c;表中数据按照主键顺序存放。其聚集索引就是按照每张表的主键顺序构造一颗B树&#xff0c;其叶子结点中存放的就是整张表的行记录数据&#xff0c;这些叶子节点成为数据页。 聚集索…

jsp文字上下居中显示_微信朋友圈又有骚技巧,一键设置居中签名,好友傻眼了...

今日推荐&#xff1a;微信朋友圈签名居中适用&#xff1a;安卓、苹果大家好我是小雷&#xff0c;又来给大家安利微信小技巧了&#xff0c;今天给大家分享如何让你的朋友圈签名居中显示。熟悉微信的朋友都知道&#xff0c;在微信设置了个性签名之后&#xff0c;往往会同步到朋友…

云+X案例展 | 传播类:k3s基于逾百台工控机的应用实践

本案例由Rancher投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。随着国家政策的导向&am…

从大山走出的阿里首席通信科学家,这次要重返课堂

阿里巴巴首席通信科学家谢崇进与学生们交流 “我是一位没上过大学的科学家”&#xff0c;谢崇进在公益课堂上说。讲台下&#xff0c;是450位将要面临高考的乡村学生。 不久前&#xff0c;阿里巴巴首席通信科学家谢崇进通过网络视频的方式开课&#xff0c;向广东省汕头市潮南区…

MySQL 8.0.26 图形化安装教程 (windows 64位)

文章目录mysq8 比mysql5.7快2倍mysql8官网&#xff1a; https://dev.mysql.com/downloads/windows/installer/8.0.html 双击安装mysql-installer-community-8.0.21.0.msi

8s存储最佳方案_MaxiDi, 意大利:自动化物流解决方案

Maxi Di是Selex商业集团的成员&#xff0c;该集团在意大利拥有2500多家门店&#xff0c;是意大利最大的零售商之一。 由于公司的快速发展&#xff0c;其中央仓的存储容量很快面临饱和&#xff0c;公司不得不租用多个外部仓库以满足供应链的需求。 这导致高昂的租金成本以及库存…

程序员如何让自己 Be Cloud Native - 配置篇

前言 这是《程序员如何让自己 Be Cloud Native》系列文章的第二篇&#xff0c;从第一篇的反馈来看&#xff0c;有些同学反馈十二要素太形式主义&#xff0c;不建议盲目跟从。作者认为任何理论和技术都需要有自己的观点&#xff0c;这些观点是建立在个体知识体系逐渐锻炼出来的…

云+X案例展 | 传播类:南方报业数据中台建设,助力“智媒”飞跃发展

本案例由百分点投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。南方报业传媒集团在半个…

读取扫码枪输入_为何超市“扫码枪”这么强?不输密码钱就没了,现在知道还不晚...

点上面蓝色字免费关注!随着互联网的产生&#xff0c;我们的生活也发生了很大的变化&#xff0c;不仅变得更加便利&#xff0c;生活也变得丰富多彩一些&#xff0c;而有了网络之后&#xff0c;移动支付也应运而生&#xff0c;我们的支付方式也发生了很大的改变。如今只要携带一部…

助力深度学习!阿里开源可插拔 GPU 共享调度工具

根据 Gartner 对全球 CIO 的调查结果显示&#xff0c;人工智能将成为 2019 年组织革命的颠覆性力量。对于人工智能来说&#xff0c;算力即正义&#xff0c;成本即能力&#xff0c;利用 Docker 和 Kubernetes 代表云原生技术为 AI 提供了一种新的工作模式&#xff0c;将 GPU 机器…

使用maven 创建Quartz 任务示例_01

文章目录1. 创建maven项目2. 添加Quartz 依赖3. 编写Quartz配置文件4. 编写Job实现类5. 编写main函数&#xff0c;创建Scheduler6. 创建JobDetail7. 编写Trigger&#xff0c;添加JobDetail8. 启动main函数&#xff0c;体验Quartz定时任务Quartz 支持集群&#xff0c;但不支持分…