DDIA 读书分享 第一章 文字稿

第一章是很容易被跳过的一章,因为概念较多,容易泛泛而谈。但其给出的三个概念,确实是构建系统避不开的三个重点方向。

ps. 开源中文版本[1]有些地方翻译的不是很地道,读起来可能会有些难受,不过这是所有翻译难免的。

本书为什么以数据系统为主题


数据系统(data system)是一种模糊的统称。在信息社会中,一切皆可信息化,或者,某种程度上来说——数字化。这些数据的采集、存储和使用,是构成信息社会的基础。我们常见的绝大部分应用背后都有一套数据系统支撑,比如微信、京东、微博等等。

DDIA 读书分享 第一章 文字稿_第1张图片

数字化社会

因此,作为 IT 从业人员,有必要系统性的了解一下现代的、分布式的数据系统。学习本书,能够学习到数据系统的背后的原理、了解其常见的实践、进而将其应用到我们工作的系统设计中。

常见的数据系统有哪些

  • 存储数据,以便之后再次使用——数据库

  • 记住一些非常“重”的操作结果,方便之后加快读取速度——缓存

  • 允许用户以各种关键字搜索、以各种条件过滤数据——搜索引擎

  • 源源不断的产生数据、并发送给其他进程进行处理——流式处理

  • 定期处理累积的大量数据——批处理

  • 进行消息的传送与分发——消息队列

这些概念如此耳熟能详以至于我们在设计系统时拿来就用,而不用去想其实现细节,更不用从头进行实现。当然,这也侧面说明这些概念抽象的多么成功。

数据系统的日益复杂化

但这些年来,随着应用需求的进一步复杂化,出现了很多新型的数据采集、存储和处理系统,它们不拘泥于单一的功能,也难以生硬的归到某个类别。随便举几个例子:

  1. Kafka:可以作为存储持久化一段时间日志数据、可以作为消息队列对数据进行分发、可以作为流式处理组件对数据反复蒸馏等等。

  2. Spark:可以对数据进行批处理、也可以化小批为流,对数据进行流式处理。

  3. Redis:可以作为缓存加速对数据库的访问、也可以作为事件中心对消息的发布订阅。

我们面临一个新的场景,以某种组合使用这些组件时,在某种程度上,便是创立了一个新的数据系统。书中给了一个常见的对用户数据进行采集、存储、查询、旁路等操作的数据系统示例。从其示意图中可以看到各种 Web Services 的影子。

DDIA 读书分享 第一章 文字稿_第2张图片

DDIA 书中一个典型的数据系统的例子

但就这么一个小系统,在设计时,就可以有很多取舍:

  1. 使用何种缓存策略?是旁路还是写穿透?

  2. 部分组件机器出现问题时,是保证可用性还是保证一致性?

  3. 当机器一时难以恢复,如何保证数据的正确性和完整性?

  4. 当负载增加时,是增加机器还是提升单机性能?

  5. 设计对外的 API 时,是力求简洁还是追求强大?

因此,有必要从根本上思考下如何评价一个好数据系统,如何构建一个好的数据系统,有哪些可以遵循的设计模式?有哪些通常需要考虑的方面?

书中用了三个词来回答:可靠性(Reliability)、可伸缩性(Scalability)、可维护性(Maintainability)

可靠性(Reliability)

如何衡量可靠性?

  • 功能上
  1. 正常情况下,应用

你可能感兴趣的:(分布式点滴,分布式)