如何在一周内上线50个用户增长策略

在闲鱼用户增长业务上的实验

我们最先落地的业务是在用户增长上,闲鱼的用户增长业务有如下描述:

  • 闲鱼的卖家都是普通小卖家,而非专业的B类商家。因此无法统一组织起来参加营销活动带来买家活跃。
  • 我们目前DAU已经突破到2000W,如何承接好这么大体量的用户,对运营同学是个很大的考验。

在年初时,我们在用户增长下做了多个实验,其中两个实验如下:

之所以会做以上实验,主要还是希望用户能在APP上多停留一会。当用户浏览时间越长,就越有可能发现闲鱼上还有很多有趣的内容,无论是商品宝贝还是鱼塘内的帖子。从而达到吸引用户下一次还能再回来的目的,最终带来用户增长。我们做的实验上线后大部分都取得了不错的业务效果,但是在过程中也暴露了两个问题:

  • 研发周期长。一开始,我们先用最快的实现方案来做,主要是为了快速验证规则策略的有效性,并没有做大而全的设计,每个需求都是case by case地写代码来实现。那么从开始开发真正能到上线,很可能就是三周,主要因为客户端发版是有窗口的。
  • 运营效率慢。因为上线慢,导致获取业务数据后再分析效果就很晚了,然后还要根据数据再去做调整那就更晚了。这样算下来,一年也上不了几个规则策略。

工程化解法——基于事件流的规则引擎

针对上述问题,我们先做了一层业务抽象。运营先通过对用户的各种行为进行一个分析和归类,得出一个共同的具体的规则,再将这个规则实时地作用到用户身上进行干预。

针对这层业务抽象,我们再做了工程化,目的就是为了提升研发效率和运营效率。这样就有了第一个方案——基于事件流的规则引擎,我们认为用户的行为是一串顺序的行为事件流,使用一段简单的事件描述DSL,再结合输入和输出的定义,就可以完整地定义一个规则。

以上述用户增长的第二个实验为例,如下图所示的DSL即可简单表达出来:

规则引擎的局限性

该规则引擎可以很好地解决之前用户增长业务下的几个策略,随后我们进行了内部推广,准备在闲鱼C2C安全业务下也落地。在C2C安全业务上有如下描述:

在C2C安全业务上,也有一个看似是一个针对一系列行为作出的规则抽象,如下图所示:

但是将上述规则套上规则引擎后,就会发现无法将安全的规则套上规则引擎。假设我们的详细规则是1分钟内被拉黑2次,就对该用户打上高危标记。那么我们想一想,当来了第一个拉黑事件后,匹配上了。然后紧接着来了第二个拉黑事件,也匹配上了。此时按照规则引擎的视角,条件已经满足了,可以进行下一步操作了。但是再仔细看一看规则,我们的规则是要被不同的用户拉黑,因为有可能是同一个用户操作了多次拉黑(同时多开设备)。而规则引擎上只知道匹配到了2次拉黑事件,对规则引擎来说已经满足了。却无法知道是否是不同人操作的。起根本原因是因为在规则引擎里,事件都是无状态的,无法回溯去做聚合计算。

新的解决方案

针对规则引擎的局限性,重新分析和梳理了我们的实际业务场景。并结合了业界知名的通用的解决方案后,设计出了新的方案,定义了新的DSL。可以看到,我们的语法是类SQL的,主要有以下几个考虑:

  • SQL已经是语义完备的编程语言,不用再去做额外的语法设计。
  • SQL是一门很简单的语言,不需要花太多时间就可以掌握。
  • 我们闲鱼的运营同学会写SQL,这样会让上线效率更快。

新的DSL方案与之前的规则引擎相比主要有以下几个增强:

  • 增加了条件表达式。可以支持更丰富更复杂的事件描述,也就能支撑更多的业务场景。
  • 增加了时间表达式。通过WITHIN关键字,定义了一个时间窗口。通过HAVING之后跟的DISTINCT等关键字,就可以针对时间窗口内的事件进行聚合计算。使用新的方案,就可以很好地解决上述C2C业务上的规则描述问题。
  • 扩展性强。遵循了业界标准,与具体业务的输入和输出无关,便于推广。

针对之前的C2C业务上的规则描述问题,使用新方案的例子如下:

整体分层架构

基于这套用EPL(Event Programming Language)写出的DSL,为了做好工程化,我们做了如下的整体分层架构。为了快速实现最小闭环验证效果,我们选择先基于Blink(Blink是阿里对Flink的内部优化和升级)做云上的解析和计算引擎。

在这个分层架构里,至上而下分别是:

  • 业务应用。在这里是我们整个系统的业务方,已经在多个业务场景下做了落地。
  • 任务投放。这里是对业务应用层提供DSL声明和投放的能力,能可以做简单的圈人,以及与用户触达模块的关联。
  • 用户触达。这个模块用于接收来EPL引擎计算的结果,根据关联的Action来实施动作。同时这个模块也可以独立对业务应用提供服务,即各个业务方可以拥有自己的逻辑,通过用户触达模块来触达用户。
  • EPL引擎。目前已经实现了云上的解析和结算。用于接收来自任务投放里声明的DSL,再去解析和运行在Blink上。
  • 事件采集。负责通过服务端日志和行为打点里采集行为事件,并归一化地输出给EPL引擎。

事件采集

通过切面的方式拦截所有的网络请求和行为打点,再记录到服务端日志流里。同时通过一个事实任务对事件流进行清洗,按前面定义的格式清洗出我们想要的事件。再将清洗后的日志输出到另一个日志流里,供EPL引擎来读取。

EPL实现

由于我们采取了类SQL语法,而Calcite是业界通用的解析SQL的工具,因此我们采用Calcite并通过自定义其中的parser来解析。如果是单一事件的DSL,则会解析成Flink SQL。如果是多事件的DSL,则会解析后通过直接调用Blink的API接口的方式来实现。

用户触达

当EPL引擎计算出结果之后,会输出给用户触达模块。首先会进行一个Action路由,最终决策出需要由具体哪一个Action来响应,最后通过与客户端之间的长连接将Action下发到端上。端上收到具体的Action后,会先判断当前用户的行为是否允许展示该Action。如果可以的话,就直接执行Action的具体内容,曝光给用户。用户看到这次响应后会有相应的行为,那么这部分的行为会影响到Action路由,对这次的路由的做出一个反馈。

案例

新方案上线后,我们就在越来越多的业务场景里进行了落地。这里列举2个例子:

在上述鱼塘的例子里,可以看出来,我们这套方案已经有了一点算法推荐的影子了。在上述租房的例子里,由于规则过于复杂,用DSL表达起来很麻烦,所以就做成只采集4次浏览不同租房宝贝的规则,即触发后,就将这里的数据都给到租房的具体开发的业务方,这也是我们在落地过程中摸到的边界。

结论

使用这一套完整方案,研发效率上有了很大的提升。原先通过写代码case by case的方式一般要4个工作日完成整个研发流程,极端情况下需要跟客户端版本则需要2-3周的时间。现在通过写SQL的方式一般要0.5个工作日即可上线。此外,这套方案还有如下几个优势:

  • 高性能。整条链路计算完毕平均耗时5秒。
  • 高可靠。依托于Blink的高可靠性,承载了双十一上亿的流量。

通过在多个业务的落地实践,我们也摸索出来这套方案的适用边界:

  • 对实时性要求高
  • 强运营主导规则
  • 能够用SQL表达

未来规划

当前整套方案还有如下几个问题:

  • 整条链路计算完毕平均需要5秒左右。如果放到对实时性要求更高的游戏任务场景下时,这就无法满足了。假设,今天有个任务是浏览10个宝贝详情。当用户浏览到第10个宝贝时,还要再等5秒才给予响应,用户是无法接受的。因此需要对整体性能有进一步提升,要在毫秒级内给出响应。
  • 闲鱼的业务已经连年保持了高增长,未来可能会面对比当下翻三番的用户流量,如果所有计算依然全部放在云上,则对云上的算力消耗是个极大的挑战。
  • 目前我们的设计上,是没有算法接入的,只有简单的圈人。而为了让规则的投放更加精准,进而提升规则对用户的有效性,是需要与算法结合的。

因此综上,我们未来的规划将会聚焦于端侧实时计算能力的挖掘和算法能力的结合上。


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

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

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

相关文章

jstat gc各参数含义

参数说明S0C第一个幸存区的大小S1C第二个幸存区的大小S0U第一个幸存区的使用大小S1U第二个幸存区的使用大小EC伊甸园区的大小EU伊甸园区的使用大小OC老年代大小OU老年代使用大小MC方法区大小MU方法区使用大小CCSC压缩类空间大小CCSU压缩类空间使用大小YGC年轻代垃圾回收次数YGC…

MySQL用户如何构建实时数仓

依托数据库生态,AnalyticDB for MySQL可以给用户提供分析场景下的标准解决方案,尤其是在大数据和性能要求较高的情况下AnalyticDB for MySQL的价值可以更好的体现。 MySQL用户为什么要单独构建数据仓库 为什么要单独构建数据仓库,而不是直接…

138 张图带你 MySQL 入门!

作者 | cxuan来源 | Java建设者SQL 基础使用MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)

文章目录一、软件和源准备1. Gitlab下载2. epel源下载二、环境配置2.1. 安装依赖项2.2. 安装epel源2.3. 安装Gitlab三、Gitlab和防火墙配置3.1. 设置external_url3.2. 重新加载配置3.3. 防火墙配置四、测试验证4.1. 浏览器访问Gitlab4.2. 重新设置密码4.3. Gitlab常用命令一、软…

Promise封装Ajax实现POST和GET请求

🎨领域:Java后端开发🔥收录专栏: 前端技术 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录介绍一、相…

轻松构建基于 Serverless 架构的弹性高可用视频处理系统

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

文章目录一、Gitlab下载1. Gitlab官网下载二、分析思路2.1. 分析2.2. 代码托管平台2.3. 镜像站二、Gitlab 重新加载配置异常2.1. 异常现象2.2. 分析定位三、百度解决问题3.1. 百度类似异常3.2. 参考博文3.3. 解决方案3.4. 执行测试3.5. 结论四、官网issues 014.1. 找官网issues…

祝贺我的同事王坚当选院士!

刚刚, 收到一个激动人心的消息: 原文链接 本文为云栖社区原创内容,未经允许不得转载。

带你从零入门 Serverless | 一文详解 Serverless 架构模式

作者 | Hongqi 阿里云高级技术专家责编 | Carol来源 | Serverless本文整理自《Serverless 技术公开课》什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS&#xf…

端智能揭秘|促使双十一GMV大幅提升,手淘用了什么秘密武器?

作者|莫凌、桑杨、明依 出品|阿里巴巴新零售淘系技术部 导读:信息流作为手淘的一大流量入口,对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上,我们首次将端计算大规模应用在手淘客户端&#xf…

bug:The selected directory is not a valid home for Go SDK

问题描述: 使用IDEA插件配置go开发环境无法选择已经安装配置好的SDK 当选择local中的SDK时,出现如下错误: The selected directory is not a valid home for Go SDK解决方案: 在自己的SDK目录C:\Program Files\Go\src\runtime\…

Dataphin的代码自动化能力如何助力商业决策

前言 随着大数据趋势的迅速增长,数据的重要性与日俱增,企业内看数据、用数据的诉求越来越强烈,其中最常见的就是各种经营报表数据: 老板每日早晨9点准时需要看到企业核心的经营数据,以便进行企业战略及方向决策 业务负…

Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)

文章目录一、下载、安装、配置依赖1. 安装配置需要的依赖2. Gitlab下载3. 安装Gitlab4. 配置external_url5. 重新加载配置文件6. 查看服务状态7. 配置防火墙8. 浏览器验证9. 寻找密码信息10. 查看密码11. 重新登陆12. 修改密码13. 重新登陆14. Gitlab常用命令声明:C…

如何通过Dataphin构建数据中台新增100万用户?

欢迎来到数据中台小讲堂!这一期我们来看看,作为阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体,Dataphin如何帮助传统零售企业实现数字化转型,并在短时间内新增100万用户? 传统营销的痛点…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚,专业不对口,无实习经验,在求职路上的竞争优势几乎为0,然而,开启自救模式后,我顺利成为了头条数据分析师,下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

36氪联合阿里云,共同研制中小企业发展「催化剂」

互联网的“中场战事” 伴随着第一代原生互联网人进入中年,高速发展了20多年的互联网也开始进入了中场阶段。 现阶段的创新创业领域,商业逻辑已日渐清晰,标志性公司陆续出现,整个行业大家在争夺什么、竞争什么都已摆在眼前。 大…

如何在项目运行过程中动态修改邮箱发件人的配置信息

🎨领域:Java后端开发🔥收录专栏: 框架 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录业务场景场景分…

Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x (语言和主题配置)

接上一篇:Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x 文章目录1. 简体中文2. 个性化主题1. 简体中文 2. 个性化主题

Hive数据如何同步到MaxCompute之实践讲解

摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute。MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的功能、技术架构和实现原理,再通过实际操作MMA,演示将Hiv…

CPU 明明 8 个核,网卡为啥拼命折腾一号核?

作者 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国中断机制我是CPU一号车间的阿Q,我又来了!我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松。咱不能闷着头啥也不管一个劲的只管执行代码,还…