荐语
本文要介绍的是 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 查询场景。
为了找到解决方法,我们还需从大数据系统的本质入手。
大数据系统的本质
作者对数据系统进行了如

最低0.47元/天 解锁文章
1078

被折叠的 条评论
为什么被折叠?



