Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑

你好,我是程序员贵哥。

今天我要与你分享的主题是Lambda架构。

通过这一讲,你可以了解什么是Lambda架构,以及它为什么能够成为Twitter亿级实时数据分析架构背后的“倚天剑”。

在学习了架构师的必备技能后,你是否已经摩拳擦掌,跃跃欲试地想要上手一个实际项目了呢?没问题,我们一起来看一个我的架构经历里的真实项目。

情况是这样的,我们正运行着广告精准投放业务,并且拥有海量的用户网站访问行为。我们需要进行用户行为分析来建立一个模型,然后根据这个模型来投放用户喜好的广告。

你可能想到了批处理架构。没错,这个时候数据批处理架构无疑是一种很好的选择。

可是我们不要忘了,之前讲过批处理架构有着高延时性的不足,而互联网用户行为的数据往往可以达到Pb或Eb,甚至是Zb的级别。做这种分析挖掘用户行为的任务,往往能耗时好几个小时甚至是几天。这样的话,我们根据模型精准投放给特定用户的广告就会有一定延时了。

那我们只用流处理架构行不行呢?

在广告精准投放的业务需求下,只用流处理架构会造成忽略了用户的历史网站访问行为,一些异常行为可能会让我们的服务投放错误的广告。

例如,用户A的电脑暂时借给用户B使用了一下,而用户B浏览了一些新的网站类型(与用户A不同)。这种情况下,我们无法判断用户A实际上是否对这类型的广告感兴趣,所以不能根据这些新的浏览记录给用户A推送广告。

这个时候应该怎么优化我们的架构呢?我们先把问题放一放,在介绍完了Lambda架构之后或许会对你有所启发。

Lambda架构

Lambda架构(Lambda Architecture)是由Twitter工程师南森·马茨(Nathan Marz)提出的大数据处理架构。这一架构的提出基于马茨在BackType和Twitter上的分布式数据处理系统的经验。

Lambda架构使开发人员能够构建大规模分布式数据处理系统。它具有很好的灵活性和可扩展性,也对硬件故障和人为失误有很好的容错性。

Lambda架构总共由三层系统组成:批处理层(Batch Layer),速度处理层(Speed Layer),以及用于响应查询的服务层(Serving Layer)。

在Lambda架构中,每层都有自己所肩负的任务。

批处理层存储管理主数据集(不可变的数据集)和预先批处理计算好的视图。

批处理层使用可处理大量数据的分布式处理系统预先计算结果。它通过处理所有的已有历史数据来实现数据的准确性。这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储在只读数据库中,更新则完全取代现有的预先计算好的视图。

速度处理层会实时处理新来的大数据。

速度层通过提供最新数据的实时视图来最小化延迟。速度层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎在收到数据后立即可用。而当同样的数据在批处理层处理完成后,在速度层的数据就可以被替代掉了。

本质上,速度层弥补了批处理层所导致的数据视图滞后。比如说,批处理层的每个任务都需要1个小时才能完成,而在这1个小时里,我们是无法获取批处理层中最新任务给出的数据视图的。而速度层因为能够实时处理数据给出结果,就弥补了这1个小时的滞后。

所有在批处理层和速度层处理完的结果都输出存储在服务层中,服务层通过返回预先计算的数据视图或从速度层处理构建好数据视图来响应查询。

好了,我们回到刚刚的问题中。我们如何做到既能实时分析用户新的网站浏览行为又能兼顾到用户的网站浏览行为历史呢?没错,就是利用Lambda架构。

所有的新用户行为数据都可以同时流入批处理层和速度层。批处理层会永久保存数据并且对数据进行预处理,得到我们想要的用户行为模型并写入服务层。而速度层也同时对新用户行为数据进行处理,得到实时的用户行为模型。

而当“应该对用户投放什么样的广告”作为一个查询(Query)来到时,我们从服务层既查询服务层中保存好的批处理输出模型,也对速度层中处理的实时行为进行查询,这样我们就可以得到一个完整的用户行为历史了。

一个查询就如下图所示,既通过批处理层兼顾了数据的完整性,也可以通过速度层弥补批处理层的高延时性,让整个查询具有实时性。

Lambda架构在硅谷一线大公司的应用已经十分广泛,我来带你一起看看一些实际的应用场景。

Twitter的数据分析案例

Twitter在欧美十分受欢迎,而Twitter中人们所发Tweet里面的Hashtag也常常能引爆一些热搜词汇,也就是Most Popular Hashtags。下面我来给你讲述一下如何利用Lambda架构来实时分析这些Hashtags。

在这个实际案例里,我们先用twitter4J的流处理API抓取实时的Twitter推文,同时利用Apache Kafka将抓取到的数据保存并实时推送给批处理层和速度层。

因为Apache Spark平台中既有批处理架构也兼容了流处理架构,所以我们选择在批处理层和速度层都采用Apache Spark来读取来自Apache Kafka的数据。

批处理层和速度层在分析处理好数据后会将数据视图输出存储在服务层中,我们将使用Apache Cassandra平台来存储他们的数据视图。Apache Cassandra将批处理层的视图数据和速度层的实时视图数据结合起来,就可以得到一系列有趣的数据。

例如,我们根据每一条Tweet中元数据(Metadata)里的location field,可以得知发推文的人的所在地。而服务层中的逻辑可以根据这个地址信息进行分组,然后统计在不同地区的人所关心的Hashtag是什么。

时间长达几周或者的几个月的数据,我们可以结合批处理层和速度层的数据视图来得出,而快至几个小时的数据我们又可以根据速度层的数据视图来获知,怎么样?这个架构是不是十分灵活?

看到这里,你可能会问,我在上面所讲的例子都是来自些科技巨头公司,如果我在开发中面对的数据场景没有这么巨大,又或者说我的公司还在创业起步阶段,我是否可以用到Lambda架构呢?

答案是肯定的!我下面将和你一起分享一个在硅谷旧金山创业公司的App后台架构。

Smart Parking案例分析

在硅谷旧金山地区上班生活的小伙伴肯定都知道,找停车位是一大难题。这里地少车多,每次出行,特别是周末,找停车位都要绕个好几十分钟才能找得到。

智能停车App就是在这样的背景下诞生的。这个App可以根据大规模数据所构建的视图推荐最近的车位给用户。

看到这里,我想先请你结合之前所讲到的广告精准投放案例,思考一下Lambda架构是如何应用在这个App里的,然后再听我娓娓道来。

好,我们来梳理一下各种可以利用到的大数据。

首先是可以拿到各类停车场的数据。这类数据的实时性虽然不一定高,但是数据的准确性高。那我们能不能只通过这类大数据来推荐停车位呢?

我来给你举个极端的例子。假设在一个区域有三个停车场,停车场A现在只剩下1个停车位了。

停车场B和C还有非常多的空位。而在这时候距离停车场比A较近的位置有10位车主在使用这个App寻求推荐停车位。如果只通过车主和停车场的距离和停车场剩余停车位来判断的话,App很有可能会将这个只剩下一个停车位的停车场A同时推荐给这10位用户。

结果可想而知,只有一位幸运儿能找到停车位,剩下的9位车主需要重新寻找停车位。

如果附近又出现了只有一个停车位的停车场呢?同理,这个App又会推荐这个停车场给剩下的9位用户。这时又只能有一位幸运儿找到停车位。

如此反复循环,用户体验会非常差,甚至会导致用户放弃这个App。

那我们有没有办法可以改进推荐的准确度呢?

你可能会想到我们可以利用这些停车场的历史数据,建立一个人工智能的预测模型,在推荐停车位的时候,不单单考虑到附近停车场的剩余停车位和用户与停车场的相邻距离,还能将预测模型应用在推荐里,看看未来的一段时间内这个停车场是否有可能会被停满了。

这时候我们的停车位推荐系统就变成了一个基于分数(Score)来推荐停车位的系统了。

好了,这个时候的系统架构是否已经达到最优了呢?你有想到应用Lambda架构吗?

没错,这些停车场的历史数据或者每隔半小时拿到的停车位数据,我们可以把它作为批处理层的数据。

那速度层的数据呢?我们可以将所有用户的GPS数据聚集起来,这些需要每秒收集的GPS数据刚好又是速度层所擅长的实时流处理数据。从这些用户的实时GPS数据中,我们可以再建立一套预测模型来预测附近停车场位置的拥挤程度。

服务层将从批处理层和速度层得到的分数结合后将得到最高分数的停车场推荐给用户。这样利用了历史数据(停车场数据)和实时数据(用户GPS数据)能大大提升推荐的准确率。

小结

在了解Lambda架构后,我们知道Lambda架构具有很好的灵活性和可扩展性。我们可以很方便地将现有的开源平台套用入这个架构中,如下图所示。

当开发者需要迁移平台时,整体的架构不需要改变,只需要将逻辑迁移到新平台中。

例如,可以将Apache Spark替换成Apache Storm。而因为我们有批处理层这一概念,又有了很好的容错性。

假如某天开发者发现逻辑出现了错误,只需要调整算法对永久保存好的数据重新进行处理写入服务层,经过多次迭代后整体的逻辑便可以被纠正过来。

从我的开发经验来看,现在有很多的开发项目可能已经有了比较成熟的架构或者算法了。

但是如果我们平时能多思考一下现有架构的瓶颈,又或者想一想现在的架构能不能改善得更好,有了这样的思考,在学习到这些经典优秀架构之后,说不定真的能让现有的架构变得更好。

也就是说,作为一名优秀的架构师,“现有的架构能不能做得更好?”应该是一个需要经常思考的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1143589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AutoGLM-Phone-9B实操手册:90亿参数模型优化技巧

AutoGLM-Phone-9B实操手册:90亿参数模型优化技巧 1. AutoGLM-Phone-9B简介 AutoGLM-Phone-9B 是一款专为移动端优化的多模态大语言模型,融合视觉、语音与文本处理能力,支持在资源受限设备上高效推理。该模型基于 GLM 架构进行轻量化设计&am…

AutoGLM-Phone-9B技术揭秘:移动端推理加速技巧

AutoGLM-Phone-9B技术揭秘:移动端推理加速技巧 随着大模型在消费级设备上的部署需求日益增长,如何在资源受限的移动终端实现高效、低延迟的多模态推理成为关键技术挑战。AutoGLM-Phone-9B 的推出正是针对这一痛点,旨在将强大的语言理解与生成…

STM32CubeMX安装日志查看与故障排查

STM32CubeMX安装失败?别慌,一招日志分析法带你精准排错 你有没有遇到过这种情况:兴致勃勃下载了最新版 STM32CubeMX ,双击安装包后进度条走到一半突然卡住,弹出一个“An error has occurred”的模糊提示&#xff0c…

Vivado固化程序到Flash:超详细版烧写教程

Vivado固化程序到Flash:从零开始的实战烧写指南一次上电即运行的秘密:为什么我们需要把FPGA程序“烧”进Flash?你有没有遇到过这样的场景?辛辛苦苦在Vivado里跑通了一个图像处理设计,用JTAG下载进去后功能完美。可一旦…

5分钟搭建Excel数据提取工具:从想法到实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速开发一个Excel数据提取工具原型,核心功能:1.上传Excel文件 2.输入提取区间(支持多种格式如行号、列号、单元格范围)3.实时预览提…

AutoGLM-Phone-9B多卡并行:4090配置指南

AutoGLM-Phone-9B多卡并行:4090配置指南 随着移动端AI应用的快速发展,轻量化、高效能的多模态大模型成为边缘计算和终端设备部署的关键。AutoGLM-Phone-9B正是在这一背景下推出的面向移动场景优化的90亿参数级多模态大语言模型。其不仅具备跨模态理解能…

电商系统中MyBatis范围查询的符号转义实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商商品查询的MyBatis示例项目&#xff0c;重点展示&#xff1a;1. 价格范围查询(price>100 AND price<500)的XML配置 2. 使用CDATA区块和转义符号两种实现方式 3.…

用AI自动生成Mermaid流程图:GRAPH TD的智能实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于AI的Mermaid流程图生成器&#xff0c;用户输入自然语言描述业务流程或系统架构&#xff0c;系统自动转换为标准的GRAPH TD语法流程图。要求支持多步骤流程、条件判断和…

MediaPipe vs 传统CV:开发效率提升10倍的秘密

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 实现一个面部特征点检测功能&#xff0c;分别使用传统OpenCV方法和MediaPipe框架进行开发&#xff0c;比较两者的开发效率和运行性能。要求&#xff1a;1. 使用OpenCV实现基础的面…

搞懂AI上传图片生成PPT,工作效率up!

在日常工作中&#xff0c;经常会遇到需要根据图片来制作PPT的场景。比如市场人员拿到产品宣传图片&#xff0c;要快速制作推广PPT&#xff1b;设计师有设计稿图片&#xff0c;需转化为展示PPT等。手动根据图片制作PPT不仅耗时费力&#xff0c;还需要很强的内容组织和设计能力&a…

AutoGLM-Phone-9B优化指南:降低移动端功耗的配置技巧

AutoGLM-Phone-9B优化指南&#xff1a;降低移动端功耗的配置技巧 随着多模态大语言模型在移动端的广泛应用&#xff0c;如何在保证推理性能的同时有效降低设备功耗&#xff0c;成为工程落地中的关键挑战。AutoGLM-Phone-9B作为一款专为移动场景设计的轻量化多模态模型&#xf…

传统vs现代:更新故障处理效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个自动化更新故障处理工具&#xff0c;功能包括&#xff1a;1)一键诊断 2)自动修复常见问题 3)网络配置优化 4)代理设置检测 5)速度测试。使用Go语言编写&#xff0c;支持命…

PYTHON WITH零基础入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个PYTHON WITH学习应用&#xff0c;提供交互式教程和新手友好的界面。点击项目生成按钮&#xff0c;等待项目生成完整后预览效果 作为一个Python零基础学习者&#xff0c;最…

1小时打造专业地图:QGIS快速原型设计实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速制图工具&#xff0c;功能包括&#xff1a;1) 智能模板匹配&#xff1b;2) 一键美化样式&#xff1b;3) 多格式导出。要求基于QGIS Python API&#xff0c;支持自定义…

AutoGLM-Phone-9B性能优化:CPU与GPU混合推理策略

AutoGLM-Phone-9B性能优化&#xff1a;CPU与GPU混合推理策略 随着多模态大语言模型在移动端的广泛应用&#xff0c;如何在资源受限设备上实现高效、低延迟的推理成为关键挑战。AutoGLM-Phone-9B作为一款专为移动场景设计的轻量化多模态模型&#xff0c;在保持强大跨模态理解能…

MySQL 写入放大(Write Amplification)的庖丁解牛

MySQL 写入放大&#xff08;Write Amplification&#xff09; 是指 实际写入磁盘的数据量远大于用户逻辑写入量 的现象。它直接导致 I/O 压力剧增、SSD 寿命缩短、写入延迟飙升。一、写入放大的根本原因 1. InnoDB 的多写机制写入源说明放大倍数Redo Log事务持久化&#xff08;…

矩阵运算效率优化:从维度检查到并行计算

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个矩阵运算效率对比工具&#xff0c;比较&#xff1a;1) 手动调试维度不匹配问题 2) 使用静态分析工具检查 3) AI自动修复。工具应生成随机矩阵对&#xff0c;自动记录每种方…

AutoGLM-Phone-9B应用案例:智能客服机器人

AutoGLM-Phone-9B应用案例&#xff1a;智能客服机器人 随着移动设备智能化需求的不断增长&#xff0c;如何在资源受限的终端上部署高效、多模态的大语言模型成为行业关注的核心问题。AutoGLM-Phone-9B 正是在这一背景下应运而生——它不仅具备强大的跨模态理解能力&#xff0c…

AutoGLM-Phone-9B性能分析:不同batch size下的表现对比

AutoGLM-Phone-9B性能分析&#xff1a;不同batch size下的表现对比 随着多模态大模型在移动端的广泛应用&#xff0c;如何在资源受限设备上实现高效推理成为关键挑战。AutoGLM-Phone-9B作为一款专为移动场景设计的轻量化多模态大语言模型&#xff0c;凭借其90亿参数规模和模块…

AutoGLM-Phone-9B部署优化:容器资源限制与调优

AutoGLM-Phone-9B部署优化&#xff1a;容器资源限制与调优 1. AutoGLM-Phone-9B简介 AutoGLM-Phone-9B 是一款专为移动端优化的多模态大语言模型&#xff0c;融合视觉、语音与文本处理能力&#xff0c;支持在资源受限设备上高效推理。该模型基于 GLM 架构进行轻量化设计&…