从单体到Flink:一文读懂数据架构的演变

从单体到Flink:一文读懂数据架构的演变

01 传统数据基础架构

如图1-1所示,传统单片体系结构的最大特点是集中式数据存储。企业内部可能有许多系统,如网络业务系统、订单系统、客户关系管理系统、企业资源规划系统、监控系统等。这些系统的事务数据主要基于集中式关系数据库进行存储,大多数系统将体系结构分为计算层和存储层。

存储层负责企业内系统的数据访问,并拥有最终的数据一致性保证。这些数据反映了当前的业务状态,如系统的订单交易量、网站的活跃用户数、每个用户的交易量变化等。所有更新操作都需要通过同一组数据库来实现。

从单体到Flink:一文读懂数据架构的演变

▲图1-1传统数据结构

单一架构的初始效率很高,但是随着时间的推移,业务越来越多,系统逐渐变得越来越大,维护和升级也越来越困难。数据库是唯一准确的数据源。每个应用程序都需要访问数据库来获得相应的数据。如果数据库发生变化或出现问题,将会影响整个业务系统。

后来,随着微服务架构(Microservices Architecture)的出现,企业开始逐渐采用微服务作为企业业务系统的架构系统。微服务架构的核心思想是一个应用程序由几个小型独立的微服务组成。这些服务在它们自己的过程中运行,不依赖于开发或发布。不同的服务可以基于不同的业务需求,构建不同的技术架构,并专注于有限的业务功能。

如图1-2所示,微服务架构将系统分解成不同的独立服务模块,每个模块使用自己的独立数据库。这种模式解决了业务系统扩展的问题,但也带来了新的问题,即业务交易数据过于分散在不同的系统中,难以集中数据管理。

对于企业内的数据分析或数据挖掘等应用程序,有必要通过从不同数据库提取数据,定期将不同数据库的数据同步到数据仓库,然后提取、转换和加载数据仓库中的数据,以构建不同的数据集市和应用程序供业务系统使用。

02 大数据数据架构

起初,数据仓库主要建立在关系数据库上,如甲骨文、Mysql等数据库。然而,随着企业数据量的增长,关系数据库不再支持大规模数据集的存储和分析。因此,越来越多的企业选择基于Hadoop构建企业级大数据平台。

同时,许多Sql-On-Hadoop技术方案的提出也使得企业在Hadoop上构建不同类型的数据应用变得简单而高效,比如使用Apache Hive进行数据的ETL处理,使用Apache Impala进行实时交互查询。

大数据技术的兴起使企业能够更加灵活高效地使用自己的业务数据,从数据中提取更重要的价值,并将数据分析和挖掘的结果应用于企业决策、营销、管理等应用领域。然而,随着越来越多新技术的引入和使用,一个企业内的一套大数据管理平台不可避免地会通过许多开源技术组件来实现。

例如,在构建企业数据仓库的过程中,数据通常会定期从业务系统同步到大数据平台。在完成一系列ETL转换动作之后,像数据集市这样的应用程序最终形成了。但是,对于一些具有高时间要求的应用程序,例如实时报告统计数据,在显示统计结果时必须有非常低的延迟。因此,业界提出了一个λ架构方案来处理不同类型的数据。

如图1-3所示,大数据平台包括批量计算的批处理层和实时计算的速度层。例如,通过在一个平台中集成批处理计算和流计算,Hadoop MapReduce用于处理批处理数据,Apache Storm用于处理实时数据。

这种架构在一定程度上解决了不同计算类型的问题,但问题是太多的框架会导致高平台复杂性和高运行维护成本。在阿瑟,管理不同类型计算框架的使用也非常困难

后来,随着Apache Spark的分布式内存处理框架的出现,提出了一种将数据分成微批次进行流数据处理的处理模式,从而可以在一套计算框架内完成批量计算和流计算。

但是,由于Spark本身是基于批处理模式的,它无法完美高效地处理本机数据流,因此它对流式计算的支持相对较弱。可以说,Spark本质上在一定程度上升级和优化了Hadoop架构。

03 有状态流计算架构

数据生成的本质实际上是真实事件。上述不同的架构实际上在一定程度上违背了这一本质。有必要在一定的时间延迟下处理业务数据,然后根据业务数据统计获得准确的结果。

事实上,由于流计算技术的限制,我们在数据生成过程中很难计算和直接生成统计结果,因为它不仅对系统要求很高,而且必须满足高性能、高吞吐量、低延迟等诸多目标。

但是,所提出的状态流计算架构(如图1-4所示)在一定程度上满足了企业的需求。企业基于实时流数据维护所有计算过程的状态。所谓状态是在计算过程中产生的中间计算结果。每当新数据被计算到流系统中时,基于中间状态结果来执行计算,并且最终生成正确的统计结果。

有状态计算的最大优势在于它不需要再次将原始数据从外部存储中取出,以便进行全面计算,因为这种计算方法的成本可能非常高。从另一个角度来看,用户不需要调度和协调各种批处理计算工具来从数据仓库获得数据统计结果,然后将其存储在地面上。所有这些操作都可以基于流计算来完成,这可以大大减少系统对其他框架的依赖,减少数据计算过程中的时间损失和硬件存储。

如果计算结果一致,实时计算可以在很短的时间内对结果进行计数,批量计算需要等待一定的时间才能得到结果。据信,大多数用户更喜欢使用有状态流进行大数据处理。

04 为什么会是Flink

可以看出,有状态流计算将逐渐为企业构建数据平台的架构模式,但目前从社区的角度来看,只有Apache Flink能够满足。Flink通过实现谷歌数据流流计算模型,实现了高吞吐量、低延迟、高性能和实时流计算框架。

同时Flink支持高度容错的状态管理,以防止在计算过程中由于系统异常而丢失状态。Flink通过分布式快照技术检查点定期实施持续状态维护,即使系统停机或异常,也可以计算正确的结果。

Flink拥有先进的架构概念、许多优秀的特性和完美的编程接口。Flink还在每个版本中不断引入新功能,如引入可查询状态(Queryable State)功能,允许用户通过远程方式直接获取流式计算任务的状态信息。可以直接从Flink流媒体应用程序中查询数据,而不需要登录数据库。对于实时交互式查询服务,可以从Flink的状态直接查询最新结果。

未来,Flink不仅将作为实时流的框架,还将成为一套实时状态存储引擎,让更多的用户受益于状态计算技术。

Flink的具体优势有以下几点。

1. 同时支持高吞吐、低延迟、高性能

Flink是开源社区中唯一集成高吞吐量、低延迟和高性能的分布式流数据处理框架。例如,Apache Spark只能考虑高吞吐量和高性能,主要是因为在Spark串流计算中无法保证低延迟。流式计算框架Apache Storm只能支持低延迟和高性能,但不能满足高吞吐量的要求。分布式流计算框架要达到高吞吐量、低延迟和高性能三个目标,这一点非常重要。

2. 支持事件时间(Event Time)概念

在流计算中起着重要的作用,但是大多数帧窗口计算目前使用的是处理时间,即als

Flink可以支持基于事件时间语义的窗口计算,即使用事件生成时间。这种事件驱动机制使得流量系统即使在事件无序到达时也能计算出准确的结果,保持事件原始生成的时序,并尽可能避免网络传输或硬件系统的影响。

3. 支持有状态计算

Flink在1.4版中实现了状态管理。所谓的状态是在流计算过程中将操作者的中间结果数据保存在存储器或文件系统中。在下一个事件进入运算符后,当前结果可以从从先前状态获得的中间结果中计算出来,因此没有必要每次都基于所有原始数据对结果进行计数。这种方式大大提高了系统的性能,减少了数据计算过程中的资源消耗。

有状态计算在具有大量数据和非常复杂的操作逻辑的流计算场景中扮演着非常重要的角色。

4. 支持高度灵活的窗口(Window)操作

在流处理应用程序中,数据是连续的。有必要通过一个窗口在一定范围内聚集流数据。例如,我们可以计算在过去一分钟内有多少用户点击了一个网页。在这种情况下,我们必须定义一个窗口来收集最近一分钟的数据,并重新计算该窗口中的数据。

Flink根据时间、计数、会话、数据驱动等将窗口分为窗口操作。可以使用灵活的触发条件定制窗口,以支持复杂的流模式,用户可以定义不同的窗口触发机制来满足不同的需求。

5. 基于轻量级分布式快照(Snapshot)实现的容错

Flink可以分布式方式在数千个节点上运行,将大型计算任务的流程分解为小型计算进程,然后将tesk分发到并行节点进行处理。在任务执行过程中,可以自动发现事件处理中的错误导致的数据不一致的问题,如节点停机、网络传输问题或用户升级或修复问题导致的计算服务重启等。

在这些情况下,执行过程中的状态信息通过基于分布式快照技术的检查点持久存储。一旦任务异常停止,Flink可以自动从检查点恢复任务,以确保处理过程中数据的一致性。

6. 基于JVM实现独立的内存管理

memory management是所有计算框架的重要组成部分,尤其是对于计算量大的计算场景,如何管理内存中的数据非常重要。对于内存管理,Flink实现了自己的内存管理机制,以最小化JVM垃圾回收对系统的影响。

此外,Flink通过序列化/反序列化的方法将所有数据对象转换成二进制存储在内存中,这可以减小数据存储的大小,同时可以更有效地利用内存空间,降低由气相色谱引起的性能下降或任务异常的风险。因此Flink比其他分布式处理框架更加稳定,不会因为JVM垃圾收集和其他问题而影响整个应用程序的运行。

7. Save Points(保存点)

对于每天7*24小时运行的流式应用程序,数据会被连续访问。在一段时间内终止应用程序可能会导致数据丢失或计算结果不准确,例如升级集群版本、关机操作和维护操作等。

值得一提的是Flink通过保存点技术将任务执行的快照保存在存储介质上。当任务重新启动时,Flink可以直接参与先前保存的保存点(Save Points)以恢复原始计算状态,以便任务继续在关机前的状态下运行。保存点技术使用户能够更好地管理和操作实时流应用程序。

极牛网精选文章《从单体到Flink:一文读懂数据架构的演变》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://jikenb.com/3910.html

发表评论

登录后才能评论