
第一章:可靠性、可伸缩性和可维护性#
互联网取得了如此伟大的成就,人们习惯于它的存在就如同海洋自然的存在一样,我们甚至都已经忘记它是一个人造的产物。我们甚至都想不到上一次发生如此伟大的技术革命是在什么时候。
— Alan Kay, 在接受 Dr Dobb’s 期刊采访时说 (2012)
在如今,很多系统都是数据密集型(data-intensive)系统,而非计算密集型(compute-intensive)。原来的CPU性能已经不再是限制应用的关键因素了—现在更多的问题在于数据的量级,数据的复杂度以及数据的变更的频率。
数据密集型应用程序通常是基于那些拥有通用的标准功能模块所构建的的系统建立起来的。例如:可能很多应用都需要以下功能:
- 存储数据,以便于自己或其它应用在需要的时候再次查找(数据库)
- 把复杂开销的操作记录结果记录下来,以便后续能快速的读取(缓存)
- 允许用户通过关键字来搜索,或采用不同的方式来过滤数据(查询索引)
- 给其它的“处理器”发送消息,使之能够异步执行(流处理)
- 定期处理大量的数据(批处理)
如果当你听到这些并没有多少感触,那只能说明这些数据系统的抽象很成功:我们虽然每天都在用,但是对他们的认识并不深刻。在构建应用程序时,大多数工程师并不会想着去从头写一个数据存储引擎,因为数据库已经是很好支撑这些功能工具了。
但事实并没有这么简单。