Lambda架构

作者: 阿猫阿狗Hakuna | 来源:发表于2018-12-05 17:41 被阅读4次

    大数据系统的关键问题:如何实时地在任意大数据集上进行查询?
    最简单的方法是,直接在全体数据集上运行查询函数得到结果,但是这种方法的计算代码太大,所以不现实。

    Lambda架构通过分解的三层架构来解决该问题:Batch Layer,Speed Layer和Serving Layer,如下图所示:


    image.png

    1.Batch Layer

    这层的功能主要有两点:

    • 存储数据集
    • 在数据集上预先计算查询函数,构建查询所对应的view

    在全体数据集上运行查询的代价太大,但我们可以预先在数据集上计算并保存查询函数的结果,查询的时候可以直接返回结果(或通过简单加工)而无需重新进行完整费时的计算。
    所以Batch Layer可以看成是一个数据预处理的过程。我们把针对查询预先计算并保存的结果称为View,其是Lamba架构的一个核心概念,通过View可以快速得到查询结果,如下图所示:


    image.png

    注意:View是一个和业务关联性比较大的概念,其创建需要从业务自身需求出发。

    2.Speed Layer

    Batch Layer可以很好的处理离线数据,但有很多场景数据不断实时生成,且需要实时查询处理。Speed Layer是用来处理增量的实时数据。
    Speed Layer对数据进行计算并生成Realtime View,其主要区别如下:

    • Speed Layer处理数据为最近的增量数据流,Batch Layer处理的是全体数据集
    • Speed Layer为了效率,接收到新数据时不断更新Realtime View,而Batch Layer根据全体离线数据集直接得到Batch View。

    Lambda架构将数据处理分解为Batch Layer和Speed Layer有如下优点:

    • 容错性。Speed Layer中处理的数据也不断写入Batch Layer,当Batch Layer中重新计算的数据集包含Speed Layer处理的数据集后,当前的Realtime View就可以丢弃,这意味着Speed Layer处理中引入的错误,在Batch Layer重新计算时都可以得到修正。
    • 复杂性隔离。Batch Layer处理的是离线数据,可以很好的掌控。Speed Layer采用增量算法处理实时数据,复杂性比Batch Layer要高很多。通过分开Batch Layer和Speed Layer,把复杂性隔离到Speed Layer,可以很好的提高整个系统的鲁棒性和可靠性。

    3.Serving Layer

    这一层用于响应用户的查询请求,合并Batch View和Realtime View中的结果数据集到最终的数据集。
    这里涉及到数据合并的问题,如果查询函数满足Monoid性质(结合律,(a+b)+c = a + (b + c)),只需要简单的合并Batch View和Realtime View中的经过数据集。否则,需要把查询函数转换为多个满足Monoid性质的查询函数的运算,单独对每个满足Monoid性质的查询函数进行Batch View和Realtime View中的结果数据集合并,然后再计算得到最终的结果数据集。也可以根据业务自身特性,运用业务自身的规则来对Batch View和Realtime View中的结果数据集合并。

    以下为Lambda架构的完整视图:


    image.png

    数据流进入系统后,同时发往Batch Layer和Speed Layer处理。Batch Layer以不可变模型离线存储所有数据集,通过在全体数据集上不断重新计算构建查询所对应的Batch Views。Speed Layer处理增量的实时数据流,不断更新查询所对应的Realtime Views。Serving Layer响应用户的查询请求,合并Batch View和Realtime View中的结果数据集到最终的数据集。

    4.Lambda架构技术选型

    下图给出了Lambda架构中各个层常用的组件。数据流存储可选用基于不可变日志的分布式消息系统Kafka;Batch Layer数据集的存储可选用Hadoop的HDFS,或者是阿里云的ODPS;Batch View的预计算可以选用MapReduce或Spark;Batch View自身结果数据的存储可使用MySQL(查询少量的最近结果数据),或HBase(查询大量的历史结果数据)。Speed Layer增量数据的处理可选用Storm或Spark Streaming;Realtime View增量结果数据集为了满足实时更新的效率,可选用Redis等内存NoSQL。


    image.png

    相关文章

      网友评论

        本文标题:Lambda架构

        本文链接:https://www.haomeiwen.com/subject/ezywcqtx.html