Lambda架构由Storm的作者Nathan Marz提出,旨在设计出一个能满足实时大数据系统关键特性的架构,具有高容错、低延时和可扩展等特性。
Lambda整合离线计算和实时计算,融合不可变性、读写分离和复杂性隔离等一系列架构原则,可集成Hadoop、Kafka、Storm、Spark、Hbase等各类大数据组件。
1、Lambda架构理论点
Lambda架构对系统做了如下抽象:
Query = Function(All Data)
简言之:查询是应用于数据集的函数。Data是自变量,Query是因变量。
Lambda有如下两个假设:
- 不可变假设
Lambda架构要求Data不可变。
- Monoid假设
理想情况下满足Monoid假设的function可以转换为以下形式。
query=function(all data/2)+function(all data/2)
Monoid的概念来源于范畴学,其中一个重要特性是满足结合律。如整数的加法就满足Monoid特性:(a+b)+c=a+(b+c)。
不满足Monoid特性的函数很多时候可以转化成多个满足Monoid特性的函数的运算。如多个数的平均值avg函数,多个平均值没法直接通过结合来得到最终的平均值,但是可以拆成分母除以分子,分母和分子都是整数的加法,从而满足Monoid特性。
2、Lambda架构
Lambda架构分成3层:批处理层、实时处理层、服务层。
- 批处理层:批处理数据,生成离线结果。
- 实时处理层:实时处理在线数据,生成增量结果。
- 服务层:结合离线、在线计算结果,推送上层。
3、Lambda架构优缺点
Lambda架构优点如下:
- 实时:低延迟处理数据。
- 可重计算:由于数据不可变,重新计算后扔可以得到正确的结果。
- 容错:由于数据不可变,有程序Bug、系统问题等,可以重新计算。
- 复杂性分离、读写分离。
Lambda架构缺点主要表现在:
- 开发和运维的复杂性:Lambda需要将所有的算法实现两次,一次是为批处理系统,另一次是为实时系统,还要求查询得到的两个系统结果的合并。
4、典型推荐架构
-
实时处理范式的需求
-
Netflix推荐架构
参考文献
- 《高可用架构(第1卷)》/ ISBN 978-7-121-31466-7