一个优秀的Push平台,需要经历怎样的前世今生
简介: 没有什么是hermes解决不了的
作者:闲鱼技术-剑辛
对闲鱼的用户来说,Push更是与用户息息相关,因为闲鱼商品库存只有一件,商品的时效性很强,所以当用户关注的卖家上新、浏览的商品发生降价或者是平台为用户找到一批高性价比商品时,用户都期望尽快被通知。Push已经成为用户与闲鱼平台联系的重要纽带。
本文将以技术同学视角,介绍闲鱼Push从离线手工投放的1.0版本进化到智能个性化的2.0版本的发展过程,详细说明遇到的问题和技术方案选型,以期给读者带来一些思考和解决类似问题的思路。
一、闲鱼Push1.0
当闲鱼开始all in无线后,平台需要把与用户相关的优质内容推送给用户,便于用户快速找到想购买的商品和感兴趣的内容。平台亟需一个Push产品化方案保证将优质内容以Push的形式触达到用户,提升用户体验。基于这样的前提,闲鱼Push1.0方案的主要思路如下:
计算Push用户名单
- 计算与用户强相关的优质Push场景,根据场景得到用户名单
- 垂直业务根据用户画像等条件,圈选业务的目标人群
- 基于场景疲劳度过滤每个用户能发送的场景列表
- 对每个用户的场景列表进行全局择优,挑选点击率最高的场景作为目标场景
闲鱼Push1.0方案简单明了,流程清晰,而且离线流程方便监控告警和问题排查,满足当时的业务需求,上线后运行稳定。在很长一段时间内1.0方案的核心架构和流程没有太大变更。但随着业务发展,闲鱼Push1.0方案的一些弊端开始暴露,包括
- Push用户名单计算不够实时
- 消息卡片样式不够丰富
- Push触发时机单一
- Push场景比较少
这些问题最终导致Push点击率无法继续提升,触碰到1.0方案的天花板。为了解决这些问题,我们对闲鱼Push系统进行几个方面的优化升级,并最终重构了闲鱼Push系统。
二、闲鱼Push1.1
为了给Push用户提供更好的用户体验,丰富用户Push场景,我们优先考虑从消息样式、触发时机和用户场景几个方面优化扩展现有闲鱼Push方案,优化项主要分为消息feeds流升级、Push时间个性化、实时Push等。
2.1、消息feeds流升级
Push会沉淀到客户端的消息板块,而消息板块也是用户进入闲鱼后浏览最频繁的板块之一,消息样式最开始只支持文本消息和图片消息,这类消息样式的问题是对用户来说有效信息曝光少、而且消息样式单一。为此我们对消息展示形式进行升级,通过feeds方式展示消息,提升有效信息曝光率,优化消息样式,打造消息板块的用户心智。feeds流升级上线后效果明显,因为用户感兴趣的内容相比透出更多,UV点击率和用户次留相对提升都很大。
第一条为feeds流消息,之后是图片消息,相对来说,feeds流消息可以透出更多有效信息
2.2、Push时间个性化
闲鱼Push1.0方案主要支持的是定时批量Push,实际的运行情况是定时批量给目标用户发Push。Push触发时机比较单一,人为造成流量较为集中,增加系统稳定性风险;另外统一的触发时机并不适用于所有用户,存在对部分用户打扰的情况。
针对这种情况,我们优化了Push触发时机,由算法根据用户行为计算预测每个用户的触发时机。算法将用户相对平均的分在一天之中,在用户相对活跃的时间段将Push触达给用户,减少对活跃用户骚扰,也使得Push触达的用户群体分层更加合理健康。
2.3、实时Push
闲鱼Push1.0方案主要覆盖的是用户相关离线场景,对用户实时行为产生的场景覆盖不够,而且这类场景较离线场景相比实时性更高,对用户来说相对更重要。针对这个问题,我们增加了对实时场景覆盖,将用户行为抽象成关系模型,以IFTTT作为系统整体触发机制。当关系一侧的用户行为发生变更后触发对另一侧的触达,这类场景实时性更强,和用户强相关,提升用户Push场景丰富度,增强用户粘性。实时Push场景上线后Push点击率相对离线场景提升1倍以上,具体技术细节可参考闲鱼IFTTT。
以上是我们针对闲鱼Push1.0的功能优化和增强,通过这些能力也扩展支持了更多场景和业务,最终组合在一起成为闲鱼Push1.1版本。
三、闲鱼Push的今生
闲鱼Push1.1整体上线后极大提升了用户Push场景丰富度和用户体验。随着对Push和用户理解的深入,我们发现还有优化提升的空间,包括:
- 平台视角不够,现有的优化更偏向点对点,需要从闲鱼Push平台视角将这些点连成线形成合力,产生1+1>2的效果
- 现有闲鱼Push流程的本质还是离线计算,算法无法进行更加实时的个性化和全局择优,对用户体验有一定影响
- 场景配置不够灵活,新增场景成本高,制约了丰富用户Push场景的进度
基于这些原因,我们最终对闲鱼Push系统进行重构和升级,打造闲鱼Push实时智能投放平台-Hermes。Hermes取自希腊神话,他聪明(智能)、行动敏捷(快)、多才多艺(多种触达),最能契合闲鱼Push实时智能投放平台的使命愿景。
3.1、逻辑架构
Hermes架构与闲鱼Push1.0完全不同,以实时为目标,在场景素材准备、算法全局调优和Push发送等关键环节实现实时或准实时,提升Push内容时效性;另外从平台角度出发,将Hermes分为配置中心、匹配中心和任务中心,各个子系统定义交互的数据协议,彼此没有强依赖。三个子系统的作用分别是:
配置中心
配置中心负责维护平台核心数据模型,给业务方提供页面操作配置Push场景和素材,降低业务方接入成本;并且把配置数据以离线全量和实时增量的方式同步给算法模型,作为匹配依据。
匹配中心
匹配中心又称为算法择优中心,匹配中心负责训练算法择优模型,根据场景和素材配置为每个用户个性化筛选,根据每个素材历史点击率数据排序,根据用户近期行为召回用户最有可能感兴趣的素材和个性化内容。
任务中心
任务中心负责Push触发时机和实际触达,任务中心核心支持定时触发、实时触发和时间个性化触发,目的是对Push触发方式收口,为不同的业务和场景选择不同触发方式,帮助业务实现业务目标。另外是对触达进行收口,方便平台编排触达计划,包括触发时间和发送量级,保证达到业务目标同时不会对Hermes和业务下游系统造成过大瞬时压力。
3.2、业务效果
Hermes平台上线后效果非常明显,主要表现为:
- Push点击率相对提升达到两位数
- 用户场景覆盖量直接翻倍
- Push点击激活的DAU也超过历史最高水平
四、总结
本文介绍了闲鱼Push从前世离线计算的1.0版本,发展到多项功能优化的1.1版本,最终进化成今世的实时智能投放平台的全过程,其实闲鱼Push的每个阶段都契合当时业务发展需要,但对于用户体验的无限追求最终产出了闲鱼Push实时智能投放平台-Hermes。希望这种方式可以帮助读者理解闲鱼Push发展的业务背景和技术方案选型考量。接下来我们还会有一篇文章详细说明Hermes的技术方案,包括系统架构、技术选型、性能优化和稳定性保障措施,欢迎大家继续关注。
一个优秀的Push平台,需要经历怎样的前世今生相关推荐
- 技术干货 | 闲鱼:一个优秀的 Push 平台,需要经历怎样的前世今生
简介:mPaaS 消息推送服务,快速集成多家厂商 Push 通道,有效提高用户留存率,提升用户体验. 编者荐语: 点击这里,了解 mPaaS 消息推送服务,快速集成多家厂商 Push 通道,有效提高用 ...
- Vertica系列:从一些细节看Vertica为什么是一个优秀的数据仓库平台
=========================================== 对象名称可以长到128字符 ========================================== ...
- 道器相融,由Angel论一个优秀机器学习平台的自我修养
*本文首发于 AI前线 ,欢迎转载,并请注明出处. 摘要 2017年6月,腾讯正式开源面向机器学习的第三代高性能计算平台 Angel,在GitHub上备受关注:2017年10月19日,腾讯T4专家An ...
- 基于php+mysql的优秀毕业设计展示平台设计
为充分展现高校毕业生毕业设计的风采,促进其在校内以及校外的交流展示,积极建设一个优秀毕业设计展示平台是提高高校教学质量的必要手段..本文采用PHP技术开发了基于Web的优秀毕业设计展示平台,并且对该系 ...
- 云巴创始人张虎:一个优秀的软件工程师必然是全栈工程师
张虎,云巴 (yunba.io) 创始人兼CEO,致力于为开发者提供优质云后端服务.他有十几年的软件研发经验,精通嵌入式系统.服务器端架构.虚拟化等.张虎曾就职于华为.Oracle,他是Oracle ...
- 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?
怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 ...
- 一个优秀开发者如何才能变得伟大?
一个优秀开发者如何才能变得伟大? 还是先不想如何变得伟大:一个不错的开发者如何变成一个优秀的开发者? 从第一步到第N步并没有确定的路径,哎呀,甚至不知道第N步是什么. 能逻辑思考的都明白,缺乏一个确定 ...
- 移动端对比后端逐渐“式微”?在互联网大环境下如何避免久当生锈的”螺丝钉”去成为一个优秀的Android开发者?
知乎提问:最近看到一些技术博客,说所有公司都意识到了,小程序相比传统的安卓/IOS/Web三线作战的优势.真实情况也是如此吗? 这个"式微"的理解其实可以有很多种解读,这里最直接的 ...
- 思考:如何打造一个优秀的研发体系
做了几年的产品,刚混熟了产品圈,今年又临危受命负责整个研发团队,对过去分散式的研发体系(研发在各事业部)进行整合,研发统一管理. 过去我们一个产品一个产品的突破,逐步形成了多产品线的研发模式,这种模式 ...
最新文章
- 微生物组数据库: 一站式环境基因组学数据云平台更新啦!
- Exchange Technical community discussion group
- IntelliJ IDEA 常用快捷键和设置
- .net pdf转图片_pdf2image类库实现批量pdf转图片
- 放弃Venn-Upset-花瓣图,在线拥抱二分网络
- jdbctemplate 批量删除_10秒3步批量去除PDF水印
- SparkStreaming之mapWithState
- Tcl Tutorial 笔记7 ·for incr
- Resource stopwords not found. Please use the NLTK Downloader to obtain the resource的解决
- MapStruct 入门使用
- 斗鱼弹幕服务器未响应,斗鱼看不到弹幕的解决方法步骤
- vep加密视频转换为mp4提取破解录屏教程
- 我国留学低龄化趋势显著-家长失望国内应试教育-留学-低龄化-教育改革
- php 模拟登陆微云,微云 - HHTjim'S 部落格
- 读书笔记1|深度学习入门:Machine Learning Yearning
- mysql 自动备份数据库数据到另一台电脑上(u盘或者移动硬盘上)
- SAP官网学习教程(1)申请个人学习环境
- 防热服的设计数学建模_2018数学建模A题优秀论文:高温作业专用服装设计
- 《MATLAB面向对象程序设计》
- 海康RTSP流转RTMP并推送至Web端展示
热门文章
- 12个让您震撼的Linux终端命令
- corutine rust_Rust学习笔记#5:函数和trait
- 浏览器内存不足导致页面崩溃_深度精读:浏览器渲染原理 [8000字图文并茂]
- android 日期相减得天数_Excel日期计算方法大全
- 列表输出循环左移_互联网人工智能开发语言Python之for循环、break、continue详解...
- floyd算法和动态规划
- idea使用dababase tools时导出db2建表语句,索引显示错误
- git 合并多次commit
- 2019.03.24 视图和静态读取
- 1.7 Python基础知识 - 模块初识