如今,物联网(IoT)、社交媒体、应用程序、以及分析设备,都在持续产生着各种类型的海量数据。而我们的业务系统需要每天接收各种大数据,并完成各项处理任务。因此,在日常处理这些持续增长的数据时,数据系统会面临延迟和准确性两个方面的挑战。
Lambda架构的介绍
针对上述挑战,Nathan Marz和James Warren于2015年首发了Lambda体系架构。它在逻辑上将数据系统分为三个层面,即:批处理(batch)层、速度(speed)层和服务(serving)层。而作为一种大数据的范例,它可以让用户通过构建数据系统,以克服上述数据延迟与准确性等问题。
由于Lambda体系架构可以被水平扩展,因此如果您的数据集过大,或所需的数据视图过多,则可以通过添加更多的主机来参与处理。不过,Lambda会将系统中最复杂的部分,限制在速度层中。而由于该层面的输出是临时的,因此如果您需要对数据进行改进或校正,则可以每隔几小时清空一次。
Lambda体系架构的工作原理
比方说明三个层面
为了更好地理解上述概念,让我们来打个比方:在一位老人的豪宅里,每个房间都有一个时钟。但是,除了厨房里的时钟外,其他时钟都是不准的。他需要以厨房里的时钟为基准去校准其他时钟。不过,由于记忆力差,他必须将厨房时钟上的当前时间(上午9:04)记在一张纸上。然后,他以缓慢的步伐走向各个房间,将所有时钟设定为上午9:04。而当他最后到达东厢房时,实际时间已经是上午9:51了。显然,他后续在各个房间时钟上设置的上午9:04,都是错误。
同理,如果数据系统只有批处理层,那么我们就会遇到类似的问题—由于需要花费一段时间才能得到某个问题的答案,因此该答案对于持续涌入的数据并非最新。
让我们回到刚才的例子,幸亏这位老人手上有一只秒表。次日上午9:04,他同样从厨房开始,在一张纸上记下时间,并启动秒表(也就是他的“速度层”)。当最后到达东厢房时,他的秒表上显示为“47分16秒”。通过基本数学计算,他可以知道当前的时钟应该被设置为9:51 AM。
在上述类比中,老人是服务层,其豪宅里各个房间的时钟随处可以显示当前时间的批处理视图。当然,他通过触发秒表,让批处理视图会与速度层同步,以获得最准确的答案。
为什么要使用Lambda体系架构?
在Marz和Warren有关Lambda架构的开创性著作--《大数据》中,他们列出了大数据系统中的八个理想属性,也描述了Lambda架构如何去满足每一种属性:
Lambda体系架构的缺点
事物往往都有两面性,Lambda架构除了具有上述优点,也存在着如下缺点:
机器学习中的Lambda架构
在机器学习领域,数据量无疑是多多益善的。但是,对于机器学习应用算法、以及检测模式而言,它们需要以一种有意义的方式,去接收数据。因此,机器学习可以受益于由Lambda架构构建的数据系统,所处理的各类数据。据此,机器学习算法可以提出各种问题,并逐渐对输入到系统中的数据进行模式识别。
物联网的Lambda架构
如果说机器学习利用的是Lambda架构的输出,那么物联网则更多地使用到了数据系统的输入。设想一下,一个拥有数百万辆汽车的城市,每辆汽车都装有传感器,并能够发送有关天气、空气质量、交通状况、位置信息、以及司机驾驶习惯等数据。这些海量数据流,会被实时馈入Lambda体系架构的批处理层和速度层,进行后续处理。可以说,物联网设备是合理使用大数据源的绝佳示例。
流处理和Lambda架构挑战
速度层也被称为“流处理层”。其目标是提供最新数据的低延迟实时视图。虽说,速度层仅关心,自完成最后一组批处理视图以来导入的数据,但事实上它不会存储这些小部分的数据。这些数据在流入时就会被立即处理,且在完成后被立即丢弃。因此,我们可以认为这些数据是尚未被批处理视图所计入的数据。
Lambda体系架构在其原始理论中,提到了“最终精度(eventual accuracy)”的概念。它是指:批处理层更关注精确计算,而速度层则关注近似计算。此类近似计算最终将由下一组视图所取代,以便系统向“最终精度”迈进。
在实际应用中,由实时处理流以毫秒为单位,持续产生的用于更新视图的数据流,是一个非常复杂的过程。在此,我建议您将基于文档的数据库、索引、以及查询系统配合在一起使用。
Lambda架构和Kappa架构之间的差异
如上所述,由于Lambda体系架构的批处理层和速度层分属不同的分布式系统,我们需要为相似的处理方式,维护两个单独的代码库。而Kappa架构则通过完全删除批处理层,来解决该问题。
具体而言,Kappa使用单个流处理层,既通过最新的数据计算来产生实时视图,又对所有数据进行计算,以产生批处理视图。就整个数据集而言,它以追加日志的形式保持原有数据不变,并且保证数据能够快速地流过系统,以产生具有精确计算的视图。同时,来自Lambda架构的原始“速度层”任务,也会被保留在Kappa 架构中,并持续为低延迟的视图提供近似计算。据此,这种为单个系统生成视图的方式,大幅简化了系统的代码库。
通过Heroku上的容器实现Lambda体系架构
通过使用Docker,我们可以轻松地在启动和试验阶段,完成对Lambda架构所需的各种工具的协调和部署。例如,我们可以使用基于容器的云平台即服务(PaaS)--Heroku,来部署和扩展应用程序。对于批处理层,您可以使用Apache Hadoop来部署一个Docker容器;针对速度层,您可以考虑部署Apache Storm或Apache Spark;而对于服务层,您可以为Apache Cassandra或MongoDB部署Docker容器,并通过Elasticsearch来进行索引和查询。
结论
综上所述,Lambda架构之类的范例具有一定的扩展性和鲁棒性。随着大量数据流不断地被导入数据系统,批处理层提供了高延迟的精度,而速度层提供了低延迟近似值。同时,速度层通过协调两种视图,来为查询提供最佳的响应。当然,使用Lambda架构来实施数据系统并非易事,我们往往需要借助适当的工具,来实现部署与构建。
文章名称:Lambda架构概览:工作原理、优缺点和适用场景
本文链接:http://www.shufengxianlan.com/qtweb/news1/474551.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联