作者 | 周爽

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

在很多业务场景中,我们会要求查询或计算的结果能够实时返回。比如火灾预警、贷前风险检测、量化交易等。如果事后再分析数据,这个时候火灾已经发生,骗子已经卷款而逃,市场机会已经错过,分析数据带来的价值也只限于“前事不忘,后事之师”了。

因此,对实时流数据的计算和分析一定要在其实时价值消退之前完成。这就要求计算的时延必须小。有时候因为数据量大、计算复杂的原因,实时计算无法完成,这时甚至会牺牲部分结果的准确性,保证误差在可接受范围的前提下,能偶优先满足计算的实时性。

但是不得不承认的是,即使我们已经采取了各种极富创造性和技巧性的优化手段,有些问题在当前普遍的硬件计算能力下,采用分布式、大数据、内存计算等技术,也不能直接得到实时计算的结果。那是不是说面对这些问题,就该彻底放弃实时计算的念头呢?

不是的。虽然不能直接实时计算出问题的答案,但是我们还是可以通过增量计算的方式来间接获得问题的实时答案。即使有时候这些答案具有稍微的迟滞性和近似性,但是只要它们能够带来尽可能最新的信息价值,那它们也是有用的。

Lambda架构正是这样一种用来处理不能够直接实时计算问题的通用架构。Lambda架构最初由Storm流计算框架的作者Nathan Marz为构建大数据场景下低延时计算和查询的通用架构模式而提出。Lambda架构总体上分为三层:批处理层(batch layer)、快速处理层(speed layer)和服务层(serving layer)。其中批处理和快速处理层分别处理历史全量数据和新入系统的增量数据,而服务层用于将批处理和快速处理层的结果合并起来,以提供最终用户或应用程序的查询服务。

Lambda架构

在Lambda架构中,各层的具体功能如下。

  • 批处理层。批处理层是为了存储主数据集和预计算各种批处理视图。当数据进入批处理层时,数据被存储下来,并作为数据系统的主要数据集。由于全量的数据会很大,计算比较耗时,所以批处理层的主要作用就是对预定的查询进行预计算,并将计算结果保存下来。如果做得更精细些,可以在计算结果上生成各种视图,并构建相应的索引,以供后续快速检索和查询。

  • 快速处理层。在最标准的Lambda架构中,快速处理层的作用是实时计算在批处理层两次调度执行期间新到的增量数据,并将计算结果保存下来。在这种标准架构下,理论上快速处理层的输出结果与批处理层的输出结果在业务意义上应该是完全相同。换言之也就是,如果我们分别用两张数据库的表来存储批处理层和快速处理层的计算结果,那么这两张数据库表的表结构应该是相同的。只是因为分析的时间段不同,这两张表里的数据记录不一样而已。但Lambda架构并非铁板一块的“定式”,在很多场景下我们可以根据自己的需求对快速处理层做出改动。比如,既然前一次的批处理层计算结果已经存储在数据库中了,那为什么快速处理层就不可以直接使用这次的批处理层计算结果呢?事实上我们经常这样做,比如用批处理层学习统计模型或机器学习模型,将模型结果保存到数据库,然后快速处理层从数据库中定期更新模型,并根据模型做出实时预测。

  • 服务层。服务层用于将批处理层和快速处理层各自计算所得结果合并起来,从而能够实时提供用户或应用程序在全量数据集上的查询结果。服务层对外提供的查询接口是只读的,这对于实现高性能、无状态、高可靠的查询服务非常有用。所以服务层在技术实现上结构相对简单,但它与具体的业务查询会结合得更加紧密。

Lambda架构是一种架构设计思想,针对每一层的技术组件选型并没有严格限定。所以我们可以根据自己公司和项目的实际情况选择相应的技术方案。批处理层的数据存储,可以选择HDFS、S3等大数据存储方案。批处理层的任务执行框架,则可以选择MapReduce、Hive、Spark等大数据计算框架。批处理层的计算结果(比如数据库表或者视图),由于需要被服务层或快速处理层高速访问,所以可以存放在诸如MySQL、HBase等能够快速响应查询请求的数据库中。对于快速处理层,这就是各种实时流计算框架的用武之地了,比如Flink、Spark Streaming和Storm等。快速处理层由于对性能要求更加严苛,它们的计算结果可以写入像Redis这样具有超高性能表现的内存数据库中。在服务层,当接收到查询请求时,就可以分别从存储批处理层和快速处理层计算结果的数据库中,取出相应的计算结果并做出合并,作为最终的查询输出。

Lambda架构为开发大数据量下的实时应用提供了一种切实有效的通用模式。通过将数据和处理分为批处理层、快速计算层和服务层三个相对独立的层次,Lambda架构降低了大数据在持续更新过程中问题的复杂性,并能够实时获得在全部数据集合上的查询结果。不过Lambda架构也存在一些问题。其中最主要的就是,对于同一个查询目标,需要分别为批处理层和快速计算层开发不同的算法实现。也就是说,对于同一套大体相同的逻辑,需要开发两种完全不同的代码,这对开发、测试和运维都带来一定的复杂性和额外工作量。

为了解决Lambda架构中因为批处理层和快速计算层“异质”带来的复杂性问题,LinkedIn的Jay Kreps在Lambda架构的基础上提出了Kappa架构。Kappa架构的核心思路就是,将批处理层也用快速处理层的流计算技术替换。这样一来,批处理层和快速处理层都是使用了相同的流处理逻辑,在开发、测试和运维上都有一个更统一的框架,从而降低了开发、测试和运维的成本。

Kappa架构

从Lambda架构上演进而来的Kappa架构,通过流来统一编程界面,确实极大简化了数据系统的构建过程。虽然在架构体系和实际代码开发过程中,Kappa相比Lambda具有更好的一致性。但是这并不意味着Kappa比Lambda架构更好,它们有各自的意义和价值。Lambda架构代表的是一种更通用的架构思想,指导我们在碰到不能直接用实时计算方式解决大数据问题时,不妨尝试采用这种离线和实时相结合的折衷方案。而Kappa架构的最大价值,则是启发我们尽量用流式计算框架来统一离线计算和实时计算。

作者:周爽,本硕毕业于华中科技大学,先后在华为2012实验室高斯部门和上海行邑信息科技有限公司工作。开发过实时分析型内存数据库RTANA、华为公有云RDS服务、移动反欺诈MoFA等产品。目前担任公司技术部架构师一职。著有《实时流计算系统设计与实现》一书。

【End】

在全民抗疫的特殊时期下,在人员复杂、流动量大地方的出入口处都设置了无接触式无感红外人体测温系统

在这次疫情防控中,无感人体测温系统发挥了怎样的作用?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术

今晚7点多场景疫情防控:解读云边端联动下的全栈 AI 技术应用

推荐阅读 

☞微盟耗时 145 个小时弥补删库,血亏 1.5 亿元!

☞谷歌 Fuchsia OS 进入开发者测试阶段,它真的会代替安卓吗?

☞0.052秒打开100GB数据?这个Python开源库这样做数据分析

☞两成开发者月薪超 1.7 万、算法工程师最紧缺!| 中国开发者年度报告

☞淘宝千万级并发架构的十四次演进

☞Libra为何而生?Facebook为何要给 Libra创建Move语言?Calibra技术负责人给出了回答

你点的每一个在看,我认真当成了喜欢

当数据处理做不到实时,应该怎么办?相关推荐

  1. 用女神Nalu的黄金秀发做毛笔––毛笔书法实时模拟技术的终极解决方案

    文章是从楼猪和屌丝间的对话展开的...... 屌丝:"楼猪,你太残忍了,你用女神Nalu的秀发来做毛笔......" 楼猪:"夸张了一点哈,其实就是受到Nalu秀发的启发 ...

  2. 香港恒生指数股指期货做单直播实时更新及新手做国际期货的体验

    香港恒生指数期货做单直播实时更新  以后会持续更新,欢迎关注! 今天一共做了4单,总共做了11手,前面三单做的是空单,后面一个是多单,总共毛盈利31800港币,折合美元大概4078美金,去掉手续费,大 ...

  3. 不会做大数据实时计算?10年数据分析师整理,一文给出解决方案

    本文分为四个章节介绍实时计算,第一节介绍实时计算出现的原因及概念:第二节介绍实时计算的应用场景:第三节介绍实时计算常见的架构:第四节是实时数仓解决方案. 一.实时计算 实时计算一般都是针对海量数据进行 ...

  4. H5网页播放器EasyPlayer.js也能做直播视频实时录像了

    EasyPlayer系列做了整整8年了,从最开始的EasyPlayer RTSP版,到后来的RTMP版.Pro版.js版,受众用户已经不计其数了,希望EasyPlayer能一如既往的优秀下去! 最近, ...

  5. 小程序AI初体验 | 做一款实时识别车辆报价的小程序

  6. 什么是 CD 管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!

    作者 | Magalix 翻译 | 火火酱,责编 | Carol 来源 | 架构师技术联盟 封图 | CSDN付费下载于IC photo CI/CD要解决的是什么问题? CI/CD(CI全名Conti ...

  7. 如何使用实时计算 Flink 搞定实时数据处理难题?

    简介:如何使用实时计算 Flink 搞定实时数据处理难题?本文由阿里巴巴高级技术专家邓小勇老师分享,从实时计算的历史回顾着手,详细介绍了阿里云实时计算 Flink 的核心优势与应用场景,文章内容主要分 ...

  8. 实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案

    实时大数据处理框架:挑战与解决方案 0.引言 1 数据收集 1.1.⼴泛的异构性 1.2.数据质量保障 2. 数据分析 2.1.数据处理的时效性 2.2.动态环境下的索引设计 3 数据安全 3.1.暴 ...

  9. linux实时还是分时,linux是实时系统仍是分时操做系统

    实时操做系统 实时操做系统 英文称Real Time Operating System,简称RTOS. 1.实时操做系统定义 实时操做系统(RTOS)是指当外界事件或数据产生时,可以接受并以足够快的速 ...

最新文章

  1. 主题博客成功的10个理由
  2. phpstorm设置的快捷键突然失效了,提示: IdeaVim ...
  3. condition框架设计与实现
  4. oracle 11g 数据库
  5. Gson 字符串与对象相互转换工具类
  6. SAP CRM CRM_PARTNER_READ_MULTI_OB
  7. 【转】Unix系统的心脏-Unix文件系统
  8. java可选项_在Java中链接可选项8
  9. mod_fcgid FcgidMaxRequestLen 131072 问题
  10. OpenCV4Android人脸检测功能
  11. 知乎App有哪些非常“贴心”的UI设计
  12. Android开发:菜单栏Menu用法讲解
  13. 如何能把 CAJ 格式文档转换成 PDF 格式?
  14. 白化(Whitening) PCA白化 ZCA白化
  15. 《东周列国志》第六十六回 杀宁喜子鱄出奔 戮崔杼庆封独相
  16. 从虚拟主机迁移数据至VPS/云主机/独立服务器的方法
  17. java.lang.StringIndexOutOfBoundsException
  18. weblogic 14c 的下载和安装
  19. Unity异常退出日志存储位置
  20. 我对说话人识别/声纹识别的研究综述

热门文章

  1. 第一次使用并配置Hibernate
  2. Elasticsearch 动态映射——自动检测
  3. 二套“非普通住宅”是否认贷不认房 各地口径不一
  4. 学会这20条,做个聪明的人
  5. Hive远程模式安装指导
  6. Pytorch 手工复现交叉熵损失(Cross Entropy Loss)
  7. [DFS|剪枝] leetcode 22 括号生成
  8. 矩池云上如何安装tensorRT
  9. python 图表 web_新手向——制作web图表(基于Python和GooPyCharts)
  10. leetcode python3 简单题26. Remove Duplicates from Sorted Array