《数据密集型应用系统设计》读书笔记

第 1 章 可靠、可扩展与可维护的应用系统

目前许多的新型应用都属于「数据密集型」(data-intensive),而不是计算密集型(compute-intensive),对于这些应用,CPU 的处理能力并不是第一限制性因素,关键在于数据量、数据的复杂度及数据的快速多变性。

近年来出现了许多用于数据存储和处理的新工具,它们可以针对各种不同的应用场景进行优化,不适合再归为数据库、队列、高速缓存等不同类型,因此我们将其统称为「数据系统」(data system)。此外,越来越多的应用系统需求广泛,单个组件无法满足所有数据处理与存储需求。因此需要将任务分解,每个组件负责高效完成其中一部分,多个组件依靠应用代码有机衔接起来。例如,许多应用系统包括以下模块:

  • 「数据库」:用来存储数据,以方便应用再次访问
  • 「高速缓存」:缓存那些复杂或操作代价昂贵的结果,以加快下一次访问
  • 「索引」:允许用户按关键字搜索数据并进行各种过滤
  • 「流式处理」:持续发送消息到另一个进程,并采用异步方式处理
  • 「批处理」:定期处理大量的累积数据

下图给出了一个包含多个不同组件的数据系统架构的示例。其组合使用了多个组件来提供服务,而对外提供服务的界面或 API 会隐藏很多内部实现细节。这样基本上我们基于一个个较小的、通用的组件,构建了一个全新的、专用的数据系统。

影响数据系统设计的因素有很多,本章将专注于对大多数系统都极为重要的三个问题:

  • 「可靠性」(Reliability)。当出现意外情况如硬件、软件故障、人为失误等,系统应可以继续正常运转(虽然性能可能有所降低,但确保功能正确)
  • 「可扩展性」(Scalability)。随着规模的增长(如数据量、流量或复杂性),系统应以合理的方式来匹配这种增长
  • 「可维护性」(Maintainability)。随着时间的推移,许多新的人员参与到系统开发和运维,以维护现有功能或适配新场景等,系统都应高效运转。
posted @ 2021-06-07 17:22  明月照我还  阅读(168)  评论(0编辑  收藏  举报