DDIA - 读书笔记

文章目录

    • 前言
    • 第一部分 数据系统基础
      • DDIA - 第1章 可靠、可扩展与可维护的应用系统
      • DDIA - 第2章 数据模型与查询语言
      • DDIA - 第3章 数据存储与检索
      • DDIA - 第4章 数据编码与演化
    • 第二部分 分布式数据系统
      • DDIA - 第5章 数据复制
      • DDIA - 第6章 数据分区
      • DDIA - 第7章 事务
      • DDIA - 第8章 分布式系统的挑战
      • DDIA - 第9章 一致性与共识
    • 第三部分 派生数据
      • 记录系统与派生数据系统

信息是激发创新的力量
DDIA(数据密集型应用系统设计)
  • 深入探索常用分布式系统内部机制,学习如何高效运用这些技术
  • 分析各种工具的优势和不足,帮助做出明智的设计决策
  • 解析一致性、扩展性、容错和复杂度之间的权衡利弊
  • 介绍分布式系统研究的最新进展(现代数据库的基石)
  • 解释主流在线服务的基本架构

        数据密集与计算密集是当今两大典型负载类型,前者以大数据为代表,后者以深度学习和HPC(高性能计算)为主要代表。本书属于大数据范畴,主要采用分布式系统来处理和存储数据(涉及数据库、Hadoop、NoSQL、流处理等),探讨三个顶级工程挑战:系统的可靠性、可扩展性与可维护性。

前言

        围绕着如何构建高效存储与数据处理这一核心主题,帮助大家更好地驾驭处理数据和存储数据相关技术。 着重探讨不同的设计理念以及如何权衡,这些通常才是系统的核心,也会例举实践中不同的系统产品最终采用了哪些不同的理念。本书主要关注数据处理架构方面以及如何继承到数据密集型应用系统中。
        数据密集型(Data-Intensive): 对于一个应用系统,如果“数据”是其成败决定性因素,包括数据的规模、数据的复杂度或者数据产生与变化的速率等,我们就可以称为“数据密集型应用系统”
        计算密集型(Compute-Intensive): CPU主频往往是后者最大的制约瓶颈

第一部分 数据系统基础

        主要讨论有关增强数据密集型应用系统所需的若干基本原则。总结了适合所有数据系统的基本思想,既包括单机运行环境,也包括分布式集群环境。

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

DDIA - 第1章 可靠、可扩展与可维护的应用系统介绍相关术语与方法,这些术语等将贯穿于全书。例如重点关注的可靠性、可扩展性与可维护性设计目标,以及达到这些目标的基本方法。

DDIA - 第2章 数据模型与查询语言

DDIA - 第2章 数据模型与查询语言对比多种不同的数据模型与查询语言,从开发者角度来看,这些是不同数据库系统最显著的区别,我们也会讨论不同模型的具体适用场景。

DDIA - 第3章 数据存储与检索

DDIA - 第3章 数据存储与检索深入数据库系统内部的核心存储引擎,详细解析数据库如何设计磁盘布局。针对不同的工作负载如何优化其引擎,而正确的设计选型对系统将产生巨大的影响。

DDIA - 第4章 数据编码与演化

DDIA - 第4章 数据编码与演化比较不同的数据编码格式和序列化技术,特别是当上层应用需求多变而模型也需要灵活调整时,该如何最佳使用这些技术。

第二部分 分布式数据系统

        我们将从单机的数据存储转向跨机器的分布式系统,这是扩展性的重要一步,但随之而来的是各种挑战。
        主要出于以下目的,我们需要在多台机器上分布数据:

  • 扩展性
            当数据量或者读写负载巨大,严重超出了单台机器的处理上限,需要将负载分散到多台机器上
  • 容错与高可用性
            当单台机器(或者多台,以及网络甚至整个数据中心)出现故障,还希望应用系统可以继续工作,这时需要采用多台机器提供冗余。这样某些组件失效之后,冗余组件可以迅速接管
  • 延迟考虑
            如果客户遍布世界各地,通常需要考虑在全球范围内部署服务,以方便用户就近访问最近数据中心所提供的服务,从而避免数据请求跨越了半个地球才能到达目标

系统扩展能力
        共享内存架构(垂直扩展)和共享磁盘架构提升系统扩展能力是很有限的,分别存在着各种难以解决的问题。
(1)无共享结构(水平扩展)
        当采用这种架构时,运行数据库软件的机器或者虚拟机称为节点。每个节点独立使用本地的CPU,内存和磁盘。节点之间的所有协调通信等任务全部运行在传统网络(以太网)之上且核心逻辑主要依靠软件来实现。无共享系统不需要专门的硬件,具有较高的性价比。
(2)复制与分区
        将数据分布在多节点时有两种常见的方式:

  • 复制
            在多个节点上保存相同数据的副本,每个副本具体的存储位置可能不尽相同。复制方法可以提供冗余:如果某些节点发生不可用,则可以通过其他节点继续提供数据访问服务。复制也可以帮助提高系统性能
  • 分区
            将一个大块头的数据库拆分成多个较小的子集即分区,不同的分区分配给不同的节点(也称为分片)

        这些是不同的数据分布机制,然而它们经常被放在一起组合使用。

DDIA - 第5章 数据复制

DDIA - 第5章 数据复制

DDIA - 第6章 数据分区

DDIA - 第6章 数据分区

DDIA - 第7章 事务

DDIA - 第7章 事务

DDIA - 第8章 分布式系统的挑战

DDIA - 第8章 分布式系统的挑战

DDIA - 第9章 一致性与共识

DDIA - 第9章 一致性与共识

第三部分 派生数据

        主要针对产生派生数据的系统,所谓派生数据主要指在异构系统中,如果无法用一个数据源来解决所有问题,那么一种自然的方式就是集成多个不同的数据库、缓存模块以及索引模块等。

记录系统与派生数据系统

        存储与处理数据的系统按照高层次分类可以分为两大类:

  • 记录系统
            一个记录系统也被称为真实数据系统,拥有数据的权威版本
  • 派生数据系统
            派生数据系统中的数据则是从另一个系统中获取已有数据并以某种方式进行转换或处理的结果

        大多数数据库、存储引擎和查询语言本身并不属于记录系统和派生系统。数据库只是一个工具:如何使用完全取决于用户。即记录系统和派生数据系统之间的区别并不在于工作本身,而是在于如何在应用程序中使用它们。

        通过弄清楚数据的来龙去脉,来帮助厘清复杂的系统架构。

你可能感兴趣的:(DDIA,DDIA,分布式,数据密集,应用系统设计)