深入理解Lambda架构

荐语

本文要介绍的是 2015 年 O’Reilly 出版的书籍 Big Data: Principles and best practices of scalable realtime data systems,书中主要介绍一种常见的大数据架构 —— Lambda 架构。Lambda 架构通过批处理和流处理相结合的方法,有效处理了大数据场景下的工作负载。相比以关系型数据库为核心的传统数据系统,它在可扩展性、容错性等方面有了更进一步的提升。

虽然 Lambda 架构是十年前被提出的数据架构,但 Lambda 架构的以不可变数据作为核心、历史和实时数据分层处理的架构思想仍值得我们学习。

传统数据系统的局限

考虑有这么一个系统,根据用户的浏览记录,统计用户访问网页的次数:

在上述系统中,每次用户浏览一个 url,应用就会向数据库更新一行数据。随着用户量的不断上升,并发量急剧上涨,数据库最先达到瓶颈,频繁出现更新超时的现象。针对这种情况,我们可以引入消息队列,将单次写改成批量写,以此降低数据库的并发数

但这并不是长久之计,随着用户量的再次上涨,单实例的数据库还是会成为单点瓶颈。为此,可以对数据库进行水平扩展,分库分表,将原本集中在单个数据库实例上的请求,负载均衡到多个实例之上。

分库分表虽能消除数据库单点瓶颈,但也会带来其他的一些问题:

  • 应用逻辑更复杂。应用层需要根据数据的 key 找到其所在的数据库实例,以便进行数据更新。
  • 维护成本更高。为了避免因数据库实例宕机导致的服务不可用,需要通过增加数据副本、缓冲队列等手段提升可用性。另外,随着数据量的增大,可能因数据库实例间负载不均衡,而产生对数据进行重分区的操作。这些都会导致维护成本的急剧增加。
  • 容错性问题。一旦开发者在更新数据库时出现人为错误,比如在增加 pageviews 字段时多乘了 2,那么数据将难以恢复,因为很难溯源。

上述例子中,从简单的 CURD,到增加消息队列、分库分表、副本、重分区等,系统也越来越复杂。导致这一切的原因是,传统数据库系统并非为分布式而生,它无法很好地适用于大数据场景

大数据技术的局限

那么,大数据技术就能解决这些问题吗?答案是,

像 Hadoop、MapReduce、HBase 等这类大数据技术,虽然能够天然就处理海量数据,但它们都有各种局限,比如,MapReduce 是批处理系统,计算时延高;HBase 键值查询快,但无法满足复杂的 SQL 查询场景。

为了找到解决方法,我们还需从大数据系统的本质入手。

大数据系统的本质

作者对数据系统进行了如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值