hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

滴滴及时盘算生长之路及平台架构实践

2019-11-18杂谈搜奇网37°c
A+ A-

toc: true
title: 滴滴及时盘算生长之路及平台架构实践
date: 2019-08-25
tags:

  • Flink
  • 大数据

滴滴的中心营业是一个及时在线效劳,因而具有雄厚的及时数据和及时盘算场景。本文将引见滴滴及时盘算生长之路以及平台架构实践。

及时盘算演进

跟着滴滴营业的生长,滴滴的及时盘算架构也在疾速演化。到现在为止也许阅历了三个阶段:

  • 营业方自建小集群阶段;

  • 集中式大集群、平台化阶段;

  • SQL化阶段。

下图标识了个中重要的里程碑,稍后会给出细致论述:

在2017年之前,滴滴并没有一致的及时盘算平台,而是各个营业方自建小集群。个中用到的引擎有Storm、JStorm、Spark Streaming、Samza等。营业方自建小集群形式存在以下弊病:

  • 须要预先采购大批机械,由于单个营业独有,资本运用率一般比较低;

  • 缺少有用的监控报警体系;

  • 保护难度大,须要牵扯营业方大批精神来保证集群的稳定性;

  • 缺少有用手艺支撑,且各自沉淀的东西难以同享。

为了有用处置惩罚以上题目,滴滴从2017年年初开始构建一致的及时盘算集群及平台。

手艺选型上,我们基于滴滴近况挑选了内部用大规模数据洗濯的Spark Streaming引擎,同时引入On-YARN形式,并运用YARN的多租户体系构建了认证、鉴权、资本断绝、计费等机制。

相关于离线盘算,及时盘算使命关于稳定性有着更高的请求,为此我们构建了两层资本断绝体系:

  • 第一层是基于CGroup做历程(Container)级别的CPU及内存断绝;

  • 第二层是物理机械级别的断绝。

我们经由历程革新YARN的FairScheduler使其支撑Node Label。到达的结果以下图所示:

一般营业的使命混跑在同一个Label机械上,而特别营业的使命跑在专用Label的机械上。

经由历程集中式大集群和平台化建立,基础消除了营业方自建小集群带来的弊病,及时盘算也进入了第二阶段。

伴跟着营业的生长,我们发明Spark Streaming的Micro Batch形式在一些低延时的报警营业及在线营业上显得左支右绌。因而我们引入了基于Native Streaming形式的Flink作为新一代及时盘算引擎。

Flink不仅延时能够做到毫秒级,而且供应了基于Process Time/Event Time雄厚的窗口函数。基于Flink我们团结营业方构架了滴滴流量最大的营业网关监控体系,并疾速支撑了诸如搭客位置变化关照、轨迹异常检测等多个线上营业。

及时盘算平台架构

为了最大水平轻易营业方开辟和治理流盘算使命,我们构建了如图所示的及时盘算平台:

在流盘算引擎基础上供应了StreamSQL IDE、监控报警、诊断体系、血缘关联、使命管控等才能。各自的作用以下:

  • StreamSQL IDE。下文会引见,是一个Web化的SQL IDE;

  • 监控报警。供应使命级的存活、延时、流量等监控以及基于监控的报警才能;

  • 诊断体系。包含流量曲线、Checkpoint、GC、资本运用等曲线视图,以及及时日记检索才能。

  • 血缘关联。我们在流盘算引擎中内置了血缘上报才能,进而在平台上显现流使命与上下游的血缘关联;

  • 使命管控。完成了多租户体系下使命提交、启停、资产治理等才能。经由历程Web化使命提交消除了传统客户机形式,使得平台进口完整可控,内置参数及版本优化得以疾速上线。

及时划定规矩婚配效劳建立

在滴滴内部有大批的及时运营场景,比方“某都市搭客冒泡后10秒没有下单”。针对这类检测事宜之间依靠关联的场景,用Fink的CEP是异常适宜的。

然则社区版本的CEP不支撑形貌言语,每一个划定规矩须要开辟一个运用,同时不支撑动态更新划定规矩。为了处置惩罚这些题目,滴滴做了大批功用扩大及优化事情。功用扩大方面重要修改有:

  • 支撑wait算子。关于适才例子中的运营划定规矩,社区版本是表达不了的。滴滴经由历程增添wait算子,完成了这类需求;

  • 支撑DSL言语。基于Groovy和Aviator剖析引擎,我们完成了以下图所示的DSL形貌划定规矩才能:

  • 单使命多划定规矩及划定规矩动态更新。由于及时运营划定规矩由一线运营同学来设置,所以划定规矩数目,划定规矩内容及划定规矩生命周期会常常发生变化。这类状况每一个划定规矩一个运用是不太实际的。为此我们开辟了多划定规矩形式且支撑了动态更新。

除了功用拓展以外,为了应对大规模运营划定规矩的应战,滴滴在CEP机能上也做了大批优化,重要有:

  • SharedBuffer重构。基于Flink MapState重构SharedBuffer,削减每次数据处置惩罚历程当中的状况交互。同时剥离划定规矩和用户数据极大下降每次婚配的时刻从状况中反序列化的数据量;

  • 增添接见缓存(已孝敬社区)。缓存SharedBuffer数据中每次处置惩罚所须要更新的援用计数,延缓更新;

  • 简化event time语义处置惩罚。防止key在很疏散状况下每次watermark更新时要遍历一切key的数据;

  • 复用conditionContext(已孝敬社区)。削减前提查询时对partialMatch元素的重复查询。

以上优化将CEP机能提升了多个数目级。合营功用扩大,我们在滴滴内部供应了如图所示的效劳形式:

营业方只须要洗濯数据并供应划定规矩列表API即可具有担任划定规矩的及时婚配才能。

现在滴滴CEP已在快车个性化运营、及时异常工单检测等营业上落地,取得了优越的结果。

StreamSQL建立

正如离线盘算中Hive之于MapReduce一样,流式SQL也是必定的生长趋势。经由历程SQL化能够大幅度下降营业方开辟流盘算的难度,营业方不再须要进修Java/Scala,也不须要明白引擎实行细节及各种参数调优。

为此我们在2018年启动了StreamSQL建立项目,在社区Flink SQL基础上拓展了以下才能:

扩大DDL语法。以下图所示,买通了滴滴内部主流的音讯行列以及及时存储体系(StreamSQL内置买通音讯行列及实行存储):

  • 经由历程内置罕见音讯花样(如json、binlog、规范日记)的剖析才能,使得用户能够轻松写出DDL语法,并防止重复写花样剖析语句。

  • 拓展UDF。针对滴滴内部罕见处置惩罚逻辑,内置了大批UDF,包含字符串处置惩罚、日期处置惩罚、Map对象处置惩罚、空间位置处置惩罚等。

  • 支撑分流语法。单个输入源多个输出流在滴滴内部异常罕见,为此我们革新了Calcite使其支撑分流语义。

  • 支撑基于TTL的join语义。传统的Window Join由于存在window边境数据突变状况,不能满足滴滴内部的需求。为此我们引入了TTL State,并基于此开辟了基于TTL Join的双流join以及维表join。

  • StreamSQL IDE。前文提到平台化今后我们没有供应客户机,而是经由历程Web提交和管控使命。因而我们也响应开辟了StreamSQL IDE,完成Web上开辟StreamSQL,同时供应了语法检测、DEBUG、诊断等才能。

现在StreamSQL在滴滴已胜利落地,流盘算开辟本钱获得大幅度下降。预期将来将负担80%的流盘算营业量。

总结

作为一家出行范畴的互联网公司,滴滴对及时盘算有天然的需求。

过去的一年多时间里,我们从零构建了集中式及时盘算平台,改变了营业方自建小集群的局势。为满足低延时营业的需求,胜利落地了Flink Streaming,并基于Flink构建了及时划定规矩婚配(CEP)效劳以及StreamSQL,使得流盘算开辟才能大幅度下降。将来将进一步拓展StreamSQL,并在批流一致、IoT、及时机械进修等范畴探究和建立。

关注我

微信民众号:zhisheng

别的我本身整理了些 Flink 的进修材料,现在已悉数放到微信民众号(zhisheng)了,你能够复兴关键字:Flink 即可无前提猎取到。别的也能够加我微信 你能够加我的微信:yuanblog_tzs,讨论手艺!

更多私密材料请到场学问星球!

Github 代码堆栈

https://github.com/zhisheng17/flink-learning/

今后这个项目的一切代码都将放在这个堆栈里,包含了本身进修 flink 的一些 demo 和博客

博客

1、Flink 从0到1进修 —— Apache Flink 引见

2、Flink 从0到1进修 —— Mac 上搭建 Flink 1.6.0 环境并构建运转简朴顺序入门

3、Flink 从0到1进修 —— Flink 设置文件详解

4、Flink 从0到1进修 —— Data Source 引见

5、Flink 从0到1进修 —— 怎样自定义 Data Source ?

6、Flink 从0到1进修 —— Data Sink 引见

7、Flink 从0到1进修 —— 怎样自定义 Data Sink ?

8、Flink 从0到1进修 —— Flink Data transformation(转换)

9、Flink 从0到1进修 —— 引见 Flink 中的 Stream Windows

10、Flink 从0到1进修 —— Flink 中的几种 Time 详解

11、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 ElasticSearch

12、Flink 从0到1进修 —— Flink 项目怎样运转?

13、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 Kafka

14、Flink 从0到1进修 —— Flink JobManager 高可用性设置

15、Flink 从0到1进修 —— Flink parallelism 和 Slot 引见

16、Flink 从0到1进修 —— Flink 读取 Kafka 数据批量写入到 MySQL

17、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 RabbitMQ

18、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 HBase

19、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 HDFS

20、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 Redis

21、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 Cassandra

22、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 Flume

23、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 InfluxDB

24、Flink 从0到1进修 —— Flink 读取 Kafka 数据写入到 RocketMQ

25、Flink 从0到1进修 —— 你上传的 jar 包藏到那里去了

26、Flink 从0到1进修 —— 你的 Flink job 日记跑到那里去了

27、阿里巴巴开源的 Blink 及时盘算框架真香

28、Flink 从0到1进修 —— Flink 中怎样治理设置?

29、Flink 从0到1进修—— Flink 不能够一连 Split(分流)?

30、Flink 从0到1进修—— 分享四本 Flink 外洋的书和二十多篇 Paper 论文

31、Flink 架构、道理与布置测试

32、为何说流处置惩罚即将来?

33、OPPO 数据中台之基石:基于 Flink SQL 构建及时数据堆栈

34、流盘算框架 Flink 与 Storm 的机能对照

35、Flink状况治理和容错机制引见

36、Apache Flink 连系 Kafka 构建端到端的 Exactly-Once 处置惩罚

37、360深度实践:Flink与Storm协定级对照

38、怎样基于Flink+TensorFlow打造及时智能异常检测平台?只看这一篇就够了

39、Apache Flink 1.9 严重特征提早解读

40、Flink 全网最全资本(视频、博客、PPT、入门、道理、实战、机能调优、源码剖析、问答等延续更新)

41、Flink 魂魄两百问,这谁顶得住?

42、Flink 从0到1进修 —— 怎样运用 Side Output 来分流?

43、你公司究竟需不须要引入及时盘算引擎?

44、一文让你完全相识大数据及时盘算引擎 Flink

源码剖析

1、Flink 源码剖析 —— 源码编译运转

2、Flink 源码剖析 —— 项目构造一览

3、Flink 源码剖析—— local 形式启动流程

4、Flink 源码剖析 —— standalone session 形式启动流程

5、Flink 源码剖析 —— Standalone Session Cluster 启动流程深度剖析之 Job Manager 启动

6、Flink 源码剖析 —— Standalone Session Cluster 启动流程深度剖析之 Task Manager 启动

7、Flink 源码剖析 —— 剖析 Batch WordCount 顺序的实行历程

8、Flink 源码剖析 —— 剖析 Streaming WordCount 顺序的实行历程

9、Flink 源码剖析 —— 怎样猎取 JobGraph?

10、Flink 源码剖析 —— 怎样猎取 StreamGraph?

11、Flink 源码剖析 —— Flink JobManager 有什么作用?

12、Flink 源码剖析 —— Flink TaskManager 有什么作用?

13、Flink 源码剖析 —— JobManager 处置惩罚 SubmitJob 的历程

14、Flink 源码剖析 —— TaskManager 处置惩罚 SubmitJob 的历程

15、Flink 源码剖析 —— 深度剖析 Flink Checkpoint 机制

16、Flink 源码剖析 —— 深度剖析 Flink 序列化机制

17、Flink 源码剖析 —— 深度剖析 Flink 是怎样治理好内存的?

18、Flink Metrics 源码剖析 —— Flink-metrics-core

19、Flink Metrics 源码剖析 —— Flink-metrics-datadog

20、Flink Metrics 源码剖析 —— Flink-metrics-dropwizard

21、Flink Metrics 源码剖析 —— Flink-metrics-graphite

22、Flink Metrics 源码剖析 —— Flink-metrics-influxdb

23、Flink Metrics 源码剖析 —— Flink-metrics-jmx

24、Flink Metrics 源码剖析 —— Flink-metrics-slf4j

25、Flink Metrics 源码剖析 —— Flink-metrics-statsd

26、Flink Metrics 源码剖析 —— Flink-metrics-prometheus

26、Flink Annotations 源码剖析

27、Flink 源码剖析 —— 怎样猎取 ExecutionGraph ?

28、大数据重磅炸弹——及时盘算框架 Flink

29、Flink Checkpoint-轻量级分布式快照

30、Flink Clients 源码剖析
原文出处:zhisheng的博客,迎接关注我的民众号:zhisheng

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
滴滴及时盘算生长之路及平台架构实践

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282279.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>