大数据架构之Lambda

数据系统架构——Lambda architecture(Lambda架构) 传统系统的问题 “我们正在从IT时代走向DT时代(数据时代)。IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好”——阿里巴巴董事局主席马云。 数据量从M的级别到G的级别到现在T的级、P的级别。数据量的变化 数据管理系统(DBMS)和数仓系统(DW)也在悄然的变化着。 阅读详情

Nathan Marz的大作Big Data: Principles and best practices of scalable real-time data systems介绍了Labmda Architecture的概念,用于在大数据架构中,如何让real-time与batch job更好地结合起来,以达成对大数据的实时处理。

传统系统的问题

在传统数据库的设计中,无法很好地支持系统的可伸缩性。当用户访问量增加时,数据库无法满足日益增长的用户请求负载,从而导致数据库服务器无法及时响应用户请求,出现超时错误。

解决的办法是在Web服务器与数据库之间增加一个异步处理的队列。如下图所示:

引入队列

当Web Server收到页面请求时,会将消息添加到队列中。在DB端,创建一个Worker定期从队列中取出消息进行处理,例如每次读取100条消息。这相当于在两者之间建立了一个缓冲。

但是,这一方案并没有从本质上解决数据库overload的问题,且当worker无法跟上writer的请求时,就需要增加多个worker并发执行,数据库又将再次成为响应请求的瓶颈。一个解决办法是对数据库进行分区(horizontal partitioning或者sharding)。分区的方式通常以Hash值作为key。这样就需要应用程序端知道如何去寻找每个key所在的分区。

问题仍然会随着用户请求的增加接踵而来。当之前的分区无法满足负载时,就需要增加更多分区,这时就需要对数据库进行reshard。resharding的工作非常耗时而痛苦,因为需要协调很多工作,例如数据的迁移、更新客户端访问的分区地址,更新应用程序代码。如果系统本身还提供了在线访问服务,对运维的要求就更高。稍有不慎,就可能导致数据写到错误的分区,因此必须要编写脚本来自动完成,且需要充分的测试。

即使分区能够解决数据库负载问题,却还存在容错性(Fault-Tolerance)的问题。解决办法:

  • 改变queue/worker的实现。当消息发送给不可用的分区时,将消息放到“pending”队列,然后每隔一段时间对pending队列中的消息进行处理。
  • 使用数据库的replication功能,为每个分区增加slave。

问题并没有得到完美地解决。假设系统出现问题,例如在应用系统代码端不小心引入了一个bug,使得对页面的请求重复提交了一次,这就导致了重复的请求数据。糟糕的是,直到24小时之后才发现了该问题,此时对数据的破坏已经造成了。即使每周的数据备份也无法解决此问题,因为它不知道到底是哪些数据受到了破坏(corrupiton)。由于人为错误总是不可避免的,我们在架构时应该如何规避此问题?

现在,架构变得越来越复杂,增加了队列、分区、复制、重分区脚本(resharding scripts)。应用程序还需要了解数据库的schema,并能访问到正确的分区。问题在于:数据库对于分区是不了解的,无法帮助你应对分区、复制与分布式查询。最糟糕的问题是系统并没有为人为错误进行工程设计,仅靠备份是不能治本的。归根结底,系统还需要限制因为人为错误导致的破坏。

数据系统的概念

大数据处理技术需要解决这种可伸缩性与复杂性。首先要认识到这种分布式的本质,要很好地处理分区与复制,不会导致错误分区引起查询失败,而是要将这些逻辑内化到数据库中。当需要扩展系统时,可以非常方便地增加节点,系统也能够针对新节点进行rebalance。

其次是要让数据成为不可变的。原始数据永远都不能被修改,这样即使犯了错误,写了错误数据,原来好的数据并不会受到破坏。

何谓“数据系统”?Nathan Marz认为:

如果数据系统通过查找过去的数据去回答问题,则通常需要访问整个数据集。

因此可以给data system的最通用的定义:

Query = function(all data)

接下来,本书作者介绍了Big Data System所需具备的属性:

  • 健壮性和容错性(Robustness和Fault Tolerance)
  • 低延迟的读与更新(Low Latency reads and updates)
  • 可伸缩性(Scalability)
  • 通用性(Generalization)
  • 可扩展性(Extensibility)
  • 内置查询(Ad hoc queries)
  • 维护最小(Minimal maintenance)
  • 可调试性(Debuggability)

Lambda架构

Lambda架构的主要思想就是将大数据系统构建为多个层次,如下图所示:

lambda layer

理想状态下,任何数据访问都可以从表达式Query = function(all data)开始,但是,若数据达到相当大的一个级别(例如PB),且还需要支持实时查询时,就需要耗费非常庞大的资源。

一个解决方式是预运算查询函数(precomputed query funciton)。书中将这种预运算查询函数称之为Batch View,这样当需要执行查询时,可以从Batch View中读取结果。这样一个预先运算好的View是可以建立索引的,因而可以支持随机读取。于是系统就变成:

batch view = function(all data)
query = function(batch view)

Batch Layer

在Lambda架构中,实现batch view = function(all data)的部分被称之为batch layer。它承担了两个职责:

  • 存储Master Dataset,这是一个不变的持续增长的数据集
  • 针对这个Master Dataset进行预运算

显然,Batch Layer执行的是批量处理,例如Hadoop或者Spark支持的Map-Reduce方式。 它的执行方式可以用一段伪代码来表示:

function runBatchLayer():
  while (true):
    recomputeBatchViews()

例如这样一段代码:

Api.execute(Api.hfsSeqfile("/tmp/pageview-counts"),
     new Subquery("?url", "?count")
         .predicate(Api.hfsSeqfile("/data/pageviews"),
             "?url", "?user", "?timestamp")
         .predicate(new Count(), "?count");

代码并行地对hdfs文件夹下的page views进行统计(count),合并结果,并将最终结果保存在pageview-counts文件夹下。

利用Batch Layer进行预运算的作用实际上就是将大数据变小,从而有效地利用资源,改善实时查询的性能。但这里有一个前提,就是我们需要预先知道查询需要的数据,如此才能在Batch Layer中安排执行计划,定期对数据进行批量处理。此外,还要求这些预运算的统计数据是支持合并(merge)的。

Serving Layer

Batch Layer通过对master dataset执行查询获得了batch view,而Serving Layer就要负责对batch view进行操作,从而为最终的实时查询提供支撑。因此Serving Layer的职责包含:

  • 对batch view的随机访问
  • 更新batch view

Serving Layer应该是一个专用的分布式数据库,例如Elephant DB,以支持对batch view的加载、随机读取以及更新。注意,它并不支持对batch view的随机写,因为随机写会为数据库引来许多复杂性。简单的特性才能使系统变得更健壮、可预测、易配置,也易于运维。

Speed Layer

只要batch layer完成对batch view的预计算,serving layer就会对其进行更新。这意味着在运行预计算时进入的数据不会马上呈现到batch view中。这对于要求完全实时的数据系统而言是不能接受的。要解决这个问题,就要通过speed layer。从对数据的处理来看,speed layer与batch layer非常相似,它们之间最大的区别是前者只处理最近的数据,后者则要处理所有的数据。另一个区别是为了满足最小的延迟,speed layer并不会在同一时间读取所有的新数据,相反,它会在接收到新数据时,更新realtime view,而不会像batch layer那样重新运算整个view。speed layer是一种增量的计算,而非重新运算(recomputation)。

因而,Speed Layer的作用包括:

  • 对更新到serving layer带来的高延迟的一种补充
  • 快速、增量的算法
  • 最终Batch Layer会覆盖speed layer

Speed Layer的等式表达如下所示:

realtime view = function(realtime view, new data)

注意,realtime view是基于新数据和已有的realtime view。

总结下来,Lambda架构就是如下的三个等式:

batch view = function(all data)
realtime view = function(realtime view, new data)
query = function(batch view . realtime view)

整个Lambda架构如下图所示:

lambda architecture

基于Lambda架构,一旦数据通过batch layer进入到serving layer,在realtime view中的相应结果就不再需要了。



作者:_张逸_
链接:https://www.jianshu.com/p/b6bf05332c18
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最全架构设计之大数据架构(Lambda架构、Kappa架构)(1) HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,【通常用于处理离线数据的存储】。: 高可用/可靠,分布式海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。(2)在实时数据处理时,遇到大量不同的实时流进行关联时,非常依赖实时计算系统的能力,很可能因为数据流先后顺序问题,导致数据丢失。 阅读详情

相关推荐

整理总结 --- 大数据架构 Lambda, IOTA等

1、流式架构传统大数据架构 优点:简单,易懂,对于BI系统来说,基本思想没有发生变化,变化的仅仅是技术选型,用大数据架构替换掉BI的组件。 缺点:对于大数据来说,没有BI下如此完备的Cube架构,虽然目前有kylin,但是kylin的局限性非常明显,远远没有BI下的Cube的灵活度和稳定度,因此对业务支撑的灵活度不够,所以对于存在大量报表,或者复杂的钻取的场景,需要太多的手工定制化,同时该...

tianyeshiye 2280

大数据系统的Lambda架构

http://www.tuicool.com/articles/uiyYFf Nathan Marz的大作Big Data: Principles and best practices of scalable real-time data systems介绍了Labmda Architecture的概念,用于在大数据架构中,如何让real-time与batch job更好地结合起来,以达成对

Baple的专栏 1755

深入理解大数据架构之——Lambda架构

原文链接:https://jiang-hao.com/articles/2019/big-data-lambda-architecture.html “我们正在从IT时代走向DT时代(数据时代)。IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好” ——阿里巴巴董事局主席马云。 传统系统的...

Heriam的博客 1321

深入理解Lambda架构

本文要介绍的是 2015 年 O'Reilly 出版的书籍 [Big Data: Principles and best practices of scalable realtime data systems](https://learning.oreilly.com/library/view/big-data/9781617290343/),书中主要介绍一种常见的大数据架构 —— **Lambda 架构**。Lambda 架构通过批处理和流处理相结合的方法,有效处理了大数据场景下的工作负载。相比以关系型数

ruanrunxue的博客 1323

最新架构设计之大数据架构(Lambda架构、Kappa架构)

一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。:开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

2401_84166811的博客 1471

2024年大数据最全架构设计之大数据架构(Lambda架构、Kappa架构)(3)

(Hadoop分布式文件系统),它可以用来存储海量数据,适合运行在通用硬件上的分布式文件系统(Distributed File System)。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,【通常用于处理离线数据的存储】。: 高可用/可靠,分布式海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。【实时数据和离线数据均支持】。

2401_84166965的博客 3310

<<Big Data: Principles and Best Practices of Scalable Realtime Data Systems>>读书笔记

Chapter 1 A New Paradigm for Big Data 1.1 How this Book is structured focus on principles of big data problem => theory / illustration 1.2 Scaling with a traditional database original  proble

kiwi_coder 3658

大数据架构设计:Lambda架构与Kappa架构对比

本文旨在为大数据架构师和开发者提供Lambda与Kappa架构的深度对比分析,覆盖架构原理、实现机制、适用场景和演进趋势,重点解析两种架构在实时计算、数据一致性、系统复杂度等维度的差异。fill:#333;color:#333;color:#333;fill:none;大数据处理需求Lambda架构Kappa架构批处理层速度层服务层流处理层事件日志事件溯源:通过持久化记录事件序列重建系统状态的设计模式水印(Watermark):流处理系统中处理乱序事件的进度标识。

大数据洞察的博客 1122

BigData - Lambda架构 vs Kappa架构

Lambda 架构 Lambda架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则,可集成Hadoop, Kafka, Spark,Storm等各类大数据组件。 Lambda 架构可分解为三层Layer,即Batch Layer, Re...

tianyeshiye 527

最新架构设计之大数据架构(Lambda架构、Kappa架构)(2)

大数据分层架构图::(Hadoop分布式文件系统),它可以用来存储海量数据,适合运行在通用硬件上的分布式文件系统(Distributed File System)。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,【通常用于处理离线数据的存储】。: 分布式、面向列的开源数据库,适合于非结构化数据存储。【实时数据和离线数据均支持】。

2401_84166811的博客 768

Big Data Principles and best practices of scalable realtime data systems.pdf

Big Data Principles and best practices of scalable realtime data systems.pdf

大数据Lambda架构

正在构建越来越多的系统来处理大数据的容量 , 速度和多样性 ,并有望帮助获得新的见解并做出更好的业务决策。 在这里,我们将研究在单个架构解决方案中同时处理大数据的体积和速度的方法。 音量+速度 Apache Hadoop为计算机集群之间的大型数据集提供了可靠的存储(HDFS)和处理系统(MapReduce)。 MapReduce是针对长期运行的后台进程的批处理查询处理器 。 Hadoop...

danpu0978的博客 420

【数据分析/商业分析】面试题整理——SQL专题

数据分析\商业分析—面试题整理 自己总结的SQL类的面试题 文章目录数据分析\商业分析—面试题整理1.新增用户2.活跃用户数量3.连续登录4.次(n)日留存5.每个科目下分数最高的两名学生

awater_17的博客 1858

架构设计之大数据架构(Lambda架构、Kappa架构)

Lambda、Kappa大数据架构介绍

Elaine的博客 7616

优化求解器性能:当分支切割算法中的gap停滞不前时如何应对

本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。

weixin_29294597的博客 381

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

大数据管道——基于Lambda架构的实现

大数据管道——基于Lambda架构的实现 1. 项目介绍 本项目是一个完整的Lambda架构示例,旨在处理大数据流,集成了Spark、Kafka、HDFS和Cassandra等关键技术。Lambda架构是一种混合处理大数据的方式,支持批处理和流处理两种模式,通过将数据处理过程分为批处理层(Batch Layer)、流处理层(Speed Layer)和一个统一视图层(Unified View Lay...

gitblog_00263的博客 1004

广义标签多伯努利滤波器(GLMB):多目标跟踪中的动态身份维护理论与算法解析

目标集表示Xx1l1x2l2xNlNX{(x1​l1​x2​l2​xN​lN​)}xi∈Rdxi​∈Rd为目标状态(如位置、速度),li∈Lli​∈L为唯一标签(可数无限集,如自然数序列),N 为目标数(允许N0N=0N0,即空集)。GLMB 通过广义化标签多伯努利分布,将多目标跟踪从 “状态估计” 提升至 “动态身份 - 状态联合建模”,成为复杂场景下精准跟踪的核心技术。

qq_44965657的博客 1596

Lambda大数据架构

Lambda 架构 适合需要同时处理实时和离线数据的场景,尤其在历史数据处理要求较高的情况下表现更好。 Kappa 架构 更适合追求简单性和实时性的场景,能够显著降低复杂度和维护成本,但历史数据处理能力相对较弱。

linkedin_21843693的博客 1202

微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

微信支付提示System:access_denied,调用微信支付返回:system:access_denied为什么,安卓版微信支付偶尔出现system:access_denied,微信公众号开发分享出现system:access_denied,system:access_denied如何解决?微信WeixinJSBridge.invoke(‘xxx‘)API调用后出现报错,微信内部H5WeixinJSBridge.invokesystem:access_denied,使用微信jssdk时报ac

🏆 前端领域优质创作者 5145

YOLOv5改进之---EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

本文主要针对yolov5的iou损失函数进行改进,主要涵盖EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU这几种损失

qq_41920323的博客 1465

大数据lambda架构实现方案

大数据lambda架构实现方案 基础结构 此项目主要为拓客查找潜在企业客户,展示企业客户详情需求提供服务。借鉴DDD设计思想对域进行划分,由于需求比较简单明确,此处主要按主体类型划分为企业客户域、店铺客户域等。 目前仅针对企业客户域进行了重新设计,目录结构如下: . ├── app.py <-- 服务入口 ├── DarkPortal │ ├── dark_portal.thrift <-- RPC接口声明 │ ├── connection.py <-- RPC服务配置 ├── m

simuLeo的博客 728

工业产线瑕疵检测:基于 YOLO 的自动化质检系统实战

从工业瑕疵数据集构建到模型训练,从桌面检测界面到产线适用性优化,本文覆盖了一套工业质检系统的完整路线。这个场景的核心评价指标不是最高精度,而是在保证 recall ≥ 0.95 的前提下尽可能压低 false positive——因为漏检的直接成本(客户投诉、质量事故)远高于误报的成本(人工复检)。部署时先设一个偏低的置信度阈值确保覆盖,再通过持续收集人工复检数据来逐步调优。

m0_71589036的博客 66

大数据Lambda架构详解

Lambda架构是Nathan Marz提出的一个实时大数据处理框架。Nathan Marz是著名的实时大数据处理框架Storm的作者,Lambda架构就是其根据多年分布式大数据系统的经验总结提炼而成。 Nathan Marz 在Big Data:Principles and best practices of scalable real-time data systems一书中提到了很多实时大数据系统的关键特性,包括容错性,健壮性,低延迟,可扩展,通用性,方便查询等,Lambda就是其根据这些特性设计的一

null的专栏 1万+

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4373

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: hbase存储设计原理
下一篇: 大数据架构之Kappa
yyoc97
博客等级 码龄12年 272粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值