大数据小视角4:小议Lambda 与 Kappa 架构,不可变数据的计算探索

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

这个系列文章之前因为私事荒废了很久,继续更新~~之前与老大谈论架构时,老大和我聊了聊分布式数据处理之中的Lambda结构,之前在《Designing Data-Intensive Applications》这本书之中,作者 Martin Kleppmann也在文中涉及到了通过重型批处理与灵活的流处理相结合的方式来构建分布式计算系统。所以这次也是借这个机会重新梳理Lambda架构与后续由Jay Kreps提出改进的Kappa架构,结合个人对于数据系统的思考,展开聊一聊分布式计算系统的一些设计思路。由不足之处,望多多指教........

1.Lambda架构

首先我们来看看什么是Lambda架构,Lambda演算在编程语言之中是一个编程范式,它遵循如下几个特点:

  • 1、数据的不可变性,任何对于数据的操作是没有副作用。
  • 2、数据的无依赖性,即对函数提供同样的输入,那么函数总是返回同样的结果。
  • 3、函数是First Class,函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

来自Twitter的Nathan Marz,Marz认为进行计算处理的大数据框架的本质逻辑与函数式编程的思路是不谋而合,所以Marz根据自己多年进行分布式数据系统开发的经验总结提出了Lambda架构。(Marz大神是AFS顶级项目Storm的作者,Storm作为一个优秀的分布式流处理系统)所以接下来我们来看看Marz所提出的Lambda架构是怎么样:

Lambda架构说起来也很简单,就是通过分布式系统的组件搭建,设计出一个具有鲁棒性,可扩展,低延时的分布式计算系统。之所以称之为Lambda架构,就是它最为核心的点就是理由了数据处理过程之中的不可变性与无依赖性。下图展现了一个典型的Lambda架构的分层逻辑:
Lambda架构的层次逻辑

由上图可以看到,一个典型的Lambda架构的核心分为三个层次:Batch Layer,Speed Layer和Serving Layer。

  • Batch Layer
  • Speed Layer
  • Serving Layer

我们来梳理一下他们是如何分工协助的:首先new data作为整个数据系统的数据源头,Batch Layer作为数据的批处理层次对原始数据进行加工与处理,并且将处理的数据结果的Batch View输入到Serving Layer。(这里对应的是全量数据)
Speed Layer对于实时增加的数据进行处理,生成对增量数据计算结果的Realtime Views。(这里对应的是增量数据
最终用户查询是通过Batch View与Realtime View相结合的形式将最终结果呈现出来。

Batch循序渐进的替代Realtime

并且随着时间的推移,Batch View的计算结果会逐渐替代Realtime View,而业务层可以低延迟的访问由Serving Layer提供的Batch View,也可以通过Realtime View实时反馈业务结果。

我们可以看到在Lambda架构之中,所有的数据都需要满足满足不可变性与无依赖性,出现任何数据问题时,(如出错,丢失等)只需要重新跑一遍算法就可以恢复所需的数据了。

业务场景理解

下面笔者利用一个业务场景简单阐述一下Lambda模式,如下的业务场景只是基于笔者对电商推荐的理解所表述的,对应电商未必实际之中就是采取笔者所阐述的模式

1:下图是笔者访问x宝网首页所展示的广告页面:

一把ukulele

对于这个推荐数据,可以理解为通过Batch Layer对我个人历史数据进行处理之后得出的Batch View推荐。(例如跑Spark Mllib或是Hadoop Mahout对历史数据进行分析推荐的结果,跑这类算法通常费时费力,可以通过提前计算的方式存入MySQL等,后续用户访问时可以直接调用

2:接下来笔者在x宝网搜索了MacBook proThinkPad x207,对于实时搜索的数据,可以作为流数据实时的通过Speed Layer进行处理。(例如Storm这样的流处理器

3: 笔者切换回到x宝网的首页,发现多了一个推荐广告项目:Dell 8代CPU专业级显卡,晒单还送爱奇艺半年卡。显然实时流的Realtime ViewBatch View共同组成的x宝网的推荐首页内容,很好的反馈了用户的实时需求:

实时流的反馈Realtime View的推荐结果

小结

Lambda架构结合了实时处理与批处理的结果,很好的反馈了查询需求,并且在速度和可靠性之间求取了平衡,具有足够的扩展性。在Lambda架构之中,所有的查询都可以定位成一个函数:

Query = Function(Data)

而Lambda架构将数据和计算系统进行细分:

Query = Batch(Old_Data) + RealTime(New_Data)

但是这种架构同样存在一些问题:需要运维两套不同的计算系统,并且合并查询结果,这一定程序上带来了复杂性的增加

2.Kappa架构

Lambda架构诞生之后,来自Linkedln的技术主管Jay Kreps提出了一些质疑,并在Lambda架构之上提出自己的改进版本,将其命名为Kappa架构。

Lambda架构最麻烦的问题就在于:新的逻辑需要两次编码,并且在两个系统中运行和调试代码,需要多运维一个额外的系统。所以Kreps认为Lambda架构试图在两个不同编程范式的顶部建立一个抽象层是非常难的。
Lambda架构

而Kappa架构尝试通过一个流处理系统来处理上述两种逻辑,我们来看看Kappa架构是怎么样去设计的:
Kappa架构

Kappa架构通过流处理系统的并行机制,来提高并行以实现重复处理。但是很多人会觉得流式处理对于历史数据的高吞吐量会力不从心,这里Kreps给出的解决方案是:仅仅重复处理的完整日志数据。加入需要重复处理30天数据,就利用Kafka保留到30天。

所以这里是开辟另个流式处理来处理新的数据,输出数据是直接输出到一个新的输出表。当这第二个流式处理完成之后,切换到新的表中进行读取,然后停止旧的流式处理,再删除旧的输出表。

同样的,笔者上文举的例子,同样也能通过Kappa架构来实现购物的广告展示。Kappa架构最为核心的是通过一个范式解决需要共同解决的问题。同时不需要引入额外计算系统进行运维。

3.小结

到此为止,笔者也大致聊完两种不同分布式计算系统的架构。笔者认为Lambda架构是一个优秀的解决分布式计算的架构,但需要处理运维不同的大数据系统,并且额外编码逻辑,对于开发者与运维人员都是一个较大的考验。而Kappa架构简化了这个模型,但是对于数据处理总归很难拿出重型的批处理做一个完整数据计算,所以计算结果的准确性是有所限缩的。(也就是对于业务场景是挑剔的,我想也没有一种架构是解决问题的银弹,之间的取舍需要我们开发人员进行完整的评估~~)
而Spark能够通过一个计算框架同时解决批处理计算与流计算的问题,是很值得开发与运维人员所关注的.........

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
16天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
128 7
|
16天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
32 2
|
29天前
|
数据采集 监控 数据管理
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第26天】随着信息技术的发展,数据成为企业核心资源。本文探讨大数据平台的搭建与数据质量管理,包括选择合适架构、数据处理与分析能力、数据质量标准与监控机制、数据清洗与校验及元数据管理,为企业数据治理提供参考。
74 1
|
13天前
|
存储 大数据 数据管理
大数据分区简化数据维护
大数据分区简化数据维护
22 4
|
23天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
48 3
|
23天前
|
存储 大数据 OLAP
大数据数据分区技术
【10月更文挑战第26天】
58 2
|
26天前
|
消息中间件 分布式计算 大数据
数据为王:大数据处理与分析技术在企业决策中的力量
【10月更文挑战第29天】在信息爆炸的时代,大数据处理与分析技术为企业提供了前所未有的洞察力和决策支持。本文探讨了大数据技术在企业决策中的重要性和实际应用,包括数据的力量、实时分析、数据驱动的决策以及数据安全与隐私保护。通过这些技术,企业能够从海量数据中提取有价值的信息,预测市场趋势,优化业务流程,从而在竞争中占据优势。
74 2
|
28天前
|
数据采集 分布式计算 大数据
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第27天】在数字化时代,数据治理对于确保数据资产的保值增值至关重要。本文探讨了大数据平台的搭建和数据质量管理的重要性及实践方法。大数据平台应包括数据存储、处理、分析和展示等功能,常用工具如Hadoop、Apache Spark和Flink。数据质量管理则涉及数据的准确性、一致性和完整性,通过建立数据质量评估和监控体系,确保数据分析结果的可靠性。企业应设立数据治理委员会,投资相关工具和技术,提升数据治理的效率和效果。
59 2
|
1月前
|
存储 安全 大数据
大数据隐私保护:用户数据的安全之道
【10月更文挑战第31天】在大数据时代,数据的价值日益凸显,但用户隐私保护问题也愈发严峻。本文探讨了大数据隐私保护的重要性、面临的挑战及有效解决方案,旨在为企业和社会提供用户数据安全的指导。通过加强透明度、采用加密技术、实施数据最小化原则、加强访问控制、采用隐私保护技术和提升用户意识,共同推动大数据隐私保护的发展。
|
2月前
|
SQL 存储 大数据
大数据中数据提取
【10月更文挑战第19天】
63 2