目录
3.5.1 事件溯源(Event Sourcing)与 Lambda 架构
一、传统数据处理系统的问题
1.1 传统数据库的数据过载问题
传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无法支撑日益增长的用户请求的负载,从而导致数据库服务器无法及时响应用户请求,出现超时的错误。关于这个问题的常用解决方法如下:
(1)增加异步处理队列,通过工作处理层批量处理异步处理队列中的数据修改请求。
(2)建立数据库水平分区,通常建立 Key 分区,以主键/唯一键 Hash 值作为 Key。
(3)建立数据库分片或重新分片,通常专门编写脚本来自动完成,且要进行充分测试。
(4)引入读写分离技术,主数据库处理写请求,通过复制机制分发至从数据库。
(5)引入分库分表技术,按照业务上下文边界拆分数据组织结构,拆分单数据库压力。
1.2 大数据的特点
大数据具有体量大、时效性强的特点,并非构造单调,而是类型多样;处理大数据时,传统数据处理系统因数据过载,来源复杂,类型多样等诸多原因性能低下,需要采用以新式计算架构和智能算法为代表的新技术;大数据的应用重在发掘数据间的相关性,而非传统逻辑上的因果关系;因此,大数据的目的和价值就在于发现新的知识,洞悉并进行科学决策。现代大数据处理技术,主要分为以下几种:
(1)基于分布式文件系统 Hadoop。
(2)使用 Map/Reduce 或 Spark 数据处理技术。
(3)使用 Kafka 数据传输消息队列及 Avro 二进制格式。
1.3 大数据利用过程
大数据的利用过程分为:采集、清洗、统计和挖掘 4 个过程。
二、大数据处理系统架构分析
2.1 大数据处理系统面临的挑战
(1)如何利用信息技术等手段处理非结构化和半结构化数据。
(2)如何探索大数据复杂性、不确定性特征描述的刻画方法及大数据的系统建模。
(3)数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响。
2.2 大数据处理系统应具有的属性和特征
(1)鲁棒性和容错性;
(2)低延迟;
(3)横向扩展(通过增强机器性能扩展);
(4)通用;
(5)可扩展
(6)即席查询(用户按照自己的要求进行查询);
(7)最少维护;
(8)可调试。
三、Lambda 架构
3.1 Lambda 架构定义
Lambda 架构设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则,可集成 Hadoop、Kafka、Spark、Storm 等各类大数据组件。Lambda 是用于同时处理离线和实时数据的,可容错的,可扩展的分布式系统。它具备强鲁棒性,提供低延迟和持续更新。
Lambda架构应用场景:机器学习、物联网、流处理。
3.2 Lambda 架构分层
如上图所示, Lambda 架构可分解为三层,即批处理层、加速层和服务层。
(1)批处理层(Batch Layer):存储数据集, Batch Layer在数据集上预先计算查询函数,并构建查询所对应的View。Batch Layer可以很好地处理离线数据,但有很多场景数据是不断实时生成且需要实时查询处理,对于这种情况, Speed Layer更为适合。
(2)加速层(Speed Layer):Batch Layer 处理的是全体数据集,而 Speed Layer处理的是最近的增量数据流。 Speed Layer为了效率,在接收到新的数据后会不断更新Real-time View,而Batch Layer是根据全体离线数据集直接得到Batch View。
(3)服务层(Serving Layer):Serving Layer 用于合并Batch View 和 Real-time View中的结
果数据集到最终数据集。
3.3 Lambda 架构的实现
如上图所示,在这种Lambda 架构实现中,Hadoop(HDFS) 用于存储主数据集,Spark(或Storm)可构成速度层 (Speed Layer),HBase( 或Cassandra)作为服务层,由Hive创建可查询的视图。
Hadoop 是被设计成适合运行在通用硬件上的分布式文件系统 (Distributed File System)。HDFS 是一个具有高度容错性的系统,能提供高吞吐量的数据访问,非常适合大规模数据集上
的应用。 HDFS 放宽了一些约束,以达到流式读取文件系统数据的目的。
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark Job中间输出结果可以保存在内存中,从而不再需要读写HDFS, 因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce算法。
HBase-Hadoop Database 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase 技术可在廉价 PCServer上搭建起大规模结构化存储集群。
3.4 Lambda 架构优缺点
3.4.1 优点
(1)容错性好。Lambda 架构为大数据系统提供了更友好的容错能力,一旦发生错误,我们可以修复算法或从头开始重新计算视图。
(2)查询灵活度高。批处理层允许针对任何数据进行临时查询。
(3)易伸缩。所有的批处理层、加速层和服务层都很容易扩展。因为它们都是完全分布式的系统,我们可以通过增加新机器来轻松地扩大规模。
(4)易扩展。添加视图是容易的,只是给主数据集添加几个新的函数。
3.4.2 缺点
(1)全场景覆盖带来的编码开销。
(2)针对具体场景重新离线训练一遍益处不大。
(3)重新部署和迁移成本很高。
3.5 Lambda与其他架构模式对比
3.5.1 事件溯源(Event Sourcing)与 Lambda 架构
Event Sourcing本质上是一种数据持久化的方式,其由三个核心观点构成:
(1)整个系统以事件为驱动,所有业务都由事件驱动来完成。
(2)事件是核心,系统的数据以事件为基础,事件要保存在某种存储上。
(3)业务数据只是一些由事件产生的视图,不一定要保存到数据库中。
Lambda 架构中数据集的存储使用的概念与Event Sourcing中的思想完全一致,二者都是在使用统一的数据模型对数据处理事件本身进行定义。这样在发生错误的时候,能够通过模型找到错误发生的原因,对这一事件进行重新计算以丢弃错误信息,恢复到系统应该的正确状态,以此实现了系统的容错性
3.5.2 CQRS 与 Lambda 架构
CQRS 架构分离了对于数据进行的读操作(查询)和写(修改)操作。其将能够改变数据模型状态的命令和对于模型状态的查询操作实现了分离。这是领域驱动设计 (Domain-Driven Design,DDD)的一个架构模式,主要用来解决数据库报表的输出处理方式。
Lambda 架构中,数据的修改通过批处理和流处理实现,通过写操作将数据转换成查询时所
对应的View。 在 Lambda 架构中,对数据进行查询时,实际上是通过读取 View 直接得到结果,读出所需的内容。这实际上是一种形式的读写分离。
往期推荐
【系统架构设计师】二十四、安全架构设计理论与实践①-CSDN博客文章浏览阅读889次,点赞15次,收藏14次。在信息系统的整个生命周期中,安全保障应包括技术、管理、人员和工程过程的整体安全,以及相关组织机构的健全等。目前,网络与信息安全风险类别可以分为人为蓄意破坏(被动型攻击,主动型攻击)、灾害性攻击、系统故障、人员无意识行为https://shuaici.blog.csdn.net/article/details/140847010【系统架构设计师】二十三、通信系统架构设计理论与实践①-CSDN博客文章浏览阅读1.8k次,点赞61次,收藏47次。通信网络主要形式:局域网、广域网、移动通信网。局域网网络架构有 4 种类型:单核心架构、双核心架构、环型架构、层次型架构。广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成。通常,在大型网络构建中,通过广域网将分布在各地域的局域网互连起来,形成一个大的网络。移动通信网为移动互联网提供了强有力的支持,尤其是5G 网络为个人用户、垂直行业等提供了多样化的服务。
https://shuaici.blog.csdn.net/article/details/140826449