zoukankan      html  css  js  c++  java
  • 《数据密集型应用系统设计》读书笔记

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

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

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

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

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

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

    • 「可靠性」(Reliability)。当出现意外情况如硬件、软件故障、人为失误等,系统应可以继续正常运转(虽然性能可能有所降低,但确保功能正确)
    • 「可扩展性」(Scalability)。随着规模的增长(如数据量、流量或复杂性),系统应以合理的方式来匹配这种增长
    • 「可维护性」(Maintainability)。随着时间的推移,许多新的人员参与到系统开发和运维,以维护现有功能或适配新场景等,系统都应高效运转。
  • 相关阅读:
    快速排序
    优先队列
    堆排序
    树、二叉树基础
    分治法
    递归算法详细分析
    算法基础
    Linux文件系统详解
    fs/ext2/inode.c相关函数注释
    块设备的读流程分析
  • 原文地址:https://www.cnblogs.com/yyl141/p/14941210.html
Copyright © 2011-2022 走看看