数据密集型应用系统设计

参考书本《数据密集型应用系统设计》

第一部分 数据系统基础 #

1. 可靠、可拓展与可维护的应用系统 #

1.1. 可靠性 #

  • 用户期望的功能实现
  • 容忍用户错误或不正确的使用方法
  • 性能可以应对的典型场景、压力和数据量
  • 系统可以防止未经授权的访问和滥用

1.2. 可扩展性 #

负载描述

  • qps(queries Per Second)

性能描述

  • 百分位数:类似于中位数,不过是按照百分比计算的中位数
  • 关注的百分位数一般有95%、99%、99.9%

1.3. 可维护性 #

运营

  • 监视系统健康状况,出现异常快速恢复
  • 追踪问题原因,如系统故障和性能下降
  • 保持软件和平台到最新状态,如安全补丁
  • 避免执行破坏性操作
  • 预测未来可能的问题,如容量不足
  • 建立用于部署、配置管理等实践规范和工具包
  • 执行复杂的维护任务,如迁移
  • 配置更改,维护系统安全稳定
  • 指定流程规范操作行为
  • 传承相关知识

系统设计考虑点

  • 提供系统运行时行为和内部的观测性,方便监控
  • 自动化标准工具集成
  • 避免特定机器绑定,允许整体运行完整的同时,部分机器停机维护
  • 文档和操作模式良好
  • 默认配置良好
  • 尝试自我修复,并允许管理员手动控制状态
  • 预测可能出现的意外进行处理

简单化

  • 后续人员好维护

可演化

  • 应对需求改变的解决方案考虑

2. 数据模型与查询语言 #

2.1. 数据库分类 #

关系型

  • 数据之间存在关系,查询需要按照关系进行查询
  • 一般是多对多的关系
  • 如sql、网络数据库、图数据库

文档型

  • 一对多,一个id对应很多数据,但是数据之间关系不大
  • 如json、xml等

第二部分 分布式数据系统 #

第三部分 派生数据 #