什么是LA
Lambda架构
,是Nathan Marz根据自己在Twitter的分布式数据处理系统经验,提出的通用数据处理架构。
LA的提出,主要是为了满足3点需求:
- (1) 具有容错能力的鲁棒性系统,容错能力要同时满足两点:硬件错误和人为错误。
- (2) 能够支持的负载范围要宽。大负载和小负载都要能支持,并且满足低延迟的read/update操作。
- (3) 系统必须要可以线性扩展。
LA架构初窥
LA的高层架构见下图。
理解LA,要从5个关键点来讲(包括了3层结构)。
- (1)所有进入系统的数据,都会被分发到
批处理层
(batch layer)和快速处理层
(speed layer)。 - (2)
批处理层
(batch layer)有两个作用:- 管理master的数据(raw数据):比如用HDFS来存储
- 为数据转换为
批处理视图
做预处理
- (3)
服务层
(serving layer)用于加载和实现数据库中的批处理视图,以便用户能查询。 - (4)
快速处理层
(speed layer)用于处理新数据和服务层更新造成的高延迟补偿。 - (5)任何query的答案,都能通过合并
批处理视图
和实时视图
的结果来获得。
讲的有点复杂,通俗化一下,LA的设计思想就是:
- 数据分两路,一路是raw数据的存储,查询(Batch View)
- 另一路是用大数据系统处理(数据挖掘)后的结果(Realtime View)
- query时,结合Batch View和Realtime View,就能得到最终结果
LA架构并没有指定其中的具体组件,下面举例说明怎么借助LA来设计系统。
LA系统案例
下面是一个基于LA设计的日志分析系统。
- Flume是做LOG数据收集的系统
- Kafka是消息队列
- Spark做分布式计算
- HDFS做raw数据的存储
- Spark-SQL进行数据预处理
- 两路数据的结果汇总到MySQL后,可以用Flask进行结果呈现
两路数据,一路经HDFS存储,到Batch View,可以获得LOG数据的原始信息。另一路经Spark深度处理/挖掘后,到Realtime View,可以获得故障信息。任何一个query,就可以将Batch View和Realtime View结合,就能得到最终结果。
LA的CAP分析
一致性
(Consistency),说的是每一个更新成功后,分布式系统中的所有节点,都能读到最新的信息。即所有节点相当于访问同一份内容,这样的系统就被认为是强一致性的。LA架构满足C。可用性
(Availability),是每一个请求,都能得到响应。请求只需要在一定时间内返回即可。LA架构也满足A。分区容错性
(Partition tolerance),是说在网络中断,消息丢失的情况下,系统照样能够工作。LA并没有做复杂的硬件架构设计,不满足P。
所以LA是一个CA系统。
参考
- LA主页。http://lambda-architecture.net/
- A real-time architecture using Hadoop and Storm。 http://lambda-architecture.net/architecture/2013-12-11-a-real-time-architecture-using-hadoop-and-storm-devoxx
- 高彦杰,倪亚宇。《Spark大数据分析实战》
- LinkedIn数据系统构师对LA的分析。https://www.oreilly.com/ideas/questioning-the-lambda-architecture
- LA的GitHub。https://github.com/mhausenblas/lambda-architecture.net