序言
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
如果你近年来从事过软件工程,尤其是服务器端和后台系统的工作,那么你可能已经被大量与数据存储和处理有关的流行语轰炸过了。NoSQL!大数据网络规模分片最终一致性ACIDCAP 定理! Cloud 服务!MapReduce实时性
在过去的十年中,我们看到了数据库、分布式系统以及在它们之上构建应用程序的方式等方面的许多有趣的发展。这些发展有多种推动力:
-
谷歌、微软、亚马逊、Facebook、LinkedIn、Netflix 和 Twitter 等互联网公司正在处理海量数据和流量,这迫使它们创建新的工具,以便高效处理如此大规模的数据和流量。
-
企业需要保持敏捷、低成本地测试假设,并通过缩短开发周期和灵活的数据模型对新的市场洞察做出快速反应。
-
自由和开放源码软件已经取得了巨大成功,现在在许多环境中已成为商业软件或定制内部软件的首选。
-
CPU 时钟速度几乎没有提高,但多核处理器已成为标准配置,网络速度也越来越快。这意味着并行性只会越来越高。
-
即使你在一个小团队中工作,现在也可以借助亚马逊网络服务等基础设施即服务(IaaS),构建分布在多台机器甚至多个地理区域的系统。
-
现在,许多服务都被要求具有高可用性;由于中断或维护而导致的长时间停机变得越来越不可接受。
数据密集型应用通过利用这些技术发展,不断突破极限。如果数据是一项应用的主要挑战--数据的数量、数据的复杂性或数据变化的速度--我们就将其称为数据密集型应用,而不是计算密集型应用,因为计算密集型应用的瓶颈是 CPU 周期。
帮助数据密集型应用程序存储和处理数据的工具和技术一直在迅速适应这些变化。新型数据库系统("NoSQL")一直备受关注,但消息队列、缓存、搜索索引、批处理和流处理框架以及相关技术也非常重要。许多应用程序都使用了这些技术的某些组合。
充斥在这一领域的流行语表明了人们对新可能性的热情,这是一件好事。但是,作为软件工程师和架构师,我们要想构建出优秀的应用程序,还需要在技术上准确、精确地理解各种技术及其权衡。要想获得这种理解,我们就必须挖掘更深层次的东西,而不是停留在流行语上。
幸运的是,在技术日新月异的背后,有一些永恒不变的原则,无论你使用的是某一特定工具的哪个版本,这些原则依然适用。如果你理解了这些原则,你就能知道每种工具的适用范围、如何充分利用以及如何避免陷阱。这就是本书的作用所在。
本书的目的是帮助你在处理和存储数据的技术领域中,驾驭各种瞬息万变的技术。本书既不是某个特定工具的教程,也不是充满枯燥理论的教科书。相反,我们将以成功的数据系统为例:这些技术是许多流行应用的基础,每天都要满足生产中对可扩展性、性能和可靠性的要求。
我们将深入研究这些系统的内部结构,揭示它们的关键算法,讨论它们的原理和必须做出的权衡。在这个过程中,我们将努力找到思考数据系统的有用方法--不仅仅是它们如何工作,还包括它们为什么这样工作,以及我们需要提出哪些问题。
读完本书后,你将能很好地决定哪种技术适合哪种用途,并了解如何将各种工具结合起来,形成良好应用架构的基础。你不会准备好从头开始构建自己的数据库存储引擎,但幸运的是,这很少有必要。不过,您将对您的系统在引擎盖下所做的工作形成良好的直觉,这样您就可以推理它们的行为,做出正确的设计决策,并跟踪可能出现的任何问题。
谁应该阅读这本书?
如果你开发的应用程序有某种用于存储或处理数据的服务器/后台,而且你的应用程序使用互联网(如网络应用程序、移动应用程序或与互联网连接的传感器),那么本书就是为你而写的。 ...