|---|
| |
架构案例每日一深讲 · Day 1
━━━━━━━━━━━━━━━━━━━━━━━━
主题:数据流风格在ETL系统中的应用
━━━━━━━━━━━━━━━━━━━━━━━━
【Day 1】数据流风格在ETL系统中的应用
一、题目还原
某大型零售企业需要建设统一数据仓库平台,将分布在全国各区域门店的销售数据、库存数据和会员数据进行整合分析。每天各门店在营业结束时生成数据文件(CSV格式),通过FTP上传至总部服务器。系统需要完成数据抽取(Extract)、清洗转换(Transform)、加载入库(Load)三个核心环节。数据量预估为日均500万条记录,要求单日ETL全流程在4小时内完成,且支持增量处理和断点续传。
问题:
-
该系统应采用哪种架构风格?请说明理由。
-
该风格有哪些子类型?分别说明其特点。
-
列举该风格不适用的两类系统场景并解释原因。
-
如何设计系统的"断点续传"机制?
二、考点分析
核心考点:数据流风格(Data Flow Style)
对应答题模板:模板一(架构风格识别+理由阐述)
考察深度:风格子类型辨析 + 风格适用边界 + 工程实践
本题的关键是区分"管道-过滤器(Pipe-Filter)"与"批处理序列(Batch Sequential)"两种子风格,以及理解数据流风格的上游/下游松耦合特性。
三、标准答案(采分点格式)
- 采用**数据流风格**,具体为**管道-过滤器(Pipe-Filter)架构风格**。
理由:
① 数据驱动特性匹配:ETL流程是典型的数据驱动型任务,数据依次经过Extract→Transform→Load三个环节,每个环节的输出作为下一环节的输入,完全符合数据流风格的核心特征------数据在组件间流动,组件之间无状态依赖。
② 松耦合可插拔:各处理阶段可独立开发、独立部署。如需新增数据清洗规则(如去重、格式校验),只需新增一个过滤器插入管道即可,不影响上下游组件。
③ 支持并发执行:管道-过滤器风格天然支持过滤器的并发执行(多个管道并行),适合日均500万条记录的大数据量处理需求。
④ 良好的复用性:过滤器(数据抽取模块/清洗模块/加载模块)可在不同ETL任务间复用,减少重复开发。
- 数据流风格的两个子类型:
① **管道-过滤器(Pipe-Filter)**:
-
每个过滤器(Filter)是一个独立处理单元,有输入端口和输出端口
-
管道(Pipe)负责在过滤器间传递数据流
-
支持并发执行:过滤器可并行运行在不同线程/进程
-
典型应用:编译器(词法分析→语法分析→语义分析→代码生成)、ETL工具
-
优点:高内聚低耦合、易扩展、易复用、支持增量处理
-
缺点:不适合交互式应用,数据格式转换开销大,批处理延迟较高
② **批处理序列(Batch Sequential)**:
-
整批数据作为一个整体依次经过各处理步骤
-
每一步必须等待上一步完全结束后才开始
-
不支持并发
-
典型应用:传统批量报表生成、银行日终批处理
-
缺点:延迟大、不支持增量处理
本系统选用管道-过滤器更合适,因为需要支持增量处理和部分并行执行。
- 数据流风格不适用的场景:
① **交互式系统**(如Web应用、在线交易系统):
原因:数据流风格以数据流动为核心,组件被动接收和处理数据,缺乏主动响应用户交互的能力。交互式系统需要事件驱动或MVC风格来响应用户操作。
② **强一致性要求的实时控制系统**(如金融交易系统):
原因:数据在管道中流动的延迟不可控,且过滤器间的数据传递可能引入异步性和缓冲。实时系统要求确定性响应时间和强一致性,更适合调用返回风格(如主程序-子程序)或事件驱动风格。
- 断点续传设计:
① **状态持久化**:每个过滤器在处理完一批数据后,向共享状态存储(如Redis或ZooKeeper)写入当前处理进度(已处理到的数据批次ID/偏移量)。
② **幂等设计**:每个过滤器对同一批数据重复执行产生相同结果(如通过主键去重),保证重启后重新处理不会产生重复数据。
③ **检查点恢复**:系统崩溃重启后,从状态存储读取最后一次成功处理的检查点位置,从该位置继续处理,而非从头开始。
④ **事务性管道**:引入消息队列(如Kafka)作为管道,利用其Consumer Offset机制天然支持断点续传功能。
四、评分要点
本题满分15分,分配如下:
-
架构风格名称正确(2分):需指出"数据流风格"或"管道-过滤器风格"
-
选型理由充分(5分):每写出一个合理理由得1.5分,满分5分
-
子类型辨析(3分):能正确指出两种子类型并说明区别
-
不适用场景分析(3分):每写出一个合理场景得1.5分,需说明原因
-
断点续传设计(2分):写出检查点+幂等得满分
加分项:
-
提到"过滤器粒度设计原则"(单一职责+高内聚)
-
提到管道中的"数据格式标准化"(如统一为JSON/Parquet格式传递)
五、扩展知识点
关联速记卡:
-
架构风格辨析:数据流风格 vs 调用返回风格(见易混淆对照表)
-
数据流:无状态、数据驱动、松耦合
-
调用返回:有状态、控制驱动、紧耦合
关联答题模板:
-
架构风格选择标准答题范式(见六大答题模板·模板一)
-
风格名称 → 理由①(对应需求a)→ 理由②(对应需求b)→ 理由③(对应需求c)→ 不适合的风格+原因
关联案例精析:
- 2024下案例精析·试题一(电商平台架构题)中的风格辨析部分可参照
六、今日金句
"数据流风格的核心特征是数据在组件之间持续流动,组件之间通过管道连接实现松耦合,每个组件(过滤器)独立完成数据的处理转换,这种风格特别适用于以数据处理为核心、无状态依赖的系统场景。"
━━━━━━━━━━━━━━━━━━━━━━━━
明日预告:Day 2 --- 层次架构在企业ERP中的设计
━━━━━━━━━━━━━━━━━━━━━━━━