【.com快译】如今,架构物联网(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架构来实施数据系统并非易事,我们往往需要借助适当的工具,来实现部署与构建。 原文标题:An Overview of Lambda Architecture,作者: Michael Bogan 【译稿,合作站点转载请注明原文译者和出处为.com】