码农节快乐|一个系统,高效解决复杂事件采集-计算-实时触达

PartI: 1024

今天是1024,一个特别的数字,比如某网站内容的解压密码通常都是1024,想求一个种子留言也是1024。1024是属于广大程序猿(又称码农)的节日,在这样一个节日里,各种“黑”程序猿的新老段子将纷纷出现在各大媒体网站。为什么程序猿属于经常被黑的一个群体?凌乱的发型、黑框眼镜、双肩包、格子衫、牛仔裤、运动鞋、钱多话少是很多人眼中的程序猿形象。

 

程序猿经常被黑的原因,还因为他们喜欢自黑(对比下另一个工种,千万不能当着XXX们的面,叫他们美工,一定要叫设计师),但程序猿真的是描述中的那样吗



除了钱多话少是对的,其他都不完全对,比如说我,穿的是一身国际名牌'优衣库',喝酒烫头不抽烟,但我只是个二流的程序猿,在闲鱼里,顶级的程序猿是这个样子的。

程序猿接的最多的需求:这是老板的需求。程序猿代码上线的时间:明天上线。程序猿写过的bug:怎么会有bug。1024祝广大程序猿节日快日,继续加班写bug!!!

Part II  这是一篇技术文章

闲鱼作为一款闲置物品交易平台,让用户的闲置物品再次得到价值流通,普惠每一位用户。先看下面几个业务场景:

场景1:在闲鱼的一次活动中,用户进入活动会场后,浏览了几个不同的宝贝,就会奖励一个包邮券。
场景2:用户关注的用户宝贝降价了,实时告知用户该降价信息。
场景3:在用户搜索租房后,并浏览N个租房信息,则为其推送一套合适的房源。
场景4:双十一会场活动,用户进入会场,点击商品详情,对其发送优惠。

类似这样的业务还有很多,如果每次都是case by case的去解决,不仅重复性建设,还非常的浪费人力。程序猿最大的优点就是懒,喜欢将看似不同的事务进行抽象,找出其共性,进行归纳和演绎,并通过设计一种架构,去解决该类似场景下的诸多业务,以减少重复性的劳作。
而架构的设计是有套路可以遵循的,然并卵,虽然了解了很多的架构原理、设计理念,但往往实际的操作过程中,很容易空对空,这里给出一种设计架构的套路步骤:系统解决的问题定义->系统设计的目标->核心设计->各子系统模块的详细设计。

系统解决的问题定义

问题的定义是从解决的业务场景出发的,也是最难的一步,如果问题定义的不明白,后面的系统设计很容易出现偏差,甚至各方理解不一,无法落地。上面的这些业务场景有哪些共性呢,用一句话可以描述为:“用户的一系列操作,满足一定的复杂规则条件后,对其实时的触达相应的权益”。这里有一个要求,需要“实时”,能够秒级的触达用户。 因此系统解决的问题可以定义为:能够处理复杂规则事件的实时触达系统。

系统设计目标

有了对业务场景的问题定义,如何设计一个架构,去解决这个问题,在设计之初,老板给了一些目标要求:

1. 技术与业务分离,构建技术组件和能力,组合后实现业务需求;
2. 事件的数据格式需要结构化和标准化,支持扩展;
3. 规则的表达定义类似SQL的申明式DSL,贴合业务领域;
4. 客户端和服务端有各⾃的行动触发能力,⽀持扩展开发;客户端支持服务端驱动;
5. 触发和计算分离,计算模式插件化;

系统设计的目标是为了保证最终的实现和最初的想法不要出现太大的偏差,有一个衡量标准在,一是让项目内的成员依据此目标进行设计,避免出现公说公有理、婆说婆有理的情况;二是项目的验收可以依据这个目标去评判,有理可依。

核心内容设计

核心设计这一步很考验基本功和技术视野的,需要综合判断、权衡取舍,依据设计目标选出一个当前的最优解。在系统的设计目标中,其中一条,就是要标准化,标准化最大的好处是可以统一不变的接入。互联网是个发展只有不到30年的行业,但工业已经发展了几百年,很多互联网行业里的问题,在工业里已经有了标准化的定义。在搜集技术方案资料中,对RFID(射频识别)进行复杂事件的流处理的方案进入我们视野[参考1]。

RFID系统信息体系结构

而这个工业场景下的问题定义,具有标准化和通用性,其核心内容包含3个模块:数据采集模块、复杂事件处理模块、结果触发相应的时间模块。
这个设计正好符合我们的业务场景所需要解决的问题。结合我们自己的业务,我们将其定义为“日志采集模块、复杂事件的实时处理(EPL)模块、结果触达模块”,其核心的架构图设计如下:

核心架构图
这3大核心模块,都是通过异步消息进行通信,目的是每个模块可以解耦,即可以进行独立使用,又可以作为整体的能力提供。
通过日志采集模块,进行日志的采集和归一,得到输入的数据;而后进入EPL模块,进行规则定义和计算;最终的结果进入触达模块,进行用户的结果触达。下面分别介绍这3个模块的详细设计。

各子系统模块的详细设计

1:日志采集模块
闲鱼的系统架构,入口应用多,而且还有是异构的(有java应用,dart应用,Fass应用)。我们做了一个拦截器,屏蔽这些应用的细节,作统一的拦截处理。 经过统一请求拦截层,将所有的请求日志写入到SLS中。如图

但这些日志的格式千变万化,对下游的业务处理非常的不便,因此需要对原始的日志数据进行清洗,清洗为统一的格式,同时这个清洗任务随着原始数据的多变,需要支持可配置化。
我们使用blink实时的对原始数据进行清洗,同时在blink任务里,嵌入一个UDTF,这个UDTF接入动态化配置平台,支持对清洗任务的可配置化。经过blink清洗后的数据,格式归一化为:

归一化格式后的数据,通过rocketMQ和SLS往下游输出。这里提一下为何要通过两种数据通道输出:rocketMQ对于在线业务的接入非常方便; SLS对下游接blink任务实时计算并发度要快。

2:EPL引擎模块
EPL模块,在之前的这篇 《闲鱼如何打造高效CEP系统及DSL编程语言》 已经对这个模块进行了详细的讲解(请戳 https://mp.weixin.qq.com/s/is1IlJdCyr-vup78rIoUIw),这里不再赘述。
这里提一下我们设计此DSL的目的和目标。

  1. 简化该业务领域下的写法。
  2. 云/端表达的统一。
  3. 该写法要作为blink的一层通用抽象表达。
  4. 该DSL要尽量的符合行业内的规范。

最终的DSL实现方案,一个任务的编写大约只需要5行,而如果使用blink代码实现,至少上百行。我们跟blink合作,推动该DSL作为blink一种上层业务的抽象表达,可以扩展blink的使用。同时DSL的设计并不是天马行空的想出来的,而是根据1这两篇论文进行的设计,尽量去符合业界的规范。
同时这里的EPL引擎模板,除了云端的计算,还包含了端测计算能力,后面会有针对这一块内容的文章,敬请期待

3:结果触达模块
结果触达模块包含了对EPL计算结果的处理,支持可配置化,支持自定义,并提供了诸如“push、poplayer、openPage”等基础触达能力。后面会有一篇详细的文章进行介绍,敬请期待。

应用效果

业务方接入,只需要3个步骤:1.配置需要获取的日志数据,2,使用DSL编写任务规则。3.配置一条触达能力。不需要一行代码的开发,只通过配置半天内就可以上线一个业务。
同时,从上游的数据采集->计算->结果触达,整个链路的耗时只需要10s就可以完成。

 

总结和展望

我们用一个拦截器,解决诸多异构应用的日志采集问题,然后使用可配置化的blink任务,对原始的日志数据进行清洗,输出标准化的格式数据。接着根据行业的规范,设计出自定义的DSL,以方便复杂规则任务的编写,并和blink合作,无缝的接入blink实时计算平台,进行任务的计算。计算出的结果,只需进行配置,就可以进行到端的push/poplayer/openPage触达。
目前我们的这款技术产品,已经接入了十多个业务,线上运行稳定,接入的效率得到极大提升。
未来我们将进一步对DSL的表达能力进行加强,同时将接入端计算能力,使得一些符合端测直接计算的业务场景,实时性得到更高的提升。同时将结合算法能力,去挖掘潜在的业务价值。

 

阿里云双11亿元补贴提前领,进入抽取iPhone 11 Pro:https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110

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

 

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

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

相关文章

SpringBoot集成Myabtis

二、SpringBoot集成Myabtis 2.1. pom 依赖 <!--版本控制-><properties><java.version>1.8</java.version><oracle.version>11.2.0.3</oracle.version><mysql.version>8.0.20</mysql.version></properties><!--Mybat…

DevOps 在移动应用程序开发中扮演什么角色?

作者 | VARUN BHAGAT译者 | 火火酱&#xff0c;责编| Carol封图 | CSDN 付费下载自视觉中国全球智能手机用户数量已经超过30亿。据估计&#xff0c;未来几年用户人数将增加至数亿人。智能手机用户和应用程序下载量的这种稳定增长证明了移动应用程序行业的蓬勃发展。如今在这个技…

她说:行!嫁人就选程序员!

本文的重点是&#xff1a;“为什么年轻漂亮的小姑娘都瞄准了程序员小哥哥”“理发38&#xff1f;太奢侈了&#xff01;淘宝20买套剪刀自己可以用好几年。”“衣服太贵了&#xff0c;我觉得优衣库的那件打折就已经很好了”“上个月的一千块钱的零花钱没花完&#xff0c;这个月先…

数学之美:嵌入式编程凹凸性之妙用(附C代码)

来源 | 嵌入式客栈今天遇到一个网友问一个问题&#xff0c;他有一个传感器测量一个物理量&#xff0c;需要判断其变化趋势&#xff0c;我给了一些建议&#xff0c;这里将这个建议展开做些深入分析&#xff0c;并分享给大家。本文想借此表达一下个人的一个观点&#xff0c;做开发…

从地摊看云计算:规模产业历程大揭秘

作者 | 马超责编 | 夕颜头图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 地摊经济的突然兴起&#xff0c;可能是2020年发生在中国最神奇的一幕了&#xff1a;刚刚还在直播间内直播的带货的企业老板&#xff0c;转眼间又来到地摊来叫卖产品了。当然也…

SpringCloud Gateway 快速入门_01

文章目录一、网关模块搭建1. 引入依赖2. 配置3. 启动类二、产品服务模块搭建2.1. 引入依赖2.2. 配置2.3. 控制层2.4. 启动类2.5. 启动产品模块三、启动中间件3.1. nacos启动3.2. 启动gateway3.3. 配置域名映射四、测试验证4.1. 测试产品服务4.2. 网关访问产品一、网关模块搭建 …

这件事,阿里爱了10年

阿里云双11亿元补贴提前领&#xff0c;进入抽取iPhone 11 Pro&#xff1a;https://www.aliyun.com/1111/2019/home?utm_contentg_1000083110 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......

作为一个教Python10年&#xff0c;带了5万名学生入职一线互联网公司的老师&#xff0c;经常遇到一些学员和我抱怨&#xff1a;看了很多教程&#xff0c;遇到问题不知道怎么寻找解决方案...课上听老师讲案例一听就会&#xff0c;可是一去做相关的练习题就傻了&#xff0c;无从下…

SpringCloud 基于OAth2.0 搭建认证授权中心_02

文章目录一、数据库部分1. 创建数据库2. 初始化数据脚本二、搭建maven父工程认证授权模块2.1. 创建一个maven项目2.2. 引入依赖三、搭建认证授权模块3.1. 创建一个子maven项目3.2. 引入依赖3.3. 增加application.yaml3.4. 增加数据库实体3.5. 增加接口3.6. 增加用户读取实现类3…

Knative Service 是如何指定端口和协议的

如果使用 Knative Serving 部署一个 Nginx 你可能会发现服务起来了&#xff0c;但是无法访问到 Nginx 中的服务。当然这不是 Nginx 的问题&#xff0c;这是因为 Knative 对 Container 的端口有要求。默认 Nginx 的服务端口是 80 &#xff0c;而 Knative Serving queue 8012 默认…

那天我去逛街,发现连大编程语言都摆起地摊了……

作者 | 轩辕之风来源 | 编程技术宇宙&#xff08;ID&#xff1a;xuanyuancoding&#xff09;困难年年有&#xff0c;今年特别多。公司要做一个新的网站&#xff0c;可预算有限&#xff0c;听说为了生计&#xff0c;各大编程语言们都摆起了地摊儿&#xff0c;我决定去瞧瞧&#…

十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一

十年前&#xff08;2009年&#xff09;的9月&#xff0c;我奉命组建当时的淘宝技术保障部&#xff1b;随即启动了2010年的技术预算工作&#xff0c;记得第一次给时任集团首席架构师的王坚博士汇报预算的时候&#xff0c;我得意地说到&#xff1a;“&#xff08;淘宝&#xff09…

SpringCloud Gateway 集成 oauth2 实现统一认证授权_03

文章目录一、网关搭建1. 引入依赖2. 配置文件3. 增加权限管理器4. 自定义认证接口管理类5. 增加网关层的安全配置6. 搭建授权认证中心二、搭建产品服务2.1. 创建boot项目2.2. 引入依赖2.3. controller2.4. 启动类2.5. 配置四、测试验证4.1. 启动nacos4.2. 启动认证中心4.3. 启动…

Knative 健康检查机制分析

从头开发一个 Serverless 引擎并不是一件容易的事情&#xff0c;今天咱们就从 Knative 的健康检查说起。通过健康检查这一个点来看看 Serverless 模式和传统的模式都有哪些不同以及 Knative 针对 Serverless 场景都做了什么思考。 Knative Serving 模块的核心原理如下图所示。下…

【模式识别】探秘分类奥秘:K-近邻算法解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…

SpringCloudGateway 集成 nacos 整合实现动态路由_04

接上一篇&#xff1a;SpringCloud Gateway 集成 oauth2 实现统一认证授权 文章目录一、目前存在的问题1. 问题简述2. 集成nacos前配置3. 前言简述二、网关模块改造集成nacos2.1. 引入依赖2.2. 创建bootstrap.yaml2.3. 在nacos配置中心添加配置2.4. 启动服务2.5. 访问产品模块2.…

深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?

阿里妹导读&#xff1a;在刚刚结束的乌镇世界互联网大会上&#xff0c;阿里云自主研发的POLARDB云原生数据库当选世界互联网领先科技成果&#xff0c;凭实力站上C位。这个”包管“了北京市每天800万人次的公交出行的下一代分布式数据库到底有多强大&#xff1f;我们请阿里云智能…

QCon演讲|闲鱼从零到千万DAU的应用架构演进

导读:业务架构要随着业务发展做相应的演进,继而支撑业务的快速发展。本文主要通过介绍闲鱼从零发展到千万级DAU应用的不同阶段的业务特点、核心问题以及针对性的架构演进,来阐述业务架构的演进思路与心得。 闲鱼业务背景 技术架构的演进跟业务形态都是强相关的,闲鱼的市场本质…

程序员必修课:为什么非要用Python做数据分析?Excel不好吗?

日本最大的证券公司之一野村证券首席数字官马修汉普森&#xff0c;在Quant Conference上发表讲话&#xff1a;“用Excel的人越来越少&#xff0c;大家都在码Python代码。”甚至直接说&#xff1a;“Python已经取代了Excel。”实际上&#xff0c;Python的应用领域极为广泛&#…

SpringCloudGateway实现金丝雀发布_05

接上一篇&#xff1a;SpringCloudGateway 集成 nacos 整合实现动态路由 文章目录一、启动服务1. 启动Gateway-Serv模块服务2. 启动auth-serv认证授权服务3. 启动product-serv服务4. 启动product-serv服务2二、修改nacos配置2.1. 配置改造2.2. 配置发布三、测试验证3.1. 访问产品…