数据架构的演变

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

01 传统数据基础架构

如图1-1所示,传统单体数据架构(Monolithic Architecture)最大的特点便是集中式数据存储,企业内部可能有诸多的系统,例如Web业务系统、订单系统、CRM系统、ERP系统、监控系统等,这些系统的事务性数据主要基于集中式的关系性数据库(DBMS)实现存储,大多数将架构分为计算层和存储层。
存储层负责企业内系统的数据访问,且具有最终数据一致性保障。这些数据反映了当前的业务状态,例如系统的订单交易量、网站的活跃用户数、每个用户的交易额变化等,所有的更新操作均需要借助于同一套数据库实现。

▲图1-1 传统数据结构
单体架构的初期效率很高,但是随着时间的推移,业务越来越多,系统逐渐变得很大,越来越难以维护和升级,数据库是唯一的准确数据源,每个应用都需要访问数据库来获取对应的数据,如果数据库发生改变或者出现问题,则将对整个业务系统产生影响。
后来随着微服务架构(Microservices Architecture)的出现,企业开始逐渐采用微服务作为企业业务系统的架构体系。微服务架构的核心思想是,一个应用是由多个小的、相互独立的微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。不同的服务能依据不同的业务需求,构建的不同的技术架构之上,能够聚焦在有限的业务功能。

▲图1-2 微服务架构
如图1-2所示,微服务架构将系统拆解成不同的独立服务模块,每个模块分别使用各自独立的数据库,这种模式解决了业务系统拓展的问题,但是也带来了新的问题,那就是业务交易数据过于分散在不同的系统中,很难将数据进行集中化管理。
对于企业内部进行数据分析或者数据挖掘之类的应用,则需要通过从不同的数据库中进行数据抽取,将数据从数据库中周期性地同步到数据仓库中,然后在数据仓库中进行数据的抽取、转换、加载(ETL),从而构建成不同的数据集市和应用,提供给业务系统使用。

02 大数据数据架构

起初数据仓库主要还是构建在关系型数据库之上,例如Oracle、Mysql等数据库,但是随着企业数据量的增长,关系型数据库已经无法支撑大规模数据集的存储和分析,因此越来越多的企业开始选择基于Hadoop构建企业级大数据平台。
同时众多Sql-On-Hadoop技术方案的提出,也让企业在Hadoop上构建不同类型的数据应用变得简单而高效,例如通过使用Apache Hive进行数据ETL处理,通过使用Apache Impala进行实时交互性查询等。
大数据技术的兴起,让企业能够更加灵活高效地使用自己的业务数据,从数据中提取出更多重要的价值,并将数据分析和挖掘出来的结果应用在企业的决策、营销、管理等应用领域。但不可避免的是,随着越来越多新技术的引入与使用,企业内部一套大数据管理平台可能会借助众多开源技术组件实现。
例如在构建企业数据仓库的过程中,数据往往都是周期性的从业务系统中同步到大数据平台,完成一系列ETL转换动作之后,最终形成数据集市等应用。但是对于一些时间要求比较高的应用,例如实时报表统计,则必须有非常低的延时展示统计结果,为此业界提出一套Lambda架构方案来处理不同类型的数据。
例图1-3所示,大数据平台中包含批量计算的Batch Layer和实时计算的Speed Layer,通过在一套平台中将批计算和流计算整合在一起,例如使用Hadoop MapReduce进行批量数据的处理,使用Apache Storm进行实时数据的处理。
这种架构在一定程度上解决了不同计算类型的问题,但是带来的问题是框架太多会导致平台复杂度过高、运维成本高等。在一套资源管理平台中管理不同类型的计算框架使用也是非常困难的事情。总而言之,Lambda架构是构建大数据应用程序的一种很有效的解决方案,但是还不是最完美的方案。

▲图1-3 大数据Lambada架构
后来随着Apache Spark的分布式内存处理框架的出现,提出了将数据切分成微批的处理模式进行流式数据处理,从而能够在一套计算框架内完成批量计算和流式计算。
但因为Spark本身是基于批处理模式的原因,并不能完美且高效地处理原生的数据流,因此对流式计算支持的相对较弱,可以说Spark的出现本质上是在一定程度上对Hadoop架构进行了一定的升级和优化。

03 有状态流计算架构

数据产生的本质,其实是一条条真实存在的事件,前面提到的不同的架构其实都是在一定程度违背了这种本质,需要通过在一定时延的情况下对业务数据进行处理,然后得到基于业务数据统计的准确结果。
实际上,基于流式计算技术局限性,我们很难在数据产生的过程中进行计算并直接产生统计结果,因为这不仅对系统有非常高的要求,还必须要满足高性能、高吞吐、低延时等众多目标。
而有状态流计算架构(如图1-4所示)的提出,从一定程度上满足了企业的这种需求,企业基于实时的流式数据,维护所有计算过程的状态,所谓状态就是计算过程中产生的中间计算结果,每次计算新的数据进入到流式系统中都是基于中间状态结果的基础上进行运算,最终产生正确的统计结果。
基于有状态计算的方式最大的优势是不需要将原始数据重新从外部存储中拿出来,从而进行全量计算,因为这种计算方式的代价可能是非常高的。从另一个角度讲,用户无须通过调度和协调各种批量计算工具,从数据仓库中获取数据统计结果,然后再落地存储,这些操作全部都可以基于流式计算完成,可以极大地减轻系统对其他框架的依赖,减少数据计算过程中的时间损耗以及硬件存储。

▲图1-4 有状态计算架构
如果计算的结果能保持一致,实时计算在很短的时间内统计出结果,批量计算则需要等待一定时间才能得出,相信大多数用户会更加倾向于选择使用有状态流进行大数据处理。

04 为什么会是Flink

可以看出有状态流计算将会逐步成为企业作为构建数据平台的架构模式,而目前从社区来看,能够满足的只有Apache Flink。Flink通过实现Google Dataflow流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。
同时Flink支持高度容错的状态管理,防止状态在计算过程中因为系统异常而出现丢失,Flink周期性地通过分布式快照技术Checkpoints实现状态的持久化维护,使得即使在系统停机或者异常的情况下都能计算出正确的结果。
Flink具有先进的架构理念、诸多的优秀特性,以及完善的编程接口,而Flink也在每一次的Release版本中,不断推出新的特性,例如Queryable State功能的提出,容许用户通过远程的方式直接获取流式计算任务的状态信息,数据不需要落地数据库就能直接从Flink流式应用中查询。对于实时交互式的查询业务可以直接从Flink的状态中查询最新的结果。
在未来,Flink将不仅作为实时流式处理的框架,更多的可能会成为一套实时的状态存储引擎,让更多的用户从有状态计算的技术中获益。
从单体到Flink:一文读懂数据架构的演变
Flink的具体优势有以下几点。

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

Flink是目前开源社区中唯一一套集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。像Apache Spark也只能兼顾高吞吐和高性能特性,主要因为在Spark Streaming流式计算中无法做到低延迟保障;而流式计算框架Apache Storm只能支持低延迟和高性能特性,但是无法满足高吞吐的要求。而满足高吞吐、低延迟、高性能这三个目标对分布式流式计算框架来说是非常重要的。

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

在流式计算领域中,窗口计算的地位举足轻重,但目前大多数框架窗口计算采用的都是系统时间(Process Time),也是事件传输到计算框架处理时,系统主机的当前时间。
Flink能够支持基于事件时间(Event Time)语义进行窗口计算,也就是使用事件产生的时间,这种基于事件驱动的机制使得事件即使乱序到达,流系统也能够计算出精确的结果,保持了事件原本产生时的时序性,尽可能避免网络传输或硬件系统的影响。

3. 支持有状态计算

Flink在1.4版本中实现了状态管理,所谓状态就是在流式计算过程中将算子的中间结果数据保存在内存或者文件系统中,等下一个事件进入算子后可以从之前的状态中获取中间结果中计算当前的结果,从而无须每次都基于全部的原始数据来统计结果,这种方式极大地提升了系统的性能,并降低了数据计算过程的资源消耗。
对于数据量大且运算逻辑非常复杂的流式计算场景,有状态计算发挥了非常重要的作用。

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

在流处理应用中,数据是连续不断的,需要通过窗口的方式对流数据进行一定范围的聚合计算,例如统计在过去的1分钟内有多少用户点击某一网页,在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行再计算。
Flink将窗口划分为基于Time、Count、Session,以及Data-driven等类型的窗口操作,窗口可以用灵活的触发条件定制化来达到对复杂的流传输模式的支持,用户可以定义不同的窗口触发机制来满足不同的需求。

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

Flink能够分布式运行在上千个节点上,将一个大型计算任务的流程拆解成小的计算过程,然后将tesk分布到并行节点上进行处理。在任务执行过程中,能够自动发现事件处理过程中的错误而导致数据不一致的问题,比如:节点宕机、网路传输问题,或是由于用户因为升级或修复问题而导致计算服务重启等。
在这些情况下,通过基于分布式快照技术的Checkpoints,将执行过程中的状态信息进行持久化存储,一旦任务出现异常停止,Flink就能够从Checkpoints中进行任务的自动恢复,以确保数据在处理过程中的一致性。

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

内存管理是所有计算框架需要重点考虑的部分,尤其对于计算量比较大的计算场景,数据在内存中该如何进行管理显得至关重要。针对内存管理,Flink实现了自身管理内存的机制,尽可能减少JVM GC对系统的影响。
另外,Flink通过序列化/反序列化方法将所有的数据对象转换成二进制在内存中存储,降低数据存储的大小的同时,能够更加有效地对内存空间进行利用,降低GC带来的性能下降或任务异常的风险,因此Flink较其他分布式处理的框架会显得更加稳定,不会因为JVM GC等问题而影响整个应用的运行。

7. Save Points(保存点)

对于7*24小时运行的流式应用,数据源源不断地接入,在一段时间内应用的终止有可能导致数据的丢失或者计算结果的不准确,例如进行集群版本的升级、停机运维操作等操作。
值得一提的是,Flink通过Save Points技术将任务执行的快照保存在存储介质上,当任务重启的时候可以直接从事先保存的Save Points恢复原有的计算状态,使得任务继续按照停机之前的状态运行,Save Points技术可以让用户更好地管理和运维实时流式应用。

原文地址:https://www.cnblogs.com/linuxprobe-sarah/p/11223414.html

时间: 2024-10-11 17:49:51

数据架构的演变的相关文章

开启 J2EE(七)— Model1、Model2和三层架构的演变

Model1和Model2是Javaweb开发的两种常见的模型,Model1是jsp+javabean的模式,Model2是jsp+servlet+javabean的模式.JavaBean就是将逻辑处理.数据库访问等等,在java中对对象进行的打包(对应下文图中的业务逻辑). 下面就详细的认识认识: 一.Model1 在Model1模型中,是以JSP为中心,这种模型中JSP既要做页面显示,又要结合业务逻辑处理服务端过程,简单说就是Model1开发没有Servlet,JSP中既有HTML代码又有逻

自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第三篇,我尽量每周四篇 MIPS指令集架构自上世纪80年代出现后,一直在进行着更新换代,从最初的MIPS I到MIPS V,发展到可支持扩展模块的MIPS32.MIPS64系列,再到集成代码压缩技术的microMIPS32.microMIPS64.每个MIPS ISA都是其前一个的超集,没有任何遗漏,只有增加新的功能.       1.MIPS Ⅰ 提供加载/存储.计算.跳转.分支.协处理及其它特殊指令.该指令集架构用于最初的MIP

数据库架构的演变

 如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 最近看了很多公司架构的演变的文章,发现其中的基本思路和架构演变都很类似,这里也总结一下数据库架构的演变以及演变背后的思路. 单主机 最开始网站一般都是由典型的LAMP架构演变而来的,一般都是一台linux主机,一台apache服务器,php执行环境以及mysql服务器,一般情况下,这些都在一台虚拟主机上,简称单主机模式. 单主机模式缺点: 1 web服务器和mysql服务器公用一台主机

一种灵活的数据架构

一般来说,电商数据架构是比较复杂的,做过电商的同学都有深刻的体会.具体复杂在什么地方呢,举几个具体的例子:1  每种商品都有自己的独特属性.比如鞋子和电脑的属性是完全不一样的.如何对他们构造商品数据架构?2  如何维护它们.不至于因为业务的发展,使得数据结构变得异常复杂而无法拓展和维护?3  未来可能会卖更多种类的商品.我们人类也会发明出来更多新的商品.如何适应变化?4每秒钟的并发量十分巨大,数据架构在这方面如何考量?5商品数据配置错误,如果快速就地回滚,为线上快速止血?6如何为整个开发周期提供

linux 网站架构的演变

上一节,我们学习了linux下文件服务器NFS的搭建,了解了他的基本原理.可以说也是很简单的一个服务.今天我们学习影响互联网最重要服务web服务(应用服务).什么是web服务呢?就是我们平常在浏览器输入一个网站的地址,然后能给我们提供服务的就是web服务器.Web服务器的发展历史我就不多说了,我直接说下现在流行的搭建这种服务的常用软件.在Linux下比较常用的有三种分别是apache软件,tomcat软件,nginx软件.这三款是我在工作都接触过的,当然还有别的,其原理都是一样的,在这里我就不多

架构的演变1.0

1.0主要解决数据库压力过高而成为网站的瓶颈,网站利用数据库的主从热备功能 实现数据库的读写分离,从而改善数据库的负责压力.应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据同步从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据.为了便于应用程序访问读写分离后的数据库,通常应用服务器使用专门的数据库访问模块,使数据库读写分离对应用透明. 1.1会在下一篇文章体现,敬请期待. 架构的演变1.0

CSDN首页&gt; 云计算 孙玄:解析58同城典型技术架构及演变

转:http://www.csdn.net/article/2015-04-09/2824437 在UPYUN主办的“UPYUN Open Talk”第三期北京站上,58同城系统架构师孙玄详细介绍了58同城的商家(移动)管理平台的技术架构及演变历程,并就企业的核心O2O技术进行了专题的分享. 孙玄表示,58同城是一个分类信息网站,涵盖房产.二手车.招聘.黄页等内容,在每一个类别里都能看到方便用户交流沟通的58帮帮.58帮帮分为IM部分和非IM的业务处理部分,目前,整个帮帮系统每天要处理10亿次+

企业架构,业务架构,数据架构

我们将核心价值链上的端到端总结为两个核心,其一是供应链的端到端流程和业务:其二是产品研发的端到端和业务.各个企业由于类型不同往往对两条价值链各有 侧重.生产代工类企业没有自己的产品研发,那么只有供应链:高科技研发企业可以做到卖产品核心技术和专利,不做具体供应链方面事情.而更多的生产制造型企 业往往是1和2两者的一个有机结合. 再谈企业架构和业务架构: 企业架构本身强调的是业务驱动IT,业务和IT的匹配和融合而不是两张皮,在这里可以看到核心我们关注的点包括流程,活动,数据,组织,资源五个方面的内容

大数据架构开发 挖掘分析 Hadoop HBase Hive Storm Spark ZooKeeper Redis MongoDB 机器学习 云计算

培训大数据架构开发.挖掘分析! 从零基础到高级,一对一培训![技术QQ:2937765541] ----------------------------------------------------------------------------------------------------------------- 课程体系: 获取视频资料和培训解答技术支持地址 课程展示(大数据技术很广,一直在线为你培训解答!):    获取视频资料和培训解答技术支持地址