题目二:架构设计题
设计一套基于 Lambda 架构的数据平台架构,要求尽可能多的把课程中涉及的组件添加到该架构图中。并描述 Lambda 架构的优缺点,要求不少于 300 字。
设计方案:
一、 设计需求及背景。
在讨论实时计算的问题。但真实的世界里,很多事情都不尽人愿。有时候,因为算法复杂度过高、数据量过大,我们并不能通过直接的实时计算,获得想要的结果,但可以何制定出一个可以真实落地的系统架构方案,这个方法被称作 Lambda 架构,它通过批量 MapReduce 作业提供了虽有些延迟但是结果准确的计算,同时通过 Storm 将最新数据的计算结果初步展示出来。
Lambda 架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。
Lambda 架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成 Hadoop,Kafka,Storm,Spark,Hbase 等各类大数据组件。
二、 Lambda 架构设计
(一)Lambda 系统架构图
Lambda 架构总体上分为三层:批处理层(batch layer)、快速处理层(speed layer)和服务层(serving layer)。
1.批处理层:
负责处理主数据集(也就是历史全量数据)。
即存储数据集,在数据集上预先查询函数,构建查询所对应的视图。
2.服务层用:
响应用户查询需求,合并批处理视图和实时视图中的结果数据集到最终的数据集。
3.快速处理层:
负责处理增量数据(也就是新进入系统的数据),是实时处理平台的具体实现。
(二)Lambda 系统架构产品选型说明
Lambda 架构是一种架构设计思路,针对每一层的技术组件选型并没有严格限定。我们可以根据自己公司和项目的实际情况,选择相应的技术方案。
1. 对于批处理层。
数据存储可以选择 HDFS、S3 等大数据存储系统,而计算工具则可以选择 MapReduce、Hive、Spark 等大数据处理框架。批处理层的计算结果(比如数据库表或者视图),由于需要被服务层或快速处理层快速访问,所以可以存放在诸如 MySQL、HBase 等能够快速响应查询请求的数据库中。
2.对于服务层。
当其接收到查询请求时,就可以分别从存储批处理层和快速处理层计算结果的数据库中,取出相应的计算结果并做合并,就能得到最终的查询结果了。
2、对于快速处理层。
这就是各种流计算框架的用武之地了,比如 Flink、Spark Streaming 和 Storm 等。快速处理层由于对性能要求更加严苛,它们的计算结果可以存入像 Redis 这样具有超高性能表现的内存数据库中。不过有时候为了查询方便,也可以将计算结果存放在 MySQL 等传统数据库中,毕竟这些数据库配合缓存一起使用的话,性能也满足需求。
三、 Lambda 架构不足之处。
虽然 Lambda 架构实现了间接的实时计算,但它也存在一些问题。其中最主要的问题之一就是对于同一个查询目标,需要分别为批处理层和快速处理层开发不同的算法实现。
即对于相同的逻辑,需要开发两种不同的代码,并使用两种不同的计算框架(比如同时使用 Storm 和 Spark),这对开发、测试和运维,都带来一定的复杂性和额外工作。
版权声明: 本文为 InfoQ 作者【arctec】的原创文章。
原文链接:【http://xie.infoq.cn/article/6ab3852e81e0a15e4a8f68d8c】。未经作者许可,禁止转载。
评论