太赞了!十年开发大牛直接用3000字就把Lambda架构给讲透了!
ccwgpt 2024-11-02 10:58 29 浏览 0 评论
Lambda架构
从现在起,我们需要重新审视下自己是怎样开发程序,以及是怎样理解所开发的程序的。
或许在实际的开发工作中,我们会出现以下一些日常情况:当我们开发Web后端时,认为无非就是增删查改,于是拿起Spring Boot就做了;
当我们开发流计算应用时,认为无非就是消息过来就处理,于是拿起Storm就干了;当我们开发批处理任务时,认为无非就是将数据读出来后进行计算,然后输出结果就好了。是的,针对每一种任务,我们都知道怎么去完成这个任务,然后针对具体任务解决具体问题。
然后有一天,产品经理跑过来跟你说,功能需要增加;运维人员跑过来跟你说数据库要调整;刚来的新人需要你来指导,你需要跟他讲解系统的整体结构。这个时候你会发现,原来设计的系统已经根本理不清或者动不了了:到处是耦合的增删查改逻辑,到处是相互依赖的输入/输出,到处是乱七八糟的数据格式。想在原来的业务流程中插入一个业务模块,一定要对系统“大动干戈”;想要调整数据库,一定要修改程序代码;想要指导新人,一定要告诉他数据在哪里修改。
突然,你觉得好烦。似乎一切都开始变得失控,每动一处都是“伤筋动骨”。造成这些问题的祸根其实从一开始就埋下了。因为在设计系统的时候,你就没有一个整体的指导性原则。当我们开发流计算系统时,亦是如此。流计算系统的本质是对数据的实时处理和分析,所以我们首先应该理解数据系统的本质是什么。
数据系统和Lambda架构思想
数据系统用于根据过去所获取和累积的知识,回答当前提出的问题。这里面有两层信息。其一是积累知识。当有新的消息流入系统时,我们需要将它记录下来,这些消息会成为我们知识的一部分。其二是回答问题,我们在回答当前的问题时,依据历史积累的知识来回答这个问题。
数据系统一方面需要积累知识,另一方面可以回答问题。必须强调的是,积累知识和回答问题是两个独立的过程。积累知识可以是在任何时间、从任何地方收录数据,收录之后内部还有可能需要进一步归纳和整理。回答问题则是在任何时候,根据知识库所知道的一切来回答任何人提出的问题。
记住“积累知识”和“回答问题”这两个过程是独立的非常重要。为这告诉我们,在设计有关数据系统的方案时,千万不要将“查询”和“更新”这两个过程耦合起来,否则知识积累的过程和回答问题的过程紧密关联,会让我们的系统在将来可能的需求变更或功能增强时变动起来非常困难。
Lambda架构就是这样一个先积累知识后回答问题的数据系统。
Lambda架构将数据系统抽象为一个作用在数据全集上的函数。用公式表示就是:
query = function(all data)
这个公式还只能算是一个粗略概括,不能体现Lambda架构的核心观点,因为基本上所有的数据系统都可以用这个公式大体表示。Lambda架构与众不同的地方是,它专门为解决大数据量场景下实时查询的问题而生,它将数据系统更精细地刻画为
query = function(all data) = function(batch data) + function(streaming data)
从上面的公式可以看出,当数据量太大而不能实时全量计算时,Lambda架构将数据处理过程分成两部分。一部分是基于批处理的预计算,另一部分是基于流处理的实时增量计算。将这两部分计算结合起来,最终得到计算结果。
这里需要说明一下Lambda架构之所以取名为Lambda的原因,这有助于我们理解Lambda的思想。Lambda架构将数据系统视为在不可变数据集上的纯函数计算,这与函数式编程的核心思想是不谋而合的。我们经常听说的Lambda表达式正是函数式编程的具体表现形式,如在Java、Python等编程语言就有Lambda表达式的存在。对函数式编程和Lambda表达式感兴趣的读者可自行查阅相关资料。
Lambda架构
Lambda架构最初由Storm流计算框架的作者Nathan Marz为构建大数据场景下低延时计算和查询的通用架构模式而提出。如图7-1所示,Lambda架构总体上分为3层:批处理层(batch layer)、快速处理层(speed layer)和服务层(serving layer)。其中,批处理层和快速处理层分别处理历史全量数据和新输入系统的增量数据,而服务层用于将批处理层和快速处理层的结果合并起来,以提供最终用户或应用程序的查询服务。
在Lambda架构中,各层的具体功能如下。
1.批处理层
批处理层用于存储主数据集和预计算各种批处理视图。当数据进入批处理层时,数据被存储下来,并作为数据系统的主要数据集。由于全量的数据很大,计算比较耗时,所以批处理层的主要作用是对预定的查询进行预计算,并将计算结果保存下来。如果做得更精细些,批处理层可以基于计算结果生成各种视图,并构建相应的索引,以供后续快速检索和查询。
2.快速处理层
在最标准的Lambda架构中,快速处理层的作用是实时计算在批处理层两次调度执行期间新到的增量数据,并将计算结果保存下来。在这种标准架构下,理论上快速处理层的输出结果与批处理层的输出结果在业务意义上应该是完全相同的。换言之,如果我们分别用两张数据库的表来存储批处理层和快速处理层的计算结果,那么这两张数据库表的表结构应该是相同的。只是因为分析的时间段不同,这两张表的数据记录不一样而已。但Lambda架构并非“定式”,在很多场景下,我们可以根据自己的需求对快速处理层做出改动。
例如,既然前一次的批处理层计算结果已经存储在数据库中了,那为什么快速处理层就不可以直接使用这次的批处理层计算结果呢?事实上我们经常这样做,例如,用批处理层学习统计模型或机器学习模型,将模型结果保存到数据库,然后快速处理层从数据库中定期更新模型,并根据模型做出实时预测。
3.服务层
服务层用于将批处理层和快速处理层各自计算所得结果合并起来,从而能够实时提供用户或应用程序在全量数据集上的查询结果。服务层对外提供的查询接口是只读的,这对实现高性能、无状态、高可靠的查询服务非常有用。所以,服务层在技术实现上结构相对简单,但它与具体的业务查询会结合得更加紧密。
Lambda架构是一种架构设计思想,针对每一层的技术组件选型并没有严格限定,所以我们可以根据实际情况选择相应的技术方案。批处理层的数据存储方案可以选择HDFS、S3等大数据存储方案。批处理层的任务执行框架则可以选择MapReduce、Hive、Spark等大数据计算框架。批处理层的计算结果(如数据库表或者视图)由于需要被服务层或快速处理层高速访问,所以可以存放在诸如MySQL、HBase等能够快速响应查询请求的数据库中。快速处理层是各种实时流计算框架的用武之地,如Flink、Spark Streaming和Storm等。快速处理层对性能的要求更加严苛,其计算结果可以写入像Redis这样具有超高性能表现的内存数据库中。当接收到查询请求时,服务层可以分别从存储批处理层和快速处理层计算结果的数据库中取出相应的计算结果并做出合并,作为最终的查询输出。
Lambda架构在实时流计算中的运用
本章最初的出发点是讨论当我们在实时流计算系统中不能够直接实现某些实时计算目标时应该如何处理,我们提出的解决方案是Lambda架构。那么具体应该怎样将Lambda架构引入我们的实时流计算系统中呢?
在以实时流计算为主体计算流程的体系中,并非要由服务层来提供最后全量数据的查询输出,而是由分散在流计算框架各个节点处的计算逻辑单元直接使用批处理层的计算结果,如图7-2所示。
以风控系统中的特征提取和风险评分为例。特征提取系统需要并发提取数十个特征,在这些特征中,有些特征的计算耗时很短,可以立刻实时计算出结果,如计数、求和等;而另外一些特征的计算非常耗时,不能够实时得到结果,如二度关系图的计算。所以,按照Lambda架构将计算的实时部分和离线部分分离的思想,我们把不能够实时计算的特征分离成实时计算和离线计算两部分,其中,实时计算是在离线计算结果的基础上进行的增量计算。与特征提取系统一样,风险评分系统也会有类似的问题,模型参数需要根据在线数据每天进行一次更新,这时也需要将模型和评分过程分离为离线计算和实时计算两部分。其中,离线计算用于训练更新模型参数,实时计算用于进行在线风险评分。
本篇文章给大家讲解的内容是Lambda架构
下篇文章给大家讲解的内容是Kappa架构与架构实例
相关推荐
- 团队管理“布阵术”:3招让你的团队战斗力爆表!
-
为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...
- 知情人士回应字节大模型团队架构调整
-
【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...
- 豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍
-
强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...
- 创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)
-
创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...
- 消息称吴永辉入职后引发字节大模型团队架构大调整
-
2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...
- 31页组织效能提升模型,经营管理团队搭建框架与权责定位
-
分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...
- 异形柱结构(异形柱结构技术规程)
-
下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...
- 职场干货:金字塔原理(金字塔原理实战篇)
-
金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...
- 底部剪力法(底部剪力法的基本原理)
-
某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...
- 结构等效重力荷载代表值(等效重力荷载系数)
-
某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...
- 体系结构已成昭告后世善莫大焉(体系构架是什么意思)
-
实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...
- 框架柱抗震构造要求(框架柱抗震设计)
-
某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...
- 梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)
-
某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...
- 死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?
-
活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...
- 不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么
-
最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- scrapy框架 (52)
- beego框架 (42)
- java框架spring (43)
- grpc框架 (55)
- 前端框架bootstrap (42)
- orm框架有哪些 (43)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)