摘要:本文由网易 Java 技术专家吴良波分享,主要内容为 Apache Flink 在网易的实践,文章提纲如下:

  1. 业务与规模演进

  2. Flink 平台化

  3. 案例分析

  4. 未来发展与思考

重要:公众号后台回复关键字「0224网易」,即可获取作者现场分享的完整版 PPT。

一、业务与规模演进

网易流计算演进

在很久以前,网易内部基本上都是使用 Storm 来处理实时的计算任务,比较主要的使用场景是实时邮件反垃圾,广告,新闻推荐等业务。如今内部仍有一部分任务是运行在 Storm 上,目前正往 Flink 上迁移。

  • 16 年左右 Flink 社区在网络上逐渐开始火起来,网易这边开始调研 Flink,发现 Flink 具有很多优秀的特性,比如高吞吐、低延迟、支持 Checkpoint、支持 Exactly once 语义,支持 Event time 等,能够很好的满足业务实时计算的场景,因此很多项目开始使用 Flink 来作为流计算的引擎来搭建流计算平台。

  • 在 2017 年 2 月份,网易杭州研究院成立了一个代号为 Sloth 的项目,基于 SQL 的实时计算平台,底层计算引擎采用 Apache Flink。

但是这套系统做的并不是很成功,一方面是因为平台化,产品化做的不是很到位,用户使用起来不是很方便,SLA 也没有得到很好的保障。另一方面对 Flink 底层的代码改动较大,导致后面跟不上社区的节奏。于是在今年年初对系统进行重新改造,重新拥抱社区,在 SQL 方面采用了阿里巴巴年初新开源的 Blink,使用 Blink 来提交 SQL 任务,同时支持用户直接写 JAVA 代码来提交流计算任务,方便那些有开发能力的同学开发 Flink 任务。

网易杭研在做流计算平台的同时,公司一些大的业务方也在开发自己的流计算平台,这样一来就造成了公司很大的资源和人力上的浪费。为了整合公司资源,以及应对各个业务不断增长的实时计算任务的需求,决定和各个业务方一起共建分布式的实时计算平台,将业务方的任务全部迁移到新的分布式实时计算平台上,杭研负责底层平台和接口的研发与维护,业务方则更加关注业务本身。

基于流计算的业务规模

目前网易流计算规模已经达到了一千多个任务,2 万多个 vcores 以及 80 多 T 的内存。

业务场景

目前网易流计算覆盖了绝大多数场景,包括广告、电商大屏、ETL、数据分析、推荐、风控、搜索、直播等。

二、Flink 平台化

平台架构演进-Sloth 0.x

在 2017 年初的时候,因为当时社区版本的 Flink 对于 SQL 的支持不是很完善,所以 Sloth 平台自定义了 SQL 规范,自己实现了 DDL 等。但当时这个平台的架构存在很多问题,特别是版本升级的时候,代码迁移等的工作量非常大,运维起来也非常困难。另外当时实时计算只是作为离线计算平台的一个功能模块,因此 Sloth 的前端是和离线平台绑定在一起的,实时计算模块前端每次升级发布都需要和离线计算平台一起,非常不方便。

平台架构演进-Sloth 1.0

在 Sloth 的 1.0 版本中,Flink 版本实现了插件化管理,每次 Flink 升级的时候就不需要进行复杂的代码合并工作了,这一点主要通过父子进程架构来实现的。此外,Sloth 1.0 版本的运维方便了许多,并且也支持 jar 包任务开发,用户可以直接通过 Stream API 来写流计算任务。Sloth 的 1.0 版本还支持了阿里巴巴开源的 Blink SQL,并且在监控方面还接入了 Grafana,任务 metrics 存储则使用了网易自研的时序数据库 Ntsdb。

平台架构演进-Sloth 2.0

在 Sloth 的 2.0 版本中,实现了平台的 PaaS 化以及平台的高可用。Sloth 平台提供对外的平台 API,Sloth 开发了一套独立部署的前端界面,同时业务方也可以开发跟自己业务更为紧密的前端界面,通过平台的 API 来提交任务以及后续的任务运维等等。

以前的计算平台都是单点的,都是部署在同一台服务器,一旦服务器出了故障,整个平台就挂了,所以 Sloth 2.0 设计成分布式的,可以部署多个 Server,使用 Nginx 作为负载均衡器,来达到系统的高可用。同时支持了更多的 Flink 版本,因为各个业务以前用的版本都可能不一样,为了将任务直接迁移过来,需要支持这些历史的版本,所以平台支持了 Flink 1.5、Flink 1.7、Flink 1.9 和 Blink 等多个版本。

平台模块图

下图所示是 Sloth 的模块图。在 Web 端,业务方可以搭建自己的任务管控平台 Web,业务方所需要的前端平台可能和公用 Sloth 的前端平台不同,业务方内部还包括各种不同的部门,他们需要对于各个部门的用户权限进行控制等。Sloth-Server 模块,包括用户的权限管理,会话管理,任务开发,元数据管理,任务运维,标签管理,内核调度,文件管理。Sloth-Bill 模块主要是对资源以及用量的统计,Sloth-admin 模块包括监控,报警,任务恢复,以及任务诊断。Sloth-Kernel 模块负责任务执行、语法检测以及 SQL 调试。

事件管理

对于分布式平台的任务操作而言,当前任务只允许一个人操作,而不允许两个人同时操作,这就需要以下几个模块来共同配合:

  • Server:事件执行的发起者,接受事件的请求,进行数据校验,拼装,将事件发送给 Kernel 执行。

  • Kernel:事件具体逻辑的执行者,根据请求向集群发送指令(Shell 脚本方式)。

  • Admin:事件执行结果的确认者,根据事件类型,获取事件的最终结果,保证结果的正确性。

以启动场景为例:

  • 首先,Server 会接收到来自用户的启动请求,之后会创建一个分布式锁,Admin 会监控这个锁。

  • 然后, Server 向 Kernel 提交任务,提交之后会立即返回,返回之后就会立即更新数据库中的状态,将状态更新为启动中,这样在页面上用户就能够看到任务是启动中的状态了。

  • 接下来,Server 就会等待内核的 Shell 脚本的执行结果,如果 Shell 脚本执行成功了,就会去写 Zookeeper,写完 Zookeeper 之后 Admin 模块就会马上检测到 Zookeeper 节点有状态发生了修改,Admin 会立即去获取 YARN 上的任务状态,如果获取到任务状态是运行中,就将数据库的任务状态更新为运行中,这会在前端看到任务就已经是运行状态了。

  • 最后一步是 Admin 更为完数据库之后,会释放掉 Zookeeper 上的锁,其他人这时候就可以操作这个任务了。

Server、Kernel 和 Admin 这三个模块都是不可靠的,那么如何保证其稳定和高可用呢?Server 可以通过部署多个,水平扩展来实现,Kernel 则会由 Server 来进行监听,当发现 Kernel 挂了,可以由 Server 重新拉起或者重新创建。而 Admin 的高可用则是通过热备来实现的,如果主 Admin 挂掉了,可以马上迁移到备 Admin,备 Admin 可以迅速将元数据以及任务信息全部加载进来接替工作,进而实现高可用。

内核调度

对于内核调度而言,是基于父子进程的架构实现的。Server 会通过 Sloth RPC 启动不同的 kernel 子进程,分为常驻子进程模式和临时子进程模式。常驻子进程负责处理启动,停止,语法检查,表结构解析,获取提交结果的请求,临时子进程是用于 SQL 的 Debug 的,当调试完成需要将这个子进程关闭掉,将资源进行回收。内核通过子进程来实现的好处在于当 Kernel 挂掉的时候,Server 可以通过监听自动拉起来。

平台任务状态图

平台的任务状态主要由 Server 和 Admin 来控制。Server 主要控制初始状态的执行,Admin 则主要负责控制所有与 YARN 相关的状态交互。

任务开发

任务开发的界面支持的功能主要有:任务调试、任务 Tab 页、语法检查、任务标签、元数据管理、用户资源文件管理以及任务复制等。

Blink SQL

扩展完善了 Blink 对维表 Join 的支持,以及如 HDFS、Kafka、HBase,ES,Ntsdb,Kudu 等 Sink 端的支持。

任务调试

SQL 类型的任务支持调试功能,用户可以根据不同的 source 表和 dim 表,上传不同的 csv 文件作为输入数据,进行调试。调试执行由指定的 kernel 来完成,sloth-server 负责组装请求,调用 kernel,返回结果,搜集日志。

日志检索

在 YARN 集群的每个节点上面部署 Filebeat,通过 Filebeat 将节点上面的任务日志写入到 Kafka 消息队列中,然后通过 Logstash 进行解析处理,之后写入 ES 集群中。主要用于两个用途,一个是通过界面 Kibana 来提供给开发和运维人员使用,另外一个就是将运行时状态的任务日志直接在界面上展示供用户进行搜索和查看。

监控

在监控方面,使用的是 influxdb metric report 组件对于指标进行监控。时序数据库使用的是网易自研的 ntsdb 时序数据库,其能够支持动态扩展和高可用等功能。监控指标的使用方式有两种:

  • 一种是通过 Grafana 的界面来查看指标;

  • 另外一种是报警模块会从Ntsdb中获取相关指标数据并进行监控报警。

报警

Sloth 流计算平台支持常见的任务失败,数据滞留延迟,failover 报警,也支持用户自定义规则报警,包括对于输入 QPS、输出 QPS,户自定义延迟的监控等。以输入 QPS 为例,可以设置当连续几个周期内 QPS 低于某一值时就触发报警。此外,报警方式也支持多样化的工具,比如各种网易内部的聊天工具、邮件、电话以及短信等,对于任务调试阶段,为了避免被骚扰,可以设置任务报警抑制时间间隔。

三、案例分析

数据实时同步

AI 智能对话服务场景中,客户在前端配置知识库数据,通过 Sloth 实时处理后,写入到 ES 中供查询场景使用。

实时数仓

目前网易很多产品已经开始实时数仓的建设了,但仍旧处于持续完善过程中。实时数仓的建设和离线数仓大致相同,只不过实时数仓是经过实时计算平台进行处理的。大致的过程就是首先收集日志、埋点数据等,将其写入到 Kafka 里面,经过实时计算平台进行处理,将 ODS 层中的明细数据抽取出来,在进行汇总以及维度关联等操作,将结果写入到 Redis,Kudu 等,再通过数据服务提供给前端的业务使用。

电商应用-数据分析

电商的数据分析场景主要包括实时活动分析、首页资源分析、流量漏斗以及实时毛利计算等。简要的逻辑就是从 Hubble 收集用户的访问日志推动到 Kafka,使用 Sloth 清洗出明细层,写入 Kafka,再用 Sloth 任务,关联维度,实时写入 Kudu,落入 Kudu 表的数据,一方面可以提供给业务方使用,分析师可以开发实时查询;另外一方面,可以在这个实例的 Kudu 表上面,提供给数据应用。

电商应用-搜索推荐

电商的搜索推荐场景则主要包括用户实时足迹、用户实时特征、商品实时特征、实时 CTR CVR 样本组建、首页 A 区轮播、B 区活动精选等 UV、PV 实时统计等。简要的逻辑就是使用 Sloth 读取应用日志,进行数据清洗和维度拆分,写入 Kafka,再使用 Sloth 读取 Kafka 的数据,实时统计多维特征,实时统计多维特征 5min、30min、1 小时的 PV 和 UV,写入 Redis,供线上工程计算 CTR、CVR 以及优化搜索和推荐结果。

四、未来发展与思考

网易在流计算方面对于未来发展的思考主要包括以下五点:

  1. 实时计算平台支持 Flink On K8S 的任务

  2. 任务的自动配置功能,平台能根据业务类型,流量自动配置内存,并发度等,既保证业务 SLA,也能提升计算集群的资源利用率。

  3. 智能诊断,对 UDF 以及代码构建的流计算任务,调试成本高,运行出错让业务和平台方疲于奔命,智能诊断是流计算平台根据任务的各种 Metric 信息,直指问题所在,减少业务和平台定位问题的时间,对于存在风险的任务,可以提前给出预警,并对调优给出建议。

  4. 关注 Flink 1.9 后续对于 SQL 的支持,以及 Flink 批流统一。

  5. 更多地参与到社区中去。

作者介绍:

吴良波,网易 JAVA 技术专家,2011 年加入网易后从事 JAVA 后台系统的研发,如网易邮件反垃圾系统,网易分布式云爬虫系统等,目前负责网易实时计算平台的研发。


关注 Flink 中文社区,获取更多技术干货

你也「在看」吗?????

覆盖电商、推荐、ETL、风控等多场景,网易的实时计算平台做了啥?相关推荐

  1. 跨境电商生态大会在深举办 连连支付母公司发布新平台“LianLian Link”

    [最新报告]Facebook X Shopify跨境电商白皮书,解析Shopify成功案例及店铺优化方案 连连支付阐述了2019年跨境业务发展战略,并发布了一系列创新产品 跨境电商生态大会在深举办 连 ...

  2. 想做一个电商直播App跟上这波双十一,直播平台怎么搭建?

    想做一个电商直播App跟上这波双十一,直播平台怎么搭建? 又快到一年一度的双十一了.淘宝直播一姐曾在去年双十一,一个人卖出了3.3亿的销售额,创造了行业的销售神话.近两年,很多电商平台开始关注起直播互 ...

  3. 大数据项目实战——电商推荐系统设计

    摘要 1 项目体系架构设计 1.1系统架构设计 项目以推荐系统建设领域知名的经过修改过的中文亚马逊电商数据集作为依托,以某电商网站真实业务数据架构为基础,构建了符合实践项目的一体化的电商推荐系统,包含 ...

  4. 跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利

    2022年5月,顶象防御云业务安全情报中心监测到,某大型跨境电商平台出现大量虚假刷单欺诈.基于编号为BSI-2022-145业务安全情报显示:黑灰产通过作弊软件批量下单.真人众包分发的方式,帮助商家快 ...

  5. 跨境电商推广干货:掘金东南亚和这几个推广平台

    做跨境电商推广需要了解:东南亚成为了世界上电商销售增长最快的地区! 2022年东南亚电子商务销售额将达到896.7亿美元,比去年增加153.1亿美元.到明年,该地区将突破1000 亿美元大关,与201 ...

  6. 跨境电商「独角兽」融资40亿+,这家公司是怎么做增长的?

    PatPat 作为目前是全球增速最快,童装品类最多的 DTC 品牌,诞生到现在,7 年时间实现快速增长,多次上过 App store 主页推荐,「攻占」了全球 100 多个国家和地区的母婴市场.为什么 ...

  7. 直播开篇——电商直播系统源码直播场景和技术分析

    一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...

  8. 跨境电商亚马逊2022年再去做亚马逊好做吗

    2021年的最后一个月很多小伙伴就会问,2022年这个跨境电商,特别是亚马逊这个平台,咱们到底还能不能做,其实这个问题呢,我只是给大家讲一下目前这个平台它具体的一个情况. 那大家都知道呢,其实跨境电商 ...

  9. 小虎电商浏览器:拼多多怎么看单品实时数据

    对于拼多多商家来说,如果能看到店铺单品实时数据,是能让我们的拼多多店铺运营事半功倍的,那么拼多多怎么看单品实时数据呢?一起来看看吧. 拼多多怎么看单品实时数据 1.拼多多商家后台 进入到拼多多商品后台 ...

  10. 电商时代得流量者得天下,思域流量要怎么做

    近几年来,思域流量被叫火了,而且火得一塌糊涂.今天咱们来聊聊这一话题,希望对想借助私域流量带来增长的电商企业有所帮助. 一.什么是私域流量? 对于私域流量的解释普遍被大家认可的是指企业能自主运营,可以 ...

最新文章

  1. Matlab2013a安装简单教程以及遇到的问题解决(反复提示激活问题)
  2. python给列表中的字典按照字典中的某个键值进行排序
  3. swift_043(Swift 懒加载(lazy) )
  4. 【python3的学习之路九】函数式编程
  5. python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...
  6. JavaFX maven工程pom文件完整内容
  7. Mac下的Mysql无法登陆的问题
  8. MPEG中面向沉浸式视觉体验的标准化活动
  9. Activity跳转的数据交换问题---Activity学习笔记(二)
  10. VIM学习笔记 配置文件(vimrc)
  11. 开课吧9.9元学python靠谱吗-9月程序员工资出炉,女朋友嫌我薪资要少了
  12. 项目管理:实现按时、按预算、基于目标的交付的七个步骤
  13. 只要是[运算] 就会提升数据类型
  14. 读取ANSYS结果文件中的数据C语言,[转载][转载]如何在ANSYS中读入txt文件的数据
  15. 哈夫曼树(二)之 C++详解
  16. Unity3D资源加密解决方案
  17. js 返回值提示框不提示
  18. 老男孩Day1作业(二):三级菜单
  19. 解决ECharts中使用tooltip时鼠标移入抖动问题
  20. [内存泄漏]pppd程序导致的内存泄漏

热门文章

  1. CSS:模拟实现QQ浏览器
  2. Openlayer:学习笔记之View
  3. oracle数据泵功能,Oracle数据泵的使用(1)-Oracle
  4. Repeater控件如何让变量自增 asp.net
  5. 19所大陆高校上榜!2021泰晤士世界大学影响力排名发布
  6. 24种设计模式与6大原则
  7. mysql-proxy读写分离,负载均衡
  8. 关于VOID *在cl与gcc的不同(无意中发现)
  9. 1到20的阶乘倒数之和
  10. GridView控件 Reapter控件 DataList控件 的区别和用法