数据堆栈发展历史与架构演进

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

 从1990年代Bill Inmon提出数据堆栈概念后颠末四十多的发展,经历了早期的PC时代、互联网时代、移动互联网时代再到当前的云盘算时代,但是数据堆栈的构建目标根本没有变化,都是为了支持企业或者用户的决议分析,包罗运营报表、企业营销、用户画像、BI分析等。
广义上看数据库堆栈并不是一项技能或者产物而是数据处理过程,从差别的数据源举行数据汇合,然后颠末数据的统一建模成适合于分析的数据模型,终极辅助企业的决议分析。这个过程涉及到ETL、数据建模及数据可视化等一系列实现,这也是与数据库的本质区别。
随着盘算机科学技能发展与产业厘革,数据堆栈在应对从数据特征呈现多样化、海量化到业务特征复杂化、智能化及及时化等,再到基础设施(存储、网络及盘算资源)本事的提拔、云盘算技能的发展等变化,数仓的整个体系也在连续演进中,这里从数据堆栈的体系架构及内核引擎的实现角度去分析数据堆栈的发展过程,根本上如下图所示:


从数仓的焦点本事去分析各个阶段实现的变化,我将重点分析以下几个方面:


  • 存储引擎:重要是数据的组织方式,界说了数据怎样存储及压缩、索引的创建和更新、锁机制、事务及缓存管理等。在数仓中数据是面向主题的将数据举行整理归纳和重组,这是进步数据分析性能的焦点,在分析过程只需要处理部分维度的数据,并且大量的统计任务需要举行数据的扫描或者准确检索,因此存储引擎的公道计划是数仓架构发展的重要部分。
  • 盘算引擎:分析型任务涉及到大量的盘算,盘算服从往往会成为数据库体系的瓶颈,盘算模型(框架)、优化技能、和运行中间数据的处理等都是数仓演进的突破点。MPP盘算、分布式流盘算、分布式批盘算等都有相应的利用场景,在详细的算子执行过程中向量盘算、编译执行及硬件加快技能等都是比年有用的提拔性能的方法。
  • 技能实现架构,数据库可以基于功能分为存储、盘算及管理等层次,这些功能的运行机制影响着体系的灵活性、可运维性、资源及分析的性能等。云盘算的出现为数仓架构的演进提供了新的方向,赋予数仓得到自服务、弹性等本事,同时目前企业将基础体系、平台部署到云端降低信息化建设资源及优化运行管理流程等成为趋势。
数据堆栈的演进厘革的因素有很多,比方快速的业务模式与群体规模的数据量带来的大数据处理技能、互联网的发展带来的数据源及数据范例的增多、人工智能的发展带来数智的融合、云盘算交付模式的出现需要的细粒度的资源管理与隔离等,业务及时性的要求等都会带来数据堆栈架构的变化。这里只分析差别阶段数据堆栈的焦点特性的变化,其他的内容可以逐步分析。

1.初代数仓(单体分析型数据库)

这个阶段是数据堆栈概念提出后,数据库厂商传统数据库的基础上团结数仓方法论提供的数仓产物。在这个阶段数仓的数据来自于CRM、ERP等业务数据,数据量小多GB级别,数据范例根本上是结构化数据,而且产生的周期按天或者周为单位,因此对数据堆栈的要求不高,根本上是单机(性能较高的商用主机,比方中小型机器)分析型数据库,以Oracle、DB2、SQL Server、SybaseIQ等为代表。


这些数据堆栈产物从本质上是关系型数据库,利用ETL工具实现多种异构数据源的有用集成与处理,并按照主题的方式举行数据举行重新整合,即按照数仓的维度模型举行归一化构建。这些数据库的计划是为了决议分析而举行的,比方利用位图化索引、按列存储、数据压缩及与众差别的锁机制,这些特性都极大进步了查询引擎的性能。这个阶段的数据堆栈重要会合在金融、电信、大型零食及制造等行业。

2.传统MPP数据堆栈

随着业务的发展,单机数据堆栈的数据存储和盘算模式不能满足大量数据处理的需求,在这个配景下基于MPP架构的数据堆栈成为主流的办理方案,这阶段的数仓产物以在2000年代后出现的Teradata、Greenplum、Vertica等为代表。MPP(Massively Parallel Processing),大规模并行处理架构,更适合于复杂的数据处理和综合分析,典型实现如下图所示:


这种架构重要的特征如下:


  • Shared Nothing,节点之间不共享存储、盘算资源和磁盘,节点之间仅通过网络通讯。
  • 数据按照特定的规则举行当地化存储,比方基于特定分布式键上按照Hash规则分布到全部节点上。
  • 完全对称的并行执行策略,每个节点都参与盘算,并且节点上执行的任务逻辑完全一致。
  • 任务按照流水线的方式举行组织执行,任务之间数据的传递以流水线的方式来举行,数据的流转在内存中举行,制止了数据积压的时间开销。任务的流水线执行使得MPP数据库具有优秀的性能。
这种架构可以实现横向扩展的方式,利用普通主机就可以构建较大规模的集群体系,通过并行化来实现快速的分析任务的快速执行,同时更具有资源优势。
在这个阶段的MPP架构在技能实现基于传统数据库实例举行扩展,比方Greenplum、ADB for PG等都是基于PostgreSQL内核举行开发,在集群中每个节点都是一个独立的数据库实例,具有独立的体系表、用户表等,数据是按照某种策略分布到差别的实例中。客户端在发起请求后由管理节点生成查询计划并举行并行化调度,当涉及到多个节点的数据交换时,比方HashJoin的执行,引入数据交换算子,如下图所示:


管理节点分布到每个节点的查询计划是相同的,在执行时如果需要每个节点扫描本身地点节点的数据,当需要举行数据交换时调用Motion算子发送到其他节点,比方Join盘算中符合过滤条件的右表数据,最后在管理节点上通过GatherMotion举行查询效果的汇总。
MPP数仓它是团体向外提供服务,每台节点无法单独运行局部数据,数据在存储时通过一定的策略举行分布,存储位置是不透明的,因此在执行任务时由于无法断定命据的位置,导致任务会在全部节点上执行,同时在盘算过程中涉及到锁、事务、内外存交互等问题,所以当数据到达一定规模后就会出现性能的瓶颈问题。当集群或者数据量到达一定程度后,节点的故障资源较高,查询任务在某个节点故障时需要重启整个任务。
另一个缺点是存算耦合的架构,节点举行扩缩容时需要举行数据的重新分布,整个操作的过程会由于耗费大量IO请求引起业务处理速度的下降,影响客户的正常查询需求,最后是无法动态顺应业务的发展。对于差别的请求,比方导入类任务耗费大量IO、网络带宽,但是CPU的利用率较低。复杂的查询任务CPU的资源斲丧非常大,因此资源规格的需求是差别的,但是MPP架构很难满足这些需求。因此这种架构的数仓集群的规模不能太大,适用于中等规模的企业数据处理场景,通常不高出数百级别,因此支持的数据体量很少高出PB级别。

3.大数据OLAP引擎

随着移动互联网、物联网的发达发展带动了大数据的发展,数据处理种类的多样化、数据量不断变大、快速的数据流转等对体系有了新的要求,大数据框架从底层数据存储机制、盘算模型(分布式批处理、内存及流盘算等)到数据的集成等都发生了革命性的变化。其中Hadoop生态技能被广泛利用,数据堆栈在大数据配景下建设的理论和目标是相同的。
根据大数据架构模式可以分为三个方向如下图所示:




  • 大数据数仓
传统的MPP数据堆栈的出现是为了办理大数据量和性能的问题,但是随着大数据的发展,需要产生新的大数据处理技能和架构模式。在存储引擎上以HDFS为代表的分布式存储、在盘算框架上出现了MR、Spark(DAG)和Flink等。
MapReduce盘算框架
DAG盘算框架
基于大数据构建等数仓产物很多,比方Hive、Kylin等,这些产物利用大数据的盘算框架、底层直接读取文件体系中的数据,如下图所示:


这些数仓可以看到做事传统数仓各个引擎部分更换成大数据体系中的组件,在Hive中执行引擎更换成MapReduce及存储引擎更换成HDFS,为了增加及时性淘汰数据的落地执行引擎集成了Spark。
大数据数仓产物并不是某个单独运行的产物,而是一系列大数据组件遵循数据的处理流程的“范式”,比方离线数仓、流式数仓、及时数仓Lambda架构或者及时数仓Kappa架构在大数据组件的利用及数据的流转上是差别的,这里以Lambda为例,架构为例:


Kappa架构与Lamda架构相比更多关注于流处理部分,但是在真实中用户并不会完全遵循规范的架构而是举行混淆利用,在比年还提出的IOTA的架构模式,基于AI生态下的全新的数据架构模式。
大数据数仓是一个松散的遵循某种规范的体系套件组合,涉及到数据的传输、盘算(批处理、流处理)、存储及服务等组件,其长处在于可以支持PB以上级别的数据处理且具有较强的扩展性,但是缺点是性能及架构复杂。



  • 湖仓
数据湖概念在2010年被提出,其特征是以原始格式存储数据的存储库或者文件体系,无需对数据举行结构化处理,并且通常是将数据存储在开放的格式中,比方Parquet、ORC等。湖仓是将数据湖具有低资源的开放格式的存储本事和数据堆栈的管理和优化本事团结在一起,典型的湖仓架构如下图所示:


从数据流转和盘算来看与大数据数仓根本相同,焦点的变化在于利用数据湖存储格式,比方Hudi、Iceberg、Delta Lake等举行数据的组织,办理了数据湖松散的文件结构问题,并在此基础上提供统一的元数据管理本事,实现各种数据库和数据堆栈的元数据无缝买通和管理。
数据湖存储格式是湖仓运行的焦点,其通过良好的抽象对接数据存储和元数据管理,格式如下图所示:


通过界说存储格式为数据湖添加了管理特性,如数据一致性、版本控制、增量处理及事务等,除外还通过表文件列式存储及压缩、表索引信息、谓词下推来加快SQL引擎的查询本事,简单来说数据湖存储格式提供了传统数据堆栈存储引擎中的日志模块相同的功能。



  • 湖仓分体模式
从上面介绍的大数据架构的数仓本事来看为了支持大数据量处理、扩展性和容错性等本事,将差别的组件按照一定的架构“范式”举行叠加,存在架构极其复杂且维护资源很高,接纳分布式处理框架查询性能比力低,而且事务支持较弱等问题,因此无法替代传统数仓。但是传统数仓存在集群规模小、并发本事不高、动态扩展性差等问题,因此业界出现了大数据数仓和传统数仓举行互补的新式架构的数仓。在大数据的存储本事基础上利用MPP的架构优势进步盘算的及时型,典型数仓产物Impala、Presto/Trino、Hawq等产物,这里以Impala为例,其架构如下图所示:


Impala Daemon历程安装在全部节点上,通常与DN部署在一起,方便于数据的当地盘算。管理节点对外提供服务,并且维护表的元数据、资源信息及各节点的康健状况。Coordinator会查询HDFS文件获取此次查询的数据地点的位置以及存储方式的信息。
查询请求提交到集群后由FE举行剖析并生成查询计划,在这个过程中会将执行计划转换成分布式并行物理执行计划,如下图所示:
单机执行计划
分布式并行执行计划

分布式并行执行计划是在单机执行计划的基础上,团结数据分布式存储的特点,将其拆分为多个子任务,每个子任务都是可以并行执行,待执行后将效果举行全局的聚合。
详细来说在这种框架下数据存储在分布式架构的存储体系中,分散存储到多个节点上实现数据的分区容错性和扩展性,然后在上层利用MPP的并行盘算本事来优化数据查询和盘算等任务,淘汰运算耽误,进步处理服从。

4.新架构及时数仓

上面介绍的大数据配景下的数仓并不能称之为数仓产物,不管是Hive、Kylin、Impala、Presto还是湖仓,这些姑且可以称之为OLAP引擎,要提供数仓的本事还要与其他组件,比方分布式存储、元数据管理及数据传输等举行组合来作为团体来提供数仓服务。
但是大数据和数据堆栈从概念和目标上是差别的,大数据体系是实现一个以原始格式举行数据存储和管理的基础设施,来满足差别的异构数据存储和盘算需求。本质上需要灵活的标准来实现数据的集成、数据管理与对外提供数据服务等,因此从产物形态上看大数据体系下的数据堆栈本事更像是一种架构引导,还可以在相同的基础本事上提供机器学习、数据挖掘、数据集市等各种本事。但是数据堆栈从概念上看是一个面向主题、集成、相对稳定和反映历史变化的数据聚集,在数据堆栈中信息是在差别的业务体系中举行集成,并颠末一系列加工、整理和汇总等过程,形成规范性的关于确定主题的一致的全局信息,可以对这些数据举行频仍的可重复的分析。
因此大数据配景下的数仓本事不能实现对数据堆栈的替代,但是大数据的先辈技能可以实现用来促进数仓的架构的演进,在这种趋势下出现的新型数据堆栈产物有ClickHouse、Doris、StarRocks等产物,这些产物具有以下特征:


  • 当代化的MPP架构,实现了向量化执行引擎、编译执行、进步查询的及时性(支持高并发小查询)等;
  • 重新界说了数据存储引擎,可以支持大规模数据集,比方利用LMS的列式存储引擎、针对列创建ZoneMap索引来举行针对性过滤、MVCC事务隔离机制等;
  • 重新界说了数据分布与副本管理机制,可以支持大数据集的灵活管理。在小查询时只需要利用部分机器资源可以或许进步并发查询量;机器扩缩容时迁徙部分数据分片可,不影响线上服务,负载均衡可以自动实现;
  • 新型的预聚合机制,可以或许做到数据的自动更新、查询的智能路由、及时数据的增量聚合盘算等,比方Rollup机制,在数据导入时自动完成汇聚。
这里以Doris为例,其在团体上整合Google Mesa存储模型、Impala MPP查询引擎和ORC file存储格式(在格式的基础上举行优化)等先辈技能。


与传统的MPP数仓每个实例都基于传统关系型数据库技能差别,当代化数仓根据AP的大量表扫描的特征重新界说了数据的存储引擎。与传统MPP数仓的差别,Doris利用了LSM(Log Structured Merge)树架构,这个也是目前大数据存储体系(HBase、LevelDB、RocksDB等)常用的技能,如下图所示:


焦点思绪是将最新的数据驻留在缓存中,等积累到一定量后再利用归并合并的方式将缓存中的数据合并到磁盘队尾中。数据写入时先在内存中构成Mem Table,其内的数据是颠末排序的数据,当告竣一定程度后将其添加到LSM Tree中,这些相邻的SSTable不保证有序,在后台会启动定时任务举行合并。为了加快数据的读取,大部分的LSM结构中会基于Key的索引和Bloom Filter来快速过滤查询Key,淘汰IO数据的访问。读取流程如下:


在数据建模方法Doris支持Aggregate、Unique和Duplicate等模型可以满足OLAP范畴的各种应用模型,为了进步高并发的点查本事实现Unique存储模型和行缓存等技能;新型预聚合技能Rollup、Cube、智能物化视图技能实现预聚合加快,从而实现用户近及时查询。但是传统的数据堆栈依赖与数据的Cube来举行数据的预处理,无法支持数据连续导入或者聚合的同时提供近及时的用户查询本事。
在数据导入方面在内部集成了多种数据导入方式实现差别数据源导入的过程中提供原子性保证。在集群扩缩上Doris与传统MPP数仓差别的地方在于借鉴了大数据技能中常用的分布式管理框架,可以自动管理数据副本的分布、规复和均衡,在整个过程中不影响体系服务。

5.云数仓

传统数仓将盘算与存储部署在同一个节点,集群的扩容复杂,需要举行数据的迁徙,同时架构存在木桶效应,单节点故障会影响团体的性能,且资源管理不灵活,无法满足差别场景下资源隔离及动态调解的需求。云盘算的出现为数仓架构的演进提供了新的方向,赋予数仓得到自服务、弹性等本事,同时目前企业将基础体系、平台部署到云端降低信息化建设资源及优化运行管理流程等成为趋势。
数仓在云端提供服务可以利用公有云强大的基础设施本事(弹性盘算、存储、网络及安全本事),同时让用户更加轻松将数据举行集成,并降低利用、维护与架构资源。这就产生了云数仓(基于云原生的数据堆栈),业界没有明白的界说,但是Snowflake是云数仓的里程碑产物,目前出现的云数仓产物很多都会借鉴该产物的计划头脑,架构如下图所示:


云数仓、当代MPP架构都可以称为当代化数仓,但是这两种产物体系都是对传统数仓举行了差别角度的革新,当代MPP架构是从底层存储引擎角度(数据的组织与盘算优化)而云数仓是从基础架构的角度举行了升级。云数仓的根本特征如下:


  • 盘算与存储分离(Disaggregation),在云环境下网络传输本事已经根本上能追上磁盘的IO的本事,存算分离后可以实现存储的横向扩展,并且在盘算低峰时举行缩容,进一步降低数据分析的资源,最后是可以根据数据的热度举行存储分级,保证性能的同时进一步降低存储资源;存储不再是服务本身的一部分,演变为独立的服务,扩容无需数据的重分布;
  • 资源扩展秒级弹性,盘算层实现无状态可以随时扩缩容,并且随时热升级,为了实现无状态需要对元数据举行“分解”,盘算层无状态后才可以或许随机增减节点、故障后快速切换且不需要复制/迁徙数据,从而实现可靠性的提拔及降低资源;弹性的扩缩可以基于定时或者负载(Workload Manager)等规则来控制,在资源不需要时可以举行关闭;
  • 数据共享(Multi Cluster, Shared Data),盘算资源可以根据差别的业务举行分别后构成假造数仓,假造数仓共享底层的数据,可以通过MVCC机制来实现数据访问的一致性。
在公有云中云数仓以服务的模式来举行交互,降低数据堆栈的管理复杂度,用户将运维、升级等工作交由云厂商来实现,并且以Web的方式来利用数据堆栈服务。目前各种云数仓产物层出不穷,从公有云厂商推出的Google BigQuery、Redshift、Synapse、Snowflake、国内云厂商的阿里云ADB、华为云GaussDB、移动云海山数仓,到近期开源的DataBend、ByConity等,这些产物之间的功能根本相同,只是在技能细节的实现各有差别。
移动云云原生数据库海山数仓产物是中国移动自主研发的云原生分析型(OLAP)数据库。接纳基于 Shared-Data与存储盘算分离架构,具备zero-ETL本事,具备程度在线扩缩容,金融级高可用,提供全面向量化引擎与多种数据源联邦查询等重要特性。兼容 MySQL 协媾和 MySQL 生态。支持海量数据在线查询,复杂查询快速响应,多维数据查询分析等。不仅有力辅助企业客户驾驭复杂的盘算场景与海量数据需求,简化数据流转流程,利用户得以快速洞悉业务运营的真实面貌,而且还能有用资助企业抓住数据时代的战略机遇,驱动业务模式的创新与升级。

6.总结

数据堆栈从概念提出后随着用户利用需求的变化、新技能的出现等多种因素促使架构不断演进,在这个过程中差别的厂商针对各自的观点和需求,比方原始数据(数据湖)、及时性、多模数据及机器学习等,不断的在举行架构优化和新技能的引入,针对数仓的概念也在不断的重新界说,下图对这些概念举行了总结:
  


在图中数据库、数据堆栈与数据湖保持明白的功能定位,产物体系的界限相对比力清晰,但是随着技能的发展,产物也在相互借鉴融合。数据堆栈由于对数据及时性的需求演进到了及时数仓,在这个过程中数据的及时接入框架、查询性能的提拔、交互式查询等本事让数仓的实现复杂化;为了面向满足差别数据范例的需求,数据堆栈逐步举行数据的融合处理,形成了湖仓、多模数据库的概念。随时云原生技能的发展,目前各种范例的数据堆栈在加快向云架构转型,力求打造新一代云数据堆栈。目前在业界虽然数仓的产物数量及范例较多,但从技能实现的角度观察,它们正在朝着相似的焦点技能和计划理念靠拢比方向量化执行、编译执行、盘算Pipeline模型、盘算存储分离、灵活弹缩等。

7.参考链接


1)数据堆栈发展史:数据库发展史2--数据堆栈_Data_Oracle_Inmon
2)从数仓架构到大数据架构的九种演进:https://mp.weixin.qq.com/s/5AjL6b9SleMERfRiWmycxg
3)从Snowflake看数据堆栈未来演进方向:https://www.infoq.cn/article/Afr0uCxfAXsRBzLQQ24N
4)DB Engine 数据库排行及介绍 : https://db-engines.com/en/
5)墨天轮中国数据库流行度排行:https://www.modb.pro/dbRank
5)CliBench数据堆栈评测:https://benchmark.clickhouse.com
7)各产物官网与开源社区:
https://github.com/ClickHouse/ClickHouse
https://github.com/apache/doris
https://github.com/greenplum-db/gpdb
https://clickhouse.com/
Apache Doris: Open-Source Real-Time Data Warehouse - Apache Doris
https://github.com/datafuselabs/databend
https://github.com/ByConity


  • 作者介绍:
冯永设,中国移动云本事中心数据库产物部-OLAP数据库开发工程师。重要参与OLAP数据库产物架构计划/内核优化等工作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表