Lambda 架构

来源于我的GitHub博客中的一篇,是对大数据系统实践这本书的简单总结

(一).新范式

传统数据库的不足

  • 数据库更不上负载:解决方法-用队列扩展

  • 数据库再次超载:解决方法-通过数据库进行分片扩展

  • 处理容错问题

  • 损坏问题

    系统必须是可以容忍人为错误的

大数据系统应有的属性

  • 鲁棒性和容错性

  • 低延迟读取和更新

  • 可扩展性

  • 通用性

  • 延展性(目标实现大规模迁移)

  • 及席查询

  • 最少维护

  • 可调式性

Lambda架构模型

基本原理

数据系统不只是记录和重现信息 你掌握的信息是真实的,只是因为它存在
数据系统的通用表达式:

query = function(all data)

Lambda架构总体的函数

系统抽象函数:

batch view = function (all data)
realtime view = function (realtime view(实时视图) ,new data)
query = function (batch view ,realtime view )

Lambda架构模型的说明
  • 批处理层:先查询预先计算查询函数(批处理视图)
  • 速度层:速度层只查看最近的数据,而批处理层要立即查看所有数据,速度层做增量查询.而不是像批处理层那样重写计算
  • 服务层:一个专门的分布式数据库,用于加载批处理视图,并且可以对它进行随机读取
示例应用:SuperWebAnalytics.com

(二).批处理层

数据的属性

数据是原始的
  • 非结构化的数据比规范化的数据更原始,更多的信息并不意味更原始的数据
数据是不可变的
  • 容忍人为错误是数据系统的基本属性,对于可变的数据模型,一个错误会导致数据的丢失.在数据库中值会被覆盖掉;而对于不可变的数据模式,如果人为的写入了坏数据,更早一些的数据单元仍然存在.修复数据系统知识删除损坏的数据单元
  • 可变数据模式数据必须以某种方式被索引,相反,不可变数据模式不需要,这是巨大的简化
数据是永远真实的
  • 删除数据不是对数据真实性的声明,相反,它是对数据价值的声明

基于事实的数据表示模型

事实模型的特点
  • 将原始数据储存为原子事实-原子性(不能再细化成有意义的组件)
  • 通过时间戳保证事实的不变性和永远正确性
  • 确保每个事实是可区分的,这样查询过程可以区分重复
基于事实的模型的优势
  • 任何时刻的历史消息都是可查询的

  • 容忍人为错误(删除事实)

  • 只需要处理部分信息

  • 拥有规范和非规范形式的优点

    规范化-以结构化的方式存储数据-查询效率

    非规范化-保证数据一致性

批处理层的数据存储

主数据集的存储需求
  • 写:
    • 高效追加数据:简单高效
    • 可扩展的存储:TB或PB级别的数据,必须很容易扩展存储
  • 读:
    • 支持并行处理
  • 读写:
    • 可调优存储和处理成本
    • 强制不变性
分布式文件系统的存储需求

主要矛盾:处理成本和存储成本

解决方案:分布式文件系统

垂直分区(这种存储标准适用全架构的哪一部分的数据集)

次要矛盾:查询效率和存储成本

解决什么问题:提高批处理查询效率

怎么实现:例如静态分区,动态分区

批处理层

视图的标准
  • 批处理层上计算的一个简单策略;预先计算所以可能的查询,并将结果缓存在服务层中,但这种预先计算不能穷尽所有业务的可能性,对于给定的查询业务,要预先计算的是每一个单元
重新计算算法
  1. 性能:需要处理整个数据集的计算工作量
  2. 容忍人的错误:批处理视图不断被重建
  3. 通用性:在预先处理阶段解决了算法的复杂性,由此生成了简单的批处理视图和低延迟动态处理
  4. 总结:对于支持鲁棒性的数据处理系统是必不可少的
增量算法(适用什么场合或者要满足什么要求)
  1. 性能:需要更少的计算资源但可能产生大得多的批处理视图

  2. 容忍人的错误:不容易修复批处理视图中的错误,修复是暂时的,可能要估算

  3. 通用性:需要特殊定制.可能将复杂性转移到动态查询的处理中

  4. 总结:提高系统效率,但只是重新计算算法的补充

一种大数据计算的范式:MapReduce
  • 优:可扩展性 容错性 通用性
  • 缺:多步计算 join连接要手动 逻辑和物理执行耦合
一种关于批处理计算的高级思维方式:管道图

批处理层示例与实现(业务处理)

URL规范化
用户标识符规范化(迭代图算法)
  • 等效边的处理
页面浏览去重

改日再写…………

(三).服务层

服务层概述

服务层的性能指标

起源:

  • 层的索引以完全分布式的方式被创建、加载和 服务

指标:

  • 延迟:响应单个查询所需 的时间
  • 吞吐量:给定时间内可以服务的查询数量

性能的优化:

  • 的索引促进扫描并限制磁盘寻道,从而改善了延迟和吞吐量
一致性问题的描述

解决方案:lambda架构中主数据集和服务层之间是分离的,解决”一个字段的不同副本数据不一致问题”等,重新开始计算服务层

服务层数据库的需求
  • 写-服务层所用的批处理视图是从头开始产生的,当视图的一个新的版本可以用时,旧版本的视图必须能够完全用新的视图替换

  • 展性-服务层数据库必须能够处理任意大小的视图

  • 读取-尤对小部分视图的随机读取

  • 性-分布式架构必须要容忍机器的故障

设计SuperWebAnalytics.com的服务层

ElephantDB数据库

LAMBDA架构服务层的基本概念
  • 视图来优化延迟和吞吐量的能力

  • 持随机写的简单形式

  • 处理层储存规范化数据并在服务层储存非规范化数据的能力

  • 层固有的容错和纠错性.因为可以从主数据集重新计算

(四).速度层

实时视图

存储实时视图
  • 随机读:实时视图应该支持快速回应查询,这意味着它所包含的数据必须被索引
  • 随机写:为了支持增量算法,必须低延迟地修改实时视图
  • 可扩展性
  • 容错性
最终一致性
  • 所有的数据最终都将表示在批处理层和服务层视图中,任何在速度层得到的近似值会被不断修正,这意味着任何近似值知识暂时的,即查询最终展示了准确性
增量算法的挑战
  • CAP定理的正确表述:当分布式数据系统被分区时,它可以是一致性的或者可用性的,但不能两者兼而有之.也就是说,如果选择了一致性,那么查询就会收到错误结果而不是正确答案:如果选择可用性,那么在网络分区间,读操作可能返回过时的数据,在高可用性系统中,最好的一致性属性是最终一致性

  • CAP定理

队列和流

队列
  • 单消费者队列

    • 设计思想:从队列中读取一个事件时,该事件不会立即被删除,相反,get方法返回的记录包括一个标识符,稍后用它来确认处理事件成功还是失败.只有一个事件被确认成功删除,它才会被从队列中删除,如果事件处理失败或者超时,队列服务器将允许另一个服务器通过一个单独的get方法调用相同的事件.因此使用该方法,一个事件可能被处理多次,但是每个事件至少被处理一次是毋庸置疑的
    • 缺陷:消除了独立应用程序之间的任何隔离性
    • 完善:为每个消费者应用程序维护一个单独的队列,但是这种方法的实现大大增加服务器上的负载
    • 启发:队列系统所需的属性
  • 多消费者队列

    • Apache Kafka
流处理
  • storm

  • spark

  • flink

微批量处理

实现有且仅有一次的语义
微批量流处理

每个批次被有序处理,并且每个批次都有唯一的ID,该ID每次回放总是一样的

微批量流处理的核心概念
  • 本地批量计算
  • 有状态的计算

(五).深入lambda架构

定义数据系统

查询要关注的属性

  • 延迟:运行一个查询的书剑

  • 时效性:最新的查询如何

  • 准确性:在许多情况下,为了使查询更具有较好的性能和可扩展性,必须在查询的实现中采用近似值

延迟性和及时性的描述

  • CAP定理表明:在网络分区的情况下,一个系统要么是一致性(查询考虑到所有以前写入的数据),要么是可用的(目前查询可以被回应)

  • 一致性只是及时性的一种形式,可用性只意味查询的延迟是有界的.最终一致性的系统选择延迟而不是及时性(查询总是被回应,但可能不会考虑所有先前失败的情况下的数据)

数据系统的基本模型

为什么如此以及怎样:允许人为错误 易变性 唯一的办法是让核心数据保持不变

  • 包含不断增长 的数据集合的主数据集

  • 作为函数的查询将整个主数据集作为输入

批处理层和服务层

增量的批处理

局限性:原始数据可能是混乱的

解决的方案:部分重新计算:

  • 部分重新计算花费时间比基于完全重新计算的方法快
  • 给予一定的能力来纠正人为错误

速度层

设计的主旨:倾向于性能使用增量算法而不是重新计算方法

查询层

目的:负责利用批处理层和实时视图来响应查询

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容