2021- 松子- 一文遍历大数据架构变迁史
一文遍历大数据架构变迁史
从现在的企业发展来看,大家的诉求重点已经从经营与分析转为数据化的精细运营。在如何做好精细化运营过程中,企业也面临着来自创新、发展、内卷等的各方面压力。随着业务量、数据量增长,大家对数据粒度需求从之前的高汇总逐渐转为过程化的细粒度明细数据,以及从
在这十几年中,影响数据仓库、数据平台、数据中台、数据湖的演进变革的因素也很多,比如不断快速迭代的业务模式与膨胀的群体规模所带来的数据量的冲击,新的大数据处理技术的驱动。还有落地在数据中台上各种数据产品的建设,比如工具化数据产品体系、各种自助式的数据产品、平台化各种数据产品的建设。这些数据建设能力的泛化,也让更多的大众参与数据中台的建设中 ,比如一些懂
数据仓库在国外发展多年,于大约在
- 一个特殊地方是,传统行业第三代架构与大数据第一代架构在架构形式上基本相似。传统行业的第三代架构可以算是用大数据处理技术重新实现了一遍。
- 传统行业第四代的架构中实时部分在现代用大数据实时方式做了新的落地。

三个时代:非互联网、互联网、移动互联网时代,每一种时代的业务特点、数据量、数据类型各不相同,自然数据架构也是有显著差异的。
行业域 | 非互联网 | 互联网 | 移动互联网 |
---|---|---|---|
数据来源 |
结构化各类数据库 |
Web、自定义、系统的日志,各类结构化 |
除了互联网那些外还含有大量定位数据、自动化传感器、嵌入式设备、自动化设备等 |
数据包含信息 | 除了传统企业数据信息外,还含有用户各类点击日志、社交数据、多媒体、搜索、电邮数据等等 | 除了传统互联网的数据外,还含有 |
|
数据结构特性 | 几乎都是结构化数据 | 非结构化数据居多 | 非结构化数据居多 |
数据存储 |
主要以 |
文件形式、 |
文件形式、流方式、 |
产生周期 | 慢,几天甚至周为单位 | 秒或更小为单位 | 秒或更小为单位 |
对消费者行为采集与还原 | 粒度粗 | 粒度较细 | 粒度非常细 |
数据价值 | 长期有效 | 随着时间衰减 | 随着时间快速衰减 |
从数据到大数据的数据架构总结
我自己对传统数据仓库的发展,简单抽象为为五个时代、四种架构(或许也不是那么严谨
- 大概在
1991 年之前,数据仓库的实施基本采用全企业集成的模式。 - 大概在
1992 年企业在数据仓库实施基本采用EDW 的方式,Bill Innmon 博士出版了《如何构建数据仓库》 ,里面清晰的阐述了EDW 架构与实施方式。 1994-1996 年是数据集市时代,这个时代另外一种维度建模、数据集市的方式较为盛行起来,其主要代表之一Ralph Kimball 博士出版了他的第一本书“The DataWarehouse Toolkit”( 《数据仓库工具箱》 ) ,里面非常清晰的定义了数据集市、维度建模。- 大概在
1996-1997 年左右的两个架构竞争时代。 1998-2001 年左右的合并年代。
在主要历史事件中提到了两位经典代表人物:Bill Innmon、Ralph kilmball。这两位在数据界可以算是元祖级别的人物。现在数据中台
经典的BIll Inmon 和Ralph kilmball 争论
- 其中
Bill Inmon 的方法论:认为仅仅有数据集市是不够的,提倡先必须得从企业级的数据模型角度入手来构建。企业级模型就有较为完善的业务主题域划分、逻辑模型划分,在解决某个业务单元问题时可以很容易的选择不同数据路径来组成数据集市。后来数据仓库在千禧年传到中国后,几个大实施厂商都是遵守该原则的实施方法,也逐渐的演进成了现在大家熟悉的数据架构中关于数据层次的划分:
Ods-> DW-> ST-> 应用Ods->DWD->DW->DM -> 应用Ods->DWD->DWB->DWS -> 应用- Ods->DWD->DW->ST(ADM)
-> 应用
上个
- 数据集市年代的代表人物为
Ralph kilmball ,他的代表作是 《The Data Warehouse Toolkit》 。这本书就是大名鼎鼎的《数据仓库工具箱》 。企业级数据的建设方法主张自下而上建立数据仓库,极力推崇创建数据集市,认为数据仓库是数据集市的集合,信息总是被存储在多维模型中。这种思想从业务或部门入手,设计面向业务或部门主题数据集市。随着更多的不同业务或部门数据集市实施落地,此时企业可以根据需要来合并不同的数据集市,并逐步形成企业级的数据仓库,这种方式被称为自下而上(Botton-up) 方法。这个方法在当时刚好与Bill Innmon 的自上而下建设方法相反。
类比 | ||
---|---|---|
建设周期 | 需要花费大量时间 | 建设周期短、花费较少时间 |
维护难易度 | 容易维护 | 维护成本高 |
建设成本 | 前期投入大,后期建设成本低 | 前期投入较少,后续迭代成本与之前投入差不多 |
建设周期 | 周期长,见效慢 | 短、平、快 |
需要的团队类型 | 专业团队搭建 | 比较专业团队搭建,少量人参与 |
数据集成需求 | 全企业生命周期数据集成 | 企业垂直业务领域数据集成 |
面向用户群体 | 潜在的全企业用户 | 业务需求部门 |
专业术语 | 面向主题、随时间而变化、保留历史、数据集成 | 面向具体业务部门的一份比较窄的数据快照,维度建模、雪花模型、星型模型 |
数据模型 | 准三范式设计原则 | 星型结构、雪花结构 |
随着数据仓库的不断实践与迭代发展,从争吵期进入到了合并的时代,其实争吵的结果要么一方妥协,要么新的结论出现。
非互联网四代架构
第一代edw 架构

现在数据建设中使用到的“商业智能”
在第一代的数据仓库中,清晰地定义了数据仓库
- 数据库系统的设计目标是事务处理。数据库系统是为记录更新和事务处理而设计,数据的访问的特点是基于主键,大量原子,隔离的小事务,并发和可恢复是关键属性,最大事务吞吐量是关键指标,因此数据库的设计都反映了这些需求。
- 数据仓库的设计目标是决策支持。历史的、摘要的、聚合的数据比原始的记录重要的多。查询负载主要集中在即席查询和包含连接,聚合等复杂查询操作上。
- 其次,数据仓库
(Data Warehouse) 是对多种异构数据源进行有效集成与处理,是按照主题的方式对数据进行重新整合,且包一般不怎么修改的历史数据,一句话总结面向主题、集成性、稳定性和时变性。
数据仓库
- 数据仓库是面向主题的。
- 数据仓库是集成的,数据仓库的数据有来自于分散的操作型数据,将所需数据从原来的数据中抽取出来,进行加工与集成,统一与综合之后才能进入数据仓库。
- 数据仓库是不可更新的,数据仓库主要是为决策分析提供数据,所涉及的操作主要是数据的查询。
- 数据仓库是随时间而变化的,传统的关系数据库系统比较适合处理格式化的数据,能够较好的满足商业商务处理的需求,它在商业领域取得了巨大的成功。
数据仓库和数据库系统的区别,一言蔽之:
第二代大集市架构

第二代就是
主要核心:
- 一致的维度,以进行集成和全面支持。一致的维度具有一致的描述性属性名称、值和含义。
- 一致的事实是一致定义的;如果不是一致的业务规则,那么将为其指定一个独特的名称。业务中相似的名词、不同系统的枚举值、相似的业务规则都需要做统一命名。
- 建模方式:星型模型、雪花模型。
第三代汇总维度集市&CIF2.0 数仓结构


CIF(corporation information factor)信息工厂(作者备注,关于
例如
这个经典的架构在后来
第四代OPDM 操作实时数仓

互联网的五代大数据处理架构
在文章的开头有提过,传统行业第三代架构与大数据第一代架构在架构形式上基本相似,只不过是通过大数据的处理技术尝试对传统第三架构进行落地的。比如说在
后续阿里巴巴淘系的
第一代离线大数据统计分析技术架构

这个结构与第三代的数据处理架构非常相似,具体如下图所示:
数据阶段 | 传统行业第三代架构 | 第一代离线大数据统计架构 |
---|---|---|
数据源 | 结构化数据为主 |
结构化数据为主 |
数据处理 | 名词: |
名词: |
数据中央处理 | 技术:Oracle、DB2、SybaseIQ、 |
技术:hadoop、hive、 |
数据应用 | 成型的解决方案产品:Report、OLAP、在线分析等 | 成型的软件产品变少、开源技术、自助研发产品变多起来 |
第二代流式架构

流式的应用场景非常广泛, 比如搜索、推荐、信息流等都是在线化的,对数据实时性的要求变更高,自然计算与使用是同步进行的。随着业务的复杂化,数据的处理逻辑更加复杂,比如各种维度交叉、关联、聚类,以及需要更多算法或机器学习。这些应用场景可以完全地分为两类:事件流、持续计算。
- 事件流,就是业务相对固定,只是数据在业务的规则下不断的变化。
- 持续计算,适合购物网站等场景。
流失处理架构比上一代离线处理框架相比省掉了原有的
现在一些场景,会把流式计算的结果数据周期性地存到批处理的数据存储区域。如果有场景需要使用历史数据,流式计算框架会把保存的历史结果用更新的方式进行加载,再做进一步处理。
第三代Lambda 大数据架构

- 批量离线处理流在构建时大部分还是采用一些经典的大数据统计分析方法论,在保证数据一致性、完整性的同时还会对数据按照不同应用场景进行分层。
- 实时流式处理主要是增量计算,也会跑一些机器学习模型等。为了保证数据的一致性, 实时流处理结果与批量处理结果会有一个合并动作。
- 批处理层
(Bathchlayer) :Lambda 架构核心层之一,批处理接收过来的数据,并保存到相应的数据模型中,这一层的数据主题、模型设计的方法论是继承面向统计分析离线大数据中的。而且一般都会按照比较经典的ODS 、DWD、DWB、ST/ADM 的层次结构来划分。 - 流式处理层
(Speed Layer) :Lambda 另一个核心层,为了解决比如各场景下数据需要一边计算一边应用以及各种维度交叉、关联的事件流与持续计算的问题,计算结果在最后与批处理层的结果做合并。 - 服务层
(Serving layer) :这是Lambda 架构的最后一层,服务层的职责是获取批处理和流处理的结果,向用户提供统一查询视图服务。
Kappa 大数据架构

在
- 用
Kafka 或者类似MQ 队列系统收集各种各样的数据,需要几天的数据量就保存几天。 - 当需要全量重新计算时,重新起一个流计算实例,从头开始读取数据进行处理,并输出到一个新的结果存储中。
- 当新的实例做完后,停止老的流计算实例,并把一些老的结果删除。
Lambda 架构需要维护两套跑在批处理和实时流上的代码,两个结果还需要做merge ,Kappa 架构下只维护一套代码,在需要时候才跑全量数据。Kappa 架构下可以同时启动很多实例来做重复计算,有利于算法模型调整优化与结果对比,Lamabda 架构下,代码调整比较复杂。所以kappa 架构下,技术人员只需要维护一个框架就可以,成本很小。kappa 每次接入新的数据类型格式是需要定制开发接入程序,接入周期会变长。Kappa 这种架构过度依赖于Redis 、Hbase 服务,两种存储结构又不是满足全量数据存储的,用来做全量存储会显得浪费资源。
Unified 大数据架构

“
IOTA 架构
主要有几个特点:
- 去
ETL 化:ETL 和相关开发一直是大数据处理的痛点,IOTA 架构通过Common Data Model 的设计,专注在某一个具体领域的数据计算,从而可以从SDK 端开始计算,中央端只做采集、建立索引和查询,提高整体数据分析的效率。 Ad-hoc 即时查询:鉴于整体的计算流程机制,在手机端、智能IOT 事件发生之时,就可以直接传送到云端进入real time data 区,可以被前端的Query Engine 来查询。此时用户可以使用各种各样的查询,直接查到前几秒发生的事件,而不用在等待ETL 或者Streaming 的数据研发和处理。- 边缘计算(Edge-Computing
) :将过去统一到中央进行整体计算,分散到数据产生、存储和查询端,数据产生既符合Common Data Model 。同时,也给与Realtime model feedback ,让客户端传送数据的同时马上进行反馈,而不需要所有事件都要到中央端处理之后再进行下发。
总结
大数据架构的每一代的定义与出现是有必然性的, 当然没有一个严格上的时间区分点。直接给出一个每种架构比较:
架构 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
离线大数据统计分析技术架构 | 简单,易懂,对于 |
对于大数据来说,没有 |
数据分析需求依旧以 |
流式架构 | 没有臃肿的 |
对于流式架构来说,不存在批处理,因此对于数据的重播和历史统计无法很好的支撑。对于离线分析仅仅支撑窗口之内的分析。 | 预警,监控,对数据有有实时性要求的场景。 |
既有实时又有离线,对于数据分析场景涵盖的非常到位。 | 离线层和实时流虽然面临的场景不相同,但是其内部处理的逻辑却是相同,因此有大量荣誉和重复的模块存在。 | 同时存在实时和离线需求的情况。 | |
虽然 |
和 |
||
有着大量数据需要分析,同时对机器学习方便又有着非常大的需求或者有规划。 | |||
去 |
代码漏洞较多,通过收费方式向社区提供漏洞修复代码。 |
大数据处理技术栈

- 按照数据采集
- 传输- 落地到存储层,再通过调度调起计算数据处理任务把整合结果数据存到数据仓库以及相关存储区域中。 - 通过管理层
/ide 进行数据管理或数据开发。 - 通过
OLAP 、分析、算法、可视化、微服务层对外提供数据服务与数据场景化应用。
这个技术栈暂时没有按照没有按照批处理、流式技术的分类的角度来分类,稍微有点遗憾。