DDIA阅读学习笔记

2025-02-11

DDIA(《Designing Data-Intensive Applications》)阅读学习笔记。

1. 背景

阅读经典书籍并反馈输出笔记,本篇起阅读学习《Designing Data-Intensive Applications》(《设计数据密集型应用》)。

参考:

2. 数据系统基础

2.1. 可靠性,可伸缩性和可维护性

现今很多应用程序都是 数据密集型(data-intensive) 的,而非 计算密集型(compute-intensive) 的。因此 CPU 很少成为这类应用的瓶颈,更大的问题通常来自数据量数据复杂性、以及数据的变更速度

数据密集型应用通常由标准组件构建而成,标准组件提供了很多通用的功能:

  • 数据库(database)
  • 缓存(cache)
  • 搜索索引(search indexes)
  • 流处理(stream processing)
  • 批处理(batch processing)

设计数据系统或服务时可能会遇到很多棘手的问题,例如:

  • 当系统出问题时,如何确保数据的正确性和完整性?
  • 当部分系统退化降级时,如何为客户提供始终如一的良好性能?
  • 当负载增加时,如何扩容应对?
  • 什么样的 API 才是好的 API?

影响数据系统设计的因素很多,本书着重讨论三个在大多数软件系统中都很重要的问题:

  • 可靠性(Reliability):系统在 困境(adversity,比如硬件故障、软件故障、人为错误)中仍可正常工作(正确完成功能,并能达到期望的性能水准)
    • fault 和 failure
      • 造成错误的原因叫做 故障(fault),能预料并应对故障的系统特性可称为 容错(fault-tolerant)韧性(resilient)
      • 注意 故障(fault) 不同于 失效(failure)故障通常定义为系统的一部分状态偏离其标准,失效表示系统作为一个整体停止向用户提供服务
      • 故障(fault)的概率不可能降到零,因此最好设计容错机制以防因 故障 而导致 失效(failure)
  • 可伸缩性(Scalability):有合理的办法应对系统的负载增长(数据量、流量、复杂性)
    • 描述负载:使用一些称为 负载参数(load parameters) 的数字来描述,参数的最佳选择取决于系统架构
    • 描述性能
      • 吞吐量(throughput),每秒可以处理的记录数量;
      • 响应时间(response time),客户端发送请求到接收响应之间的时间,除了实际处理时间外还包括了网络延迟(latency)和排队延迟。延迟期间请求处于休眠(latent)状态。
  • 可维护性(Maintainability):许多不同的人(工程师、运维)在不同的生命周期,都能高效地在系统上工作(使系统保持现有行为,并适应新的应用场景)

3. 小结

4. 参考



Comments