Day38-06|19.3.3 Lambda 架构介绍:四层结构、数据流与结果服务

对应教材目录:第 19 章 大数据架构设计理论与实践 → 19.3 Lambda 架构 → 19.3.3 Lambda 架构介绍

学习目标:掌握 Lambda 架构的组成层次、数据流和核心组件职责;理解批处理层、速度层、服务层及不可变数据的协作方式;能够从数据接入、计算、存储、查询、治理和故障恢复角度描述一套完整 Lambda 架构。

一、Lambda 架构的整体结构

Lambda 架构通常由不可变数据层、批处理层、速度层和服务层组成。不可变数据层保存原始事实;批处理层面向完整数据进行高准确度计算;速度层面向最新事件进行低延迟计算;服务层向外提供统一查询和结果合并。

                       +------------------+
                       |   批处理层       |
                       | 全量/增量计算    |
                       +--------+---------+
                                |
                           批视图/批水位
                                |
+------------+          +-------v----------+
| 事件来源    |--------->|    服务层         |----> 业务应用
+-----+------+          | 合并实时与批量结果 |
      |                  +-------^----------+
      |                          |
      +----> 不可变数据层 -------+<---- 实时视图
                 |
                 +--------> 速度层
                           流式计算

不同资料可能把不可变数据层称为数据层,把服务层称为查询层,但核心思想一致:事实数据、计算逻辑和对外服务相互协作,同时保持职责边界。

二、不可变数据层

1. 数据层职责

数据层接收并长期保存事件、日志、交易、设备数据和业务变更。它应支持追加写入、分区、复制、压缩、重放和按时间范围读取。数据一旦落盘,尽量不直接修改,修正通过新事件或版本表达。

2. 数据层的关键属性

  • 可追加:支持高吞吐写入和事件顺序记录。
  • 可重放:能够按时间、主体或分区重新读取。
  • 可扩展:容量和吞吐可通过增加节点提升。
  • 可追溯:保留来源、时间、版本和处理状态。
  • 可治理:有目录、权限、加密、生命周期和删除机制。

3. 事件与视图的区别

事件是事实,例如“用户点击了商品”“设备上报温度”“订单支付成功”;视图是对事件计算后的结果,例如用户画像、设备健康分数和销售汇总。事件适合重放,视图适合查询,不能用易变视图代替原始事实。

三、批处理层

1. 批处理层职责

批处理层读取全量或指定范围的不可变数据,执行清洗、去重、关联、聚合、模型计算和质量校验,生成批视图。它可以使用分布式文件系统、对象存储、批计算引擎、SQL 引擎、数据仓库或机器学习平台。

2. 批处理作业结构

数据扫描 -> 模式校验 -> 清洗去重 -> 业务变换
    -> 关联聚合 -> 结果校验 -> 批视图发布

作业需要有输入范围、代码版本、规则版本、输出版本和质量状态。失败后可以从检查点恢复或重新执行,不能依赖手工删除中间数据。

3. 全量与增量

全量计算准确但成本较高,增量计算成本低但依赖可靠变更记录和边界管理。架构可以定期全量校验、平时增量更新,在准确性和成本之间平衡。

四、速度层

1. 速度层职责

速度层从消息队列或事件流接收最新数据,以低延迟更新实时视图。它常使用流计算引擎、窗口、状态存储、规则引擎和实时特征服务。

2. 速度层处理过程

消息接入 -> 分区消费 -> 时间/顺序处理 -> 状态更新
       -> 窗口聚合 -> 去重与幂等 -> 实时视图

速度层要处理背压、消费积压、重复、乱序、迟到、状态膨胀和故障恢复。实时视图应带有生成时间、事件水位和版本信息。

3. 实时结果的边界

速度层结果是快速结果,不一定是最终结果。业务应用需要知道结果的新鲜度、覆盖范围和是否可能被批处理修正。涉及结算、监管和高价值决策时,不能把实时近似结果未经确认直接作为最终事实。

五、服务层

1. 服务层职责

服务层屏蔽底层存储和计算的复杂性,为业务提供统一的查询、指标、画像、推荐、特征或告警接口。它负责合并批视图和实时视图,并处理权限、缓存、限流、版本和审计。

2. 批流合并

假设批视图包含截至 T 的数据,速度视图包含 T 之后的增量,则服务层可以根据业务语义合并。对于累加指标,可以计算批结果加增量;对于状态类结果,需要按事件版本和优先级覆盖;对于去重结果,需要通过事件 ID 判断是否已经被批处理包含。

3. 查询服务的安全性

服务层是数据对外暴露边界,必须执行主体、租户、资源、动作和字段级授权。不能因为底层批视图已经生成,就认为查询没有安全风险。导出、批量查询和跨租户聚合要单独控制并审计。

六、数据流与水位管理

1. 事件流

事件通常先进入持久化消息或日志,再被批处理和速度层消费。消息应支持重放、分区、保留和消费位点。采集失败时要有重试、缓冲和补偿,否则两条计算路径可能看到不同数据。

2. 批处理水位

批处理水位表示批视图已经覆盖到的事件时间或版本。服务层用它判断哪些实时结果仍需保留,哪些已经被批处理吸收。

事件时间轴:|----已被批视图覆盖----|----速度层增量---->
                              T
                         批处理水位

水位必须可持久化、可查询和可审计。批次发布失败时不能提前移动水位,否则会造成数据缺口。

3. 版本发布

批视图和实时视图应采用版本化发布。服务层读取稳定版本,批处理完成后原子切换元数据指针,避免读取到半成品。发现错误时可以回滚到上一版本,并保留异常批次供调查。

七、Lambda 架构中的一致性问题

1. 双写问题

事件同时写入原始存储和消息队列时,可能一边成功一边失败。可以使用统一日志作为事实来源,让速度层和批处理层都从日志读取;或设置可靠采集、补偿扫描和对账任务。

2. 处理一次与至少一次

大多数分布式流系统更容易实现至少一次处理,因此可能重复计算。业务需要通过事件 ID、幂等表、唯一约束和结果版本实现逻辑上的一次效果。真正的端到端恰好一次需要较高成本,不能只依赖处理引擎宣传。

3. 批流逻辑一致

同一个指标在批处理和速度层中要使用一致定义。可以共享领域模型、规则配置和测试样例,建立批流对账和差异告警。规则更新要同时管理两个版本,不能只修改实时逻辑。

八、部署和运维结构

1. 资源隔离

批处理任务可能占用大量 CPU、内存和存储 IO,速度层则需要稳定低延迟。应分配不同资源池、队列、优先级和监控策略,必要时部署到不同集群。

2. 任务调度

批处理需要依赖编排、数据就绪检查、重试、超时和补偿;速度层需要监控消费位点、延迟、积压和状态大小。两类任务的发布、回滚和告警方式不同。

3. 运维指标

关键指标包括:事件接入成功率、消息积压、端到端延迟、批任务耗时、批流差异、视图水位、结果新鲜度、状态大小、失败重试、查询延迟、存储增长和资源成本。

九、安全与治理结构

Lambda 架构拥有原始事件、批视图、实时视图和服务结果多个层次,每层都需要安全治理:

  • 原始事件:敏感字段加密、访问最小化、生命周期和删除。
  • 消息队列:生产者/消费者身份、主题授权、保留期和审计。
  • 批视图:行列级权限、版本、质量状态和数据血缘。
  • 实时视图:缓存保护、状态访问控制和租户隔离。
  • 服务层:接口授权、限流、导出审计和异常检测。
  • 运维层:代码、规则、密钥、配置和发布的分权管理。

十、案例分析:城市交通实时分析平台

某城市平台接入道路摄像头、车辆 GPS、信号灯和事故上报数据,需要提供实时拥堵告警、历史路况、交通规划和公众查询。

架构设计如下:

  1. 设备和事件进入统一接入层,按道路、区域和时间分区保存原始数据。
  2. 速度层计算最近路段速度、排队长度、异常停车和事故关联,生成实时告警。
  3. 批处理层清洗 GPS 漂移和迟到数据,重算历史拥堵指数和规划指标。
  4. 服务层合并批视图与实时视图,为指挥中心、规划人员和公众提供不同数据范围。
  5. 敏感车辆和个人信息在采集和服务层脱敏,公众接口只返回聚合结果。
  6. 批次水位、模型版本和告警规则纳入审计,异常结果可回放和重算。
  7. 遇到消息积压时优先保证告警链路,低优先级历史分析排队,不能直接丢失安全相关事件。

十一、案例题答题模板

介绍 Lambda 架构时可按“数据—计算—服务—治理”作答:

  1. 数据:不可变事件、持久化消息、分区、重放和生命周期。
  2. 计算:批处理全量准确计算,速度层实时增量计算。
  3. 服务:批视图、实时视图、水位、版本和结果合并。
  4. 一致性:去重、幂等、乱序、迟到、双写和批流对账。
  5. 运维:资源隔离、调度、监控、告警、故障恢复和回滚。
  6. 治理:数据质量、目录、血缘、权限、加密、审计和成本。

十二、课后练习

练习 1

Lambda 架构中的四个核心组成部分是什么?

参考答案:不可变数据层、批处理层、速度层和服务层。不可变数据保存事实,批处理生成准确批视图,速度层生成实时视图,服务层合并并对外提供结果。

练习 2

为什么批处理水位不能在批任务开始时就更新?

参考答案:水位表示批视图已经覆盖的数据范围。如果任务尚未完成就提前更新,服务层可能跳过仍未进入批视图的事件,造成结果缺口。

练习 3

服务层需要承担哪些职责?

参考答案:统一查询、批流结果合并、版本和水位处理、权限、租户隔离、缓存、限流、审计、结果新鲜度和错误处理。

练习 4

论文题:论“Lambda 架构的设计与运维”。

参考答案要点:不可变数据、批处理、速度层、服务层、批流一致性、水位、版本发布、幂等、资源隔离、监控、权限、数据质量、成本和故障恢复。

十三、今日复盘

  • 我能否画出 Lambda 架构的四层和数据流?
  • 我是否理解不可变数据、批视图和实时视图的关系?
  • 我能否解释服务层如何按水位合并结果?
  • 我是否考虑双写、重复、迟到、版本和回滚?
  • 我能否把安全、治理和运维纳入架构介绍?
  • 我能否用“数据—计算—服务—治理”完成案例答案?

Lambda 架构介绍的核心结论是:数据层保存可重放事实,批处理层负责完整准确,速度层负责最新增量,服务层负责统一对外。真正成熟的 Lambda 架构还必须补上水位、版本、一致性、权限、质量、成本和恢复机制,否则只是两套计算任务的简单拼接。