基于blink DataStream的实时数据配置平台

背景

随着移动互联网的普及, 以及各种超级APP的出现, 每个公司都对数据收集以及充分挖掘数据的价值非常看重,并几乎不计成本地投入。 在每个公司, 无论是实时的BI报表统计分析, 通过实时数据的异常监控, 还是根据用户的实时反馈进行算法效果模型预估,在各个公司都有非常多的应用,并对公司业务效果的保障有着巨大的影响和贡献。

当然, 随着近些年各种开源软件,平台的出现, 特别是以hadoop为起点的开源组件,使得各公司都能够基于这些组件,以及各大厂的云计算快速搭建自己的大数据平台,包括实时数据处理系统。

这里八卦下自己的看法, 个人觉得这些年百度相比于阿里,百度的技术其实是在退步的(虽然我在百度工作了很多年,百度是我的老东家), 我觉得一个主要的原因就是百度的系统太封闭。这在早些年, 在开源社区还不活跃, 大家都需要自己封闭造轮子的时代,这个时代就比拼各个公司自己的技术能力,彼时以工程师为主导的文化, 的确让百度技术领先阿里一大截。 记得10年前,我们都特看不起阿里的技术,就觉得阿里没有技术, 就业务好。 甚至业界还没提云计算的时候, 我们在百度内部, 大家的开发机就已经是以虚拟账号的方式分配资源了。相当于内部已经开始某种意义上上云了。
但后来随着开源社区的兴起, 百度这样连STL都自己重新写一套的模式就慢慢跟不上节奏了: 开源社区结合了各路神仙的才智,对各种大数据组件进行打磨,这也是开放带来的牛逼之处。

通过近两年对老东家百度出来的同学的面试深深由此感觉, 百度甚至内部跑数据还在自己写各种MR,感觉跟我2013年还在百度的时候没啥区别。。。。

扯了那么多,就是想说各种中间件的大数据处理组件,还是需要开放生态,才能有竞争力。国家都需要开放,更别说公司技术。

此处就为大家介绍我们团队为了降低实时数据计算的成本, 构建的‘基于Blink DataStream的实时数据配置平台’,从思路上介绍我们是如何满足各种纷繁多样的基于LBS的实时数据计算需求的。希望对大家有借鉴作用。

同时打个广告: 团队长期招p6~p9数据,工程,算法; 业务发展快。 感兴趣的同学可直接关注以下公众号获取岗位信息:

解决问题

移动互联网目前已经发展到近乎巅峰状态,各个大厂都有自己主打的超级APP,头条各种基于内容的kill time app,腾讯, 阿里淘宝,包括高德都是DAU过亿的超级应用。 这些应用也时刻在产生海量的用户数据。 很多场景都需要对这些数据进行实时处理, 包括:

  1. 用户行为反馈后,进行BI实时报表计算&分析&财务结算
  2. 系统监控,包括业务效果的监控。
  3. 实时特征生成供模型实时使用,例如搜推广的ctr,cvr,实时反作弊等

这个过程中, 实时计算就是一个绕不开的话题, 而且每个场景都会有非常多的定制化需求。


图:广告系统业务端到检索端的基准+实时增量数据同步


图:实时反作弊,需要实时对用户点击反馈进行反作弊计算。

以上两个广告的例子,广告系统业务端到检索端数据同步,以及实时反作弊,都会涉及到较多的实时计算。

挑战 & 实现

在我们的场景, 对实时计算有以下要求:

  1. 实时性: 实时计算的延迟很多场景需要缩短到毫秒级别,才能在很多场景满足用户需求。例如:广告实时性能力建设 《风向标逻辑》
  2. 极低的接入成本:理想情况希望业务方的工程OR算法就能通过平台操作攒出满足自己需求的实时数据计算,满足自己的需求。

基于以上两个要求, 我们定制了基于Blink Data Streaming的实时计算配置平台。
Why Blink? 很简单,flink在实时计算很有优势,流批一体, 且Blink基于flink,是阿里的。
Why Data Streaming:Data Streaming更底层,可以做更深层次的定制和性能优化。


图:基于Blink Data Streaming的实时数据平台架构

在具体实现的时候。 我们将系统抽象成以下几层:

数据层
其功能是对各种来源的数据,按照规范进行数据的normalizing, 因为高德是LBS场景, 所以所有的原始数据实时进入系统的时候, 都会被规范化为<time, location, userid, object, event>, 也就是时间地点人物事件,以及事件处理到的对象。
此处的userid及object并没有带维度属性,维度属性由离线batch逻辑生成。 并在引擎层进行id和维度属性的自动关联。

引擎
此处的引擎主要有两个作用:

  1. 定义算子: 我们使用blink 的data streaming api开发并优化了常用的实时数据算子, 以便引擎能够将各种算子攒成任务, 此处的算子可以灵活定义并根据需求开发, 类似于一个faas平台。
  2. 任务调度: 单个算子仅进行实时数据的一步原子计算, 需要引擎层中的任务调度, 根据上对层平台计算任务配置的解析, 组合成完成整个实时计算逻辑的task任务。 此处比较像tensorflow在运行时, 将各个operator按照有向无环图编排任务进行计算的过程。

服务层
服务层的两个作用:

  1. 任务配置: 负责给平台使用者提供UI,以便用户进行任务的配置。目前开源有很多这样的配置管理组件可以使用, 我们内部使用Diamond平台
  2. 资源状态管理: 从系统的角度对任务进行调度, 资源分配。

效果

目前我们团队开发的实时计算平台已经在各个业务中使用, 初步实现了配置化实时任务的生成, 启动,管理, 监控。 连写blink sql都免了, 用主要负责开发的同学的话说: '该平台再完善完善, 写blink sql的同学也可以失业了。。'

如果你对我们的工作感兴趣, 可以联系我们, 需要更多同学进行类似平台的建设和完善。

参考文献

  1. 广告实时性能力建设
  2. 在高德吃喝玩乐!LBS信息的AI技术应用

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注