系统架构设计师 大数据架构篇一
🌐大数据架构
大数据处理系统分析 🔍
大数据处理系统三大挑战 🚀
- 非结构化数据处理:如何处理非结构化和半结构化数据。
- 复杂性与不确定性:大数据复杂性、不确定性特征描述的刻画方法和大数据的系统建模。
- 异构性影响:数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响。
大数据处理系统架构八大特征 🏗️
- 鲁棒性和容错性 🛡️:系统能够在组件失败时继续运行。
- 低延迟读取和更新能力 ⏱️:快速响应数据读取和更新请求。
- 横向扩容 🌟:系统能够通过增加节点来扩展处理能力。
- 通用性 🌍:适用于多种类型的数据处理任务。
- 延展性 📈:系统设计允许功能和性能的扩展。
- 即席查询能力 🔎:支持用户即时发起的查询请求。
- 最少维护能力 🔧:系统设计注重减少维护工作量。
- 可调试性 🐛:系统提供有效的错误定位和调试手段。
Lambda 架构 🌈
Lambda 架构介绍 📖
Lambda 架构提供了一个能够满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。它整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则,可集成 Hadoop、Kafka、Spark、Storm 等各类大数据组件。
Lambda 架构的三层 📚
- 处理层 (Batch Layer) 📊:负责批处理离线数据。
- 加速层 (Speed Layer) ⚡:负责处理实时数据流,提供快速查询。
- 服务层 (Serving Layer) 📡:整合批处理层和加速层的结果,提供统一的数据查询和服务接口。
设计Batch Layer 和 Speed Layer 的依据 🛠️
- 容错性 🔄:Speed Layer 中处理的数据也不断写入Batch Layer,实现错误修正。
- 复杂性隔离 🏭:通过分开Batch Layer 和 Speed Layer,隔离复杂性,提高系统的鲁棒性和可靠性。
批处理层(Batch Layer) 🏛️
- 基础层,处理离线数据。
- 数据集3大属性:
- 原始数据
- 数据不可变
- 永远是真实数据。
- 特点:
- Monoid 特性 🔗:支持分布+合并操作。
- 高可靠性 💾:使用容错性较强的分布式文件系统。
- 长时间窗口 🕒:不要求实时性,可使用较长时间窗口。
- 复杂计算 🧮:可进行复杂的数据计算和分析任务。
伪代码示例 (Batch Layer)
function processBatchData():
rawData = readDataFromSource("HDFS")
processedData = transform(rawData)
storeData(processedData, "HDFS")
function storeData(data, storageSystem):
// 存储数据到分布式文件系统
storageSystem.save(data)
加速层(Speed Layer) 🚀
- 实时处理层,负责处理实时数据流。
- 特点:
- 实时性 ⏲️:快速响应查询请求。
- 部分数据集 📈:处理部分数据,生成增量更新。
- 简单计算 📊:执行较简单的计算任务。
伪代码示例 (Speed Layer)
function processRealTimeData(stream):
for data in stream:
updatedData = processData(data)
serveData(updatedData)
function serveData(data):
// 将数据提供给服务层
servingLayer.update(data)
服务层(Serving Layer) 📱
- 最上层,提供数据查询和服务接口。
- 特点:
- 统一查询接口 🔗:整合批处理层和加速层的结果。
- 数据合并 📑:保证查询结果的完整性和一致性。
- 数据展示和分发 📊:展示查询结果,提供数据分发接口。
伪代码示例 (Serving Layer)
function queryData(query):
batchData = batchLayer.getData()
speedData = speedLayer.getData()
result = mergeData(batchData, speedData)
return result
function mergeData(batchData, speedData):
// 合并批处理数据和实时数据
combinedData = combine(batchData, speedData)
return combinedData
Lambda 架构的实现 🛠️
- Hadoop(HDFS) 📚:作为主数据存储层。
- Spark或Storm 🌩️:构成速度层,提供快速的数据处理能力。
- HBase或Cassandra 📊:作为服务层,提供实时的数据访问和更新。
- Hive 🐝:用于创建可查询的视图。
Lambda 架构优缺点 📌
优点 🎯
- 容错性好 🛡️。
- 查询灵活度高 🎉。
- 易伸缩 📈。
- 易扩展 🌟。
缺点 🚫
- 全场景覆盖带来的编码开销 💼。
- 针对具体场景重新离线训练一遍益处不大 🔄。
- 重新部署和迁移成本很高 💸。
总结 🧐
大数据架构设计需要考虑的关键点包括处理非结构化数据、应对复杂性和不确定性以及管理数据和决策的异构性。Lambda架构通过其三层设计——批处理层、加速层和服务层——提供了一个强大且灵活的框架,以支持大数据的存储、处理和查询需求。这种架构强调了容错性、低延迟、可扩展性和通用性等关键特征。
记忆口诀 🎓
- 三大挑战:非结构化、复杂异构。
- 八大特征:鲁棒低延迟,横向可扩展,通用又可延展,即席查询少维护,可调试。
- Lambda三层:批处理层稳如山,加速层快如风,服务层一统江湖。
趣味记忆互联网案例故事 🌐
大数据架构的角色扮演
- 批处理层:想象它是图书馆的档案室,保存着所有历史书籍和记录,随时可供深入研究和长期保存。
- 加速层:就像新闻编辑室,处理即时新闻和快讯,迅速响应当前事件。
- 服务层:类似于图书馆的前台服务台,为用户提供一个统一的接口来检索和获取信息,无论是来自档案室还是编辑室。
Lambda架构的日常故事
- 容错性:就像将一份重要文件同时保存在云盘和U盘中,即使一个丢失了,另一个仍然可以恢复数据。
- 复杂性隔离:类似于将工作和休闲活动分开,每个区域专注于其任务,减少干扰,提高效率。
- Monoid特性:可以想象成乐高积木,每一块都可以独立使用,也可以与其他积木组合,创造出复杂的结构。
参与点评
读者朋友们,如果您在阅读过程中,对文章的质量、易理解性有任何建议,欢迎在评论区指出,我会认真改进。