双十一|又快又稳!闲鱼实时事件规则计算驱动平台

闲鱼双十一金鳞抽奖玩法

相信今年在11月7日-11月11日期间使用过闲鱼的用户,可能已经被如下图所示的幸运海星“砸”到过了。只要用户进入到指定的几个页面,或者在某些指定的页面有点击行为,就会触发到这样一个幸运之星。这就是今年闲鱼双十一的金鳞项目中的玩法效果。该项目横跨了10多个业务,按之前传统做法是需要协调多个业务方参与进来一起开发。虽然其实现难度本身到不是那么难,但是沟通协作成本将会是非常之高。此外双十一过后,下线这些为了该玩法开发的代码又是一个工作量,而且还得安全地下线且不带有稳定性问题。

但是实际上,参与的业务仅仅只是补了几个缺失的点击埋点,剩下的工作就是与业务无关的poplayer弹层的开发以及与权益的对接,而各业务总投入的对接成本不到半天。这背后依靠的是一个基于标准DSL的实时事件规则计算驱动平台。下面就来讲述下该平台的起源与发展。

起源于闲鱼的用户增长业务

在年初时,我们在用户增长下做了多个实验,主要还是希望用户能在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引擎来读取。

DSL实现

由于我们采取了类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个工作日即可。此外,这套方案还有如下几个优势:

  • 高性能。在双十一期间,事件采集器rt稳定在2s内,EPL引擎计算任务稳定在1秒左右,整条链路从采集到触达平均耗时5秒。
  • 高可靠。依托于Blink的高可靠性,承载了双11每天上亿级的流量,整体稳定且无抖动。

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

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

未来规划

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

  • 整条链路计算完毕平均需要5秒左右。如果放到对实时性要求更高的任务场景下时,在用户体验上就无法满足了。
  • 闲鱼当前DAU已经稳定在2000W以上,且已连续3年电商版块增速最高。如果所有计算依然全部放在云上,则对云上的算力消耗是个极大的挑战。
  • 目前我们的设计上,是没有算法接入的,只有简单的圈人。而为了让规则的投放更加精准,进而提升规则对用户的有效性,是需要与算法结合的。

因此综上,我们未来的规划将会聚焦于端侧实时计算能力的挖掘和算法能力的结合上。其中端侧能力的挖掘,我们已经和集团端智能团队在一起共建BehaviR框架,未来会有新的产出,大家可以期待我们的落地实践。


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

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

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

相关文章

“编程能力差的程序员,90%会输在这点上”谷歌AI专家:其实都是瞎努力

最近几年,我看过市面上很多 Python和人工智能的教程和书籍,它们大都这样讲:先从 Python 人工智能的历史讲起开始,再介绍的基本语法规则,Python 的 list, dict, tuple 等数据结构,最后学习机器学习、深度学习…

阿里科学家再获世界级荣誉,平头哥首席科学家谢源当选AAASFellow

11月27日,美国科学促进会(AAAS)公布了2019年度会士(Fellow)增选结果,阿里巴巴平头哥首席科学家、达摩院高级研究员谢源当选,这也是信息、计算和通信领域新当选的24名Fellow之一,一同…

开放下载!从RCNN到SSD,这应该是最全的一份目标检测算法盘点

导读:从简单的图像分类到3D姿势识别,计算机视觉从来不缺乏有趣的问题和挑战。通过肉眼我们可以检测出一张宠物照中的猫和狗,可以识别出梵高作品《星夜》中的星星和月亮,那如何通过算法赋予机器“看”的智能,就是我们接…

全网最详细TCP参数讲解,再也不用担心没有面试机会了......

作者 | 小林coding责编 | 王晓曼封图 | CSDN 下载自视觉中国前言TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用。TCP 协议是由操作系统实现,所以操作系统提供了不少调节 TCP 的参数。Linux TCP 参数如何正确有…

图片的缩放与拖拽

这个图片的缩放的流畅度还是很好的&#xff0c;需要引入touch.js,好像是百度团队那边写的 <script src"./js/touch.min.js" type"text/javascript"></script> $(function() { //放大缩小var scaleVal 1;var initialScale scaleVal || …

为了帮助卖家成交,闲鱼工程师做了些什么?

引言 闲鱼是一个C2C平台&#xff0c;提高卖家活跃度不仅有利于成交的提升&#xff0c;对于用户增长也有积极意义。而其中的关键点就在于其成交的效率。而个人卖家由于其专业程度不如专业卖家&#xff0c;成交效率往往并不高。我们希望可以实现两个提升&#xff1a; 能帮助卖家…

TOP互联网公司都在用,为什么SRE比传统运维更抢手?

阿里妹导读&#xff1a;双11的完美收官&#xff0c;2684亿的销售奇迹及顺滑极致的客户体验让双11背后的技术再次被推到风头浪尖。而双11技术热点话题&#xff0c;不得不提集团核心系统100%上云这一技术创举。 作为集团上云的底座产品&#xff0c;ECS承担了集团上云基础设施的重…

***error*** (zip#Browse) unzip not available on your system

文章目录1. 修改jar配置文件2. 现象3. 解决方法1. 修改jar配置文件 vim xxx.jar2. 现象 用不同用户打开&#xff0c;效果是不一样的&#xff0c;下图分别是 root账号、普通用户打开的 root账号显示异常还不明显&#xff0c;切换成普通用户后发现就很明显了&#xff0c;原来…

帅爆了!3个月0基础转型头条数据分析师,他做对了什么?

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

淘宝如何保障业务稳定性——诺亚(Noah)自适应流控

作者|哲良、八风、泽彬 出品|阿里巴巴新零售淘系技术部 诺亚(Noah) 自适应流控解决方案 基于自动控制算法&#xff0c;解决了人工限流配置疏漏或过时的痛点&#xff0c;大幅提升应用抵抗流量冲击的能力。在刚过去的双11中&#xff0c;诺亚(Noah)保障了大量业务应用系统&#x…

倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!

2020年7月3—4日&#xff0c;由 CSDN 主办的第三届 AI 开发者大会&#xff08;AI ProCon 2020&#xff09;&#xff08;大会官网&#xff1a;https://aiprocon.csdn.net/&#xff09;将以线上直播的形式与大家相见。本次大会历时2天&#xff0c;一次性设立6大主题、20大精彩分论…

使用html5+的plus调起相机拍照,使用canvas压缩图片,转成base64传到后台

html代码&#xff1a; <div class"form-com door"><label for"">门头照&#xff1a;</label><a href"javascript:void(0);" onclick"getImage(1)"><img id"img1" class"img" src&quo…

1亿人点赞的晚会,如何做技术沉淀?

阿里妹导读&#xff1a;今年是双11的第11年&#xff0c;猫晚的第5年。今年的天猫双11狂欢夜(简称“猫晚”)有超200个国家和地区通过优酷APP观看猫晚直播。5144万人通过猫晚公益直播间观看明星卖农货&#xff0c;网友在淘宝直播间点赞1亿次&#xff0c;海外艺人参与的节目超过了…

K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

导读&#xff1a;2019 年阿里巴巴核心系统 100% 以云原生方式上云&#xff0c;完美地支撑了 双11 大促。这次上云的姿势很不一般&#xff0c;不仅是拥抱了 Kubernetes&#xff0c;而且还以拥抱 Kubernetes 为契机进行了一系列对运维体系的深度改造。 Kubernetes 作为云原生的最…

IDC:移动云进入云运营服务市场前五!

据IDC最新发布的《中国云运营服务市场跟踪&#xff0c;2019H2》显示&#xff0c;2019年下半年中国云运营服务市场规模达到107亿&#xff0c;同比增长27.9%。其中&#xff0c;移动云在全国云运营服务市场份额中占比4.9%&#xff0c;排名进入前五。什么是云运营市场服务&#xff…

三级联动

引入插件的css和js代码&#xff1a; <link href"./css/LArea.css" rel"stylesheet" > <script src"./js/LAreaData1.js"></script> <script src"./js/LArea.js"></script> html代码&#xff1a; <…

Attribute “singleton” must be declared for element type “bean”.

文章目录一、分析定位1.异常现象2.分析定位二、解决方案2.1.找坐标2.3. 找jar包2.3. 打开jar包2.4. 找目录2.5. 编辑xfire.xml2.6. 编辑xfireXmlBeans.xml一、分析定位 1.异常现象 Attribute “singleton” must be declared for element type “bean”. 2.分析定位 因为&a…

高德JS依赖分析工程及关键原理

一、背景 高德 App 进行 Bundle 化后&#xff0c;由于业务的复杂性&#xff0c;Bundle 的数量非常多。而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂&#xff0c;需要进行管控&#xff0c;使 Bundle 之间的依赖保持在架构设计之下。 并且&#xff0c;为了保证 Bu…

为了这个技术,操作系统把 CPU 害惨了!

来源 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国内存访问瓶颈我是CPU一号车间的阿Q&#xff0c;前一阵子我们厂里发生了一件大喜事&#xff0c;老板拉到了一笔投资&#xff0c;准备扩大生产规模。不过老板挺抠门的&#xff0c;拉到了投资也不给我们涨点工资&#x…