来源书籍
数据密集型应用系统设计
分布式系统类
类别清单覆盖
7/7
全书概览
数据密集型应用系统设计
Skill 版本:v7
类别:分布式系统类
四象限结论:经典原理(高信息浓度 + 高稳定性)
理由:精读第一章”可靠性、可伸缩性、可维护性”全文,抽样第五章”复制”和第十章 “批处理”开篇后确认:全书系统性讲解数据系统设计决策背后的”为什么”,而不是任何具体 产品的操作手册——第一章区分”故障(fault)”与”失效(failure)”的概念差异、解释为什么 Netflix Chaos Monkey主动提高故障率反而能增强容错信心、用Twitter主页时间线的扇出问题 讲清楚”写时多做工作 vs 读时多做工作”这个贯穿全书的权衡、并给出百分位点而非均值衡量 响应时间的定量方法论。信息浓度极高。稳定性方面,书中虽然援引Kafka、Cassandra、 PostgreSQL、Hadoop等大量具体系统作为例证,但这些始终是用来讲解复制/分区/事务/一致性/ 批流处理这些长期存在的分布式数据系统问题的载体——如”故障容错”、”响应时间百分位点”、 “扇出写放大与读放大的权衡”、”复杂度是额外的还是固有的”这些结论不因具体数据库产品的 迭代而过时,因此稳定性也很高。综合定级:高信息浓度+高稳定性=经典原理。
类别说明:全书三部分——第一部分”数据系统的基石”(可靠性/数据模型/存储与检索/ 编码演化)、第二部分”分布式数据”(复制/分区/事务/分布式系统的麻烦/一致性与共识)、 第三部分”衍生数据”(批处理/流处理/数据系统的未来)——核心主线是分布式系统的一致性、 协调与容错原理,命中”分布式系统类”(判定标准:”以讲解分布式系统的一致性、协调与 容错原理为主要目标的书籍”),尤其第二部分(第5-9章)与该类别必答清单(一致性模型/ 共识算法/容错假设/时钟顺序/分区处理/复制数据分布/幂等重试)逐条高度对应;虽然第一 部分也涉及存储引擎内部原理(B树/LSM树),但全书主线并非”数据库/存储引擎类”要求的 “以讲解存储系统内部原理为主要目标”,存储引擎只是第三章一章的主题,因此归入分布式 系统类而非数据库/存储引擎类。
章节筛选
前言/序言/术语表/后记不进入卡片生成。正文12章分三大部分,信息浓度普遍极高,全部标记 精读候选;实际处理时按浓度和跨章重叠动态过滤纯罗列性内容(如具体产品名录的一句话 提及)。
| 章节号 | 章节标题 | 精读/略读 | 状态 | 卡片数 |
|---|---|---|---|---|
| 01 | 可靠性、可伸缩性、可维护性 | 精读 | done | 9 |
| 02 | 数据模型与查询语言 | 精读 | done | 11 |
| 03 | 存储与检索 | 精读 | done | 13 |
| 04 | 编码与演化 | 精读 | done | 9 |
| 05 | 复制 | 精读 | done | 11 |
| 06 | 分区 | 精读 | done | 8 |
| 07 | 事务 | 精读 | done | 13 |
| 08 | 分布式系统的麻烦 | 精读 | done | 12 |
| 09 | 一致性与共识 | 精读 | done | 20 |
| 10 | 批处理 | 精读 | done | 15 |
| 11 | 流处理 | 精读 | done | 19 |
| 12 | 数据系统的未来 | 精读 | done | 25 |
实践卡进度
| 序号 | 实践标题 | 实践方式 | 状态(pending/done) | 关联章节 | 产出 |
|---|---|---|---|---|---|
| idea-001 | etcd-raft库源码深读:映射书中共识机制 | 实现深读 | done | 第9章 | 阅读单元对照表+状态转移图规划 |
| idea-002 | Raft、Paxos、ZAB三种共识算法横向比较 | 横向学习 | done | 第9章 | 九维度对照表规划 |
| idea-003 | Kafka日志压缩实现深读:映射书中CDC机制 | 实现深读 | done | 第11章 | 阅读单元对照表+差异清单规划 |
| idea-004 | Jepsen真实故障报告观察:线性一致性声明的实际失效 | 真实任务 | done | 第8/9/12章 | 案例对照笔记规划 |
待关联术语
| 术语名 | 出现章节 | 一句话语境 |
|---|
引用文献
| 标题 | 类型 | 出现章节 | 一句话语境 |
|---|
资金安全问题案例
| 问题标题 | 问题卡 | 解决方案卡(如有) | 出现章节 | 一句话说明 |
|---|
类别清单核对(分布式系统类)
| 维度 | 覆盖状态 | 关联卡片标题或未覆盖理由 |
|---|---|---|
| 一致性模型 | 已覆盖 | 线性一致性的精确定义与仿佛只有一份副本的错觉;线性一致性与可串行化是两个独立维度;因果顺序是偏序线性一致性蕴含但强于因果一致性;及时性与完整性的区分 |
| 共识算法 | 已覆盖 | 共识问题的形式化定义与FLP不可能性结果的真实含义;单领导者复制通过纪元编号与法定人数回避而非消除共识;ZooKeeper类协调服务的功能组合与真实用途边界 |
| 容错假设 | 已覆盖 | 拜占庭容错的适用边界为何多数服务端系统不需要它;系统模型用时序假设与故障假设的组合定义算法适用的现实边界 |
| 时钟与顺序问题 | 已覆盖 | 日历时钟与单调钟的用途分野及混用的危险;时钟读数应被视为置信区间而非精确时间点;非因果序列号生成器的三种方法及问题;兰伯特时间戳用计数器节点ID构造与因果一致的全序 |
| 分区处理策略(CAP权衡) | 已覆盖 | CAP理论的真实狭窄含义与历史文物评价;Attiya-Welch定理线性一致性的延迟代价 |
| 复制与数据分布 | 已覆盖 | 复制的三种主流架构单主多主无主及其复杂度权衡;哈希分区用复合主键在负载均衡与范围查询间折衷;二级索引分区本地索引与全局索引在读写代价上互为镜像 |
| 幂等与重试设计 | 已覆盖 | 流处理的恰好一次语义微批存档点原子提交与幂等性;端到端原则与操作标识符实现幂等性;基于日志消息传递实现唯一性约束与多分区请求处理 |
章节与卡片
01 可靠性、可伸缩性、可维护性
- 数据系统的边界 普通读书笔记卡
- 故障与失效的区分决定容错设计的目标 普通读书笔记卡
- 故障不是失效 普通读书笔记卡
- 主动触发故障反而能提高容错系统的可信度 普通读书笔记卡
- 负载先被命名 普通读书笔记卡
- 三类故障来源及各自的应对特点 结构图卡
- 尾延迟决定体验 普通读书笔记卡
- 响应时间与延迟是两个不同的概念 普通读书笔记卡
- 维护性的三脚架 普通读书笔记卡
- 百分位点比均值更能反映用户真实体验及尾部延迟放大 结构图卡
- Twitter主页时间线的扇出问题揭示写时多做与读时多做的权衡 结构图卡
- 没有万能可伸缩架构架构必须围绕负载假设构建 普通读书笔记卡
- 纵向与横向伸缩及弹性系统与手动伸缩的取舍 普通读书笔记卡
- 可维护性的三根支柱可操作性简单性可演化性 结构图卡
02 数据模型与查询语言
- 模型限制想法 普通读书笔记卡
- 数据模型是分层抽象每层隐藏下层复杂度 结构图卡
- 文档局部性 普通读书笔记卡
- 阻抗不匹配与文档模型的局部性优势 普通读书笔记卡
- 模式灵活代价 普通读书笔记卡
- 用ID代替文本实现规范化及其与文档模型的天然冲突 普通读书笔记卡
- 声明式查询 普通读书笔记卡
- 关系模型战胜网络模型的关键是查询优化器只需构建一次 结构图卡
- 图适合关系网 普通读书笔记卡
- 声明式查询语言优于命令式的三个原因 普通读书笔记卡
- 读时模式与写时模式的权衡及适用场景 普通读书笔记卡
- 属性图模型用顶点与边的两张表建模任意关联数据 结构图卡
- 同一可变长度路径查询在图模型与关系模型下的复杂度悬殊 普通读书笔记卡
- 图数据库与CODASYL网络模型表面相似但本质不同 普通读书笔记卡
- MapReduce查询介于声明式与命令式之间用纯函数换取容错重跑 普通读书笔记卡
- Datalog用可组合复用的规则逐步构建复杂查询 普通读书笔记卡
03 存储与检索
- 索引是冗余 普通读书笔记卡
- 索引是读写速度的权衡额外结构总会拖慢写入 普通读书笔记卡
- LSM偏向写入 普通读书笔记卡
- 哈希索引配合分段压缩及其无法支持范围查询的局限 结构图卡
- B树稳定局部改写 普通读书笔记卡
- SSTable按键排序换来高效合并与稀疏内存索引 普通读书笔记卡
- OLTPOLAP分流 普通读书笔记卡
- LSM树用内存表加WAL兼顾写入速度与崩溃安全 结构图卡
- 列存按问题取数 普通读书笔记卡
- 布隆过滤器用可控误判率省去不存在键的磁盘读取 普通读书笔记卡
- B树用固定大小页面树保证O(logn)深度并靠WAL防崩溃损坏 结构图卡
- B树与LSM树的核心权衡写放大读性能可预测性与事务锁 结构图卡
- 堆文件聚簇索引与覆盖索引在读取速度和写入开销间的三级权衡 普通读书笔记卡
- 连接索引对多列查询的排序局限催生专门的多维索引 普通读书笔记卡
- OLTP与OLAP访问模式的本质差异催生独立的数据仓库 结构图卡
- 星型模式用事实表与维度表拆分事件本身和事件属性 结构图卡
- 列式存储把按行存储改为按列存储天然契合分析查询与压缩 结构图卡
- 物化视图与数据立方体用预计算换查询速度但牺牲查询灵活性 普通读书笔记卡
04 编码与演化
- 兼容性是契约 普通读书笔记卡
- 滚动升级要求编码格式同时具备向后与向前兼容 普通读书笔记卡
- 宽容读取 普通读书笔记卡
- 语言特定序列化的三个深层问题 普通读书笔记卡
- RPC不是本地调用 普通读书笔记卡
- JSON/XML对数值编码的模糊性在大整数场景下暴露精度问题 普通读书笔记卡
- 数据流决定演化 普通读书笔记卡
- Thrift与Protobuf靠不可变的字段标签号实现模式演变 结构图卡
- 消息代理解耦 普通读书笔记卡
- Avro不靠标签号靠Reader/Writer模式匹配实现兼容且天然适配动态生成模式 结构图卡
- 模式作为解码前提本身就是永不过时的强制文档 普通读书笔记卡
- 数据的生命周期超出代码的生命周期及未知字段丢失陷阱 普通读书笔记卡
- RPC试图让远程调用貌似本地调用是根本性缺陷 结构图卡
- 消息代理用缓冲重试和解耦换取比直接RPC更强的可靠性 普通读书笔记卡
05 复制
- 复制有三目的 普通读书笔记卡
- 复制的三种主流架构单主多主无主及其复杂度权衡 结构图卡
- 同步复制的承诺 普通读书笔记卡
- 同步复制保证最新数据但代价是主库被单个从库拖累 普通读书笔记卡
- 读己之写 普通读书笔记卡
- 四种复制日志实现方式在耦合度与兼容性上的权衡 结构图卡
- 一致前缀读 普通读书笔记卡
- 故障切换的三重风险数据丢失外部系统不一致与脑裂 普通读书笔记卡
- 冲突需要因果 普通读书笔记卡
- 复制延迟催生的三种一致性异常读己之写单调读一致前缀读 结构图卡
- 多主复制的三大适用场景本质都是容忍长时间断连 普通读书笔记卡
- 写冲突的检测时机与收敛策略最后写入胜利的数据丢失代价 普通读书笔记卡
- 复制拓扑结构在容错性与消息乱序间的权衡 结构图卡
- 无主复制靠读写法定人数在故障中维持可用与新鲜度 结构图卡
- 法定人数看似严格保证实则存在边缘陷阱及宽松法定人数的取舍 普通读书笔记卡
- 用此前发生关系而非物理时间定义并发及版本向量的作用 结构图卡
06 分区
- 分区不是分表 普通读书笔记卡
- 分区的目标是均匀分布负载偏斜与热点是核心风险 普通读书笔记卡
- 范围保序哈希均匀 普通读书笔记卡
- 键范围分区支持高效范围查询但按时间戳分区易造成写入热点 普通读书笔记卡
- 热点不会自愈 普通读书笔记卡
- 哈希分区用复合主键在负载均衡与范围查询间折衷 普通读书笔记卡
- 二级索引两难 普通读书笔记卡
- 哈希分区防不住单键极端热点需靠应用层给主键加随机后缀 普通读书笔记卡
- 再平衡要渐进 普通读书笔记卡
- 二级索引分区本地索引与全局索引在读写代价上互为镜像 结构图卡
- 分区再平衡策略从反面教材hash mod N到固定分区与动态分区 结构图卡
- 全自动再平衡叠加自动故障检测可能触发级联失败 普通读书笔记卡
- 请求路由三种方案的共同难题是谁来同步分区节点映射 结构图卡
07 事务
- 事务隐藏混乱 普通读书笔记卡
- ACID原子性的本质是可中止性与并发无关 普通读书笔记卡
- ACID里的C不纯 普通读书笔记卡
- ACID一致性其实是应用的属性而非数据库能保证的属性 普通读书笔记卡
- 读已提交的边界 普通读书笔记卡
- 多对象事务的必要性外键非规范化文档与二级索引一致性 普通读书笔记卡
- 快照隔离看旧世界 普通读书笔记卡
- 事务重试机制看似万能实则四个局限 普通读书笔记卡
- 写偏斜破坏不变量 普通读书笔记卡
- 读已提交隔离级别防脏读脏写的两种实现方式 普通读书笔记卡
- SSI乐观串行化 普通读书笔记卡
- 快照隔离靠MVCC事务ID可见性规则实现读不阻塞写 结构图卡
- 可重复读这个术语在不同数据库里指代完全不同的保证 普通读书笔记卡
- 防止丢失更新的四种手段原子操作显式锁自动检测与CAS 结构图卡
- 写偏差是比丢失更新更隐蔽的多对象写写冲突 结构图卡
- 幻读导致写偏差的通用模式及物化冲突这个最后手段 普通读书笔记卡
- 可串行化的三条实现路径真的串行执行两阶段锁定与可串行化快照隔离 结构图卡
- 谓词锁与索引范围锁用近似换取幻读防护的性能可行性 普通读书笔记卡
- 可串行化快照隔离靠检测过时前提实现乐观并发控制 结构图卡
08 分布式系统的麻烦
- 部分失效常态 普通读书笔记卡
- 部分失效的不确定性是分布式系统区别于单机的决定性特征 普通读书笔记卡
- 超时只是猜测 普通读书笔记卡
- 网络故障下请求丢失节点故障与响应丢失无法区分 普通读书笔记卡
- 网络分区分裂系统 普通读书笔记卡
- 超时设置的两难过早误判与过晚发现皆有代价 普通读书笔记卡
- 时钟不是事实 普通读书笔记卡
- 网络延迟的可变性本质是排队而延迟保证是资源利用率换来的成本 结构图卡
- 栅栏令牌防旧主 普通读书笔记卡
- 日历时钟与单调钟的用途分野及混用的危险 普通读书笔记卡
- 知识需要多数确认 普通读书笔记卡
- 用日历时钟给分布式写入排序会因时钟不同步而丢失更新 普通读书笔记卡
- 时钟读数应被视为置信区间而非精确时间点 普通读书笔记卡
- 进程可能任意暂停多久导致基于时钟的租约机制潜藏危险 结构图卡
- 防护令牌用递增编号让资源方拒绝过期天选者的写入 普通读书笔记卡
- 拜占庭容错的适用边界为何多数服务端系统不需要它 普通读书笔记卡
- 系统模型用时序假设与故障假设的组合定义算法适用的现实边界 结构图卡
- 安全属性不可撤销与活性属性终将实现的区分帮助推理算法正确性 普通读书笔记卡
09 一致性与共识
- 线性一致像单副本 普通读书笔记卡
- 线性一致性的精确定义与仿佛只有一份副本的错觉 普通读书笔记卡
- 串行化不是线性化 普通读书笔记卡
- 线性一致性与可串行化是两个独立维度 普通读书笔记卡
- 因果顺序够用时 普通读书笔记卡
- 需要线性一致性的三类典型场景 普通读书笔记卡
- 全序广播排历史 普通读书笔记卡
- 复制方式对线性一致性的可达性差异 结构图卡
- 两阶段提交会阻塞 普通读书笔记卡
- CAP理论的真实狭窄含义与历史文物评价 普通读书笔记卡
- 共识决定唯一值 普通读书笔记卡
- Attiya-Welch定理:线性一致性的延迟代价 普通读书笔记卡
- 协调服务管小状态 普通读书笔记卡
- 因果顺序是偏序,线性一致性蕴含但强于因果一致性 普通读书笔记卡
- 捕获因果依赖关系:版本向量的泛化用法 普通读书笔记卡
- 非因果序列号生成器的三种方法及问题 普通读书笔记卡
- 兰伯特时间戳:用(计数器,节点ID)构造与因果一致的全序 普通读书笔记卡
- 仅有时间戳排序还不够:全序需要知道何时尘埃落定 普通读书笔记卡
- 全序广播的两个安全属性与状态机复制 普通读书笔记卡
- 全序广播与线性一致存储可以互相构建 结构图卡
- 原子提交问题与两阶段提交的机制及两个不归路 普通读书笔记卡
- 2PC协调者失效导致存疑事务与持锁阻塞的运维代价 结构图卡
- 数据库内部分布式事务与异构XA事务的根本区别 普通读书笔记卡
- 共识问题的形式化定义与FLP不可能性结果的真实含义 普通读书笔记卡
- 单领导者复制通过纪元编号与法定人数回避而非消除共识 结构图卡
- 容错共识算法的代价与局限 普通读书笔记卡
- ZooKeeper类协调服务的功能组合与真实用途边界 普通读书笔记卡
10 批处理
- Unix批处理哲学 普通读书笔记卡
- 三种系统架构:在线服务、批处理、流处理的划分与衡量标准 普通读书笔记卡
- 排序连接大数据 普通读书笔记卡
- Unix工具批处理:排序与内存聚合的权衡 普通读书笔记卡
- 批输出要可替换 普通读书笔记卡
- Unix哲学的三个设计原则:统一接口、逻辑布线分离与透明实验 普通读书笔记卡
- 偏斜拖垮并行 普通读书笔记卡
- MapReduce与HDFS:无共享架构及计算贴近数据原则 普通读书笔记卡
- 数据流引擎少落盘 普通读书笔记卡
- MapReduce作业执行模型:Mapper、排序混洗与Reducer 结构图卡
- 排序合并连接:把相关数据放在一起的核心思想 普通读书笔记卡
- 处理连接中的数据偏斜:热键补偿技术 普通读书笔记卡
- Map侧连接的三种变体:广播散列、分区散列与合并连接 普通读书笔记卡
- 批处理输出的三种目的与不可变输出带来的人类容错 普通读书笔记卡
- Hadoop与MPP数据库对比之存储多样性:读时模式与数据湖 普通读书笔记卡
- Hadoop与MPP数据库对比之处理模型多样性:任意代码与声明式查询的融合 普通读书笔记卡
- MapReduce针对频繁故障设计:源于Google混合数据中心的抢占式调度 普通读书笔记卡
- 数据流引擎用算子替代僵化的MapReduce角色 结构图卡
- 数据流引擎的谱系重算容错与确定性算子的重要性 普通读书笔记卡
- Pregel图批处理模型的顶点思维、消息传递与固定回合容错 结构图卡
11 流处理
- 流是未止批 普通读书笔记卡
- 流处理与批处理的本质区别:无界输入决定的连锁反应 普通读书笔记卡
- 日志代理保留历史 普通读书笔记卡
- 消息传递系统的核心设计选择:丢弃、缓冲、背压与持久性代价 普通读书笔记卡
- 数据库也是流 普通读书笔记卡
- 直接消息传递的局限:容错程度极为有限 普通读书笔记卡
- 事件时间更真实 普通读书笔记卡
- 消息代理与数据库的四点本质差异 普通读书笔记卡
- 流连接需要状态 普通读书笔记卡
- 负载均衡与扇出两种消费模式,及确认重传导致的乱序代价 普通读书笔记卡
- 恰好一次是端到端 普通读书笔记卡
- 基于日志的消息代理:分区、偏移量与传统代理的权衡 结构图卡
- 消费者偏移量类比复制日志序列号,与磁盘环形缓冲区效应 普通读书笔记卡
- 重播旧消息让基于日志的消息传递更接近批处理哲学 普通读书笔记卡
- 双写的竞态条件问题引出变更数据捕获的动机 普通读书笔记卡
- 变更数据捕获的实现方式与日志压缩机制 普通读书笔记卡
- 事件溯源与CDC的区别:命令与事件的区分 普通读书笔记卡
- 状态与流互为积分微分的关系,及不可变事件的优点 普通读书笔记卡
- 不变性的局限:流失率与合规删除需求 普通读书笔记卡
- 流处理的四种主要用途:CEP、流分析、物化视图、流上搜索 普通读书笔记卡
- 事件时间与处理时间的区别及其导致的错误 结构图卡
- 知道窗口何时"准备好":滞留事件与时钟校正 普通读书笔记卡
- 窗口的四种类型:滚动、跳动、滑动、会话 结构图卡
- 三种流连接类型及其时间依赖性带来的不确定性 结构图卡
- 流处理的恰好一次语义:微批、存档点、原子提交与幂等性 普通读书笔记卡
12 数据系统的未来
- 派生数据可重建 普通读书笔记卡
- 数据集成的核心难题:没有万能工具因此必须组合多个系统 普通读书笔记卡
- 数据库被拆开 普通读书笔记卡
- 基于事件日志的集成优于分布式事务的衍生数据方法 普通读书笔记卡
- 围绕数据流设计 普通读书笔记卡
- 全序广播随系统伸缩而遇到的四种限制场景 普通读书笔记卡
- 端到端正确性 普通读书笔记卡
- 排序事件以捕获因果关系的应对思路 普通读书笔记卡
- 唯一性需要协调 普通读书笔记卡
- 批处理流处理的统一趋势与维护衍生状态的函数式原则 普通读书笔记卡
- 审计来自事实日志 普通读书笔记卡
- 应用演化后重新处理数据:渐进式演化优于突然切换迁移 普通读书笔记卡
- Lambda架构的核心思想及其三个实际问题 普通读书笔记卡
- 统一批处理与流处理需要的三项能力 普通读书笔记卡
- Unix与关系数据库的两种哲学,及CREATE INDEX与流处理的相似性 普通读书笔记卡
- 联合数据库与分拆数据库:统一读取与统一写入两条路径 结构图卡
- 分拆系统vs集成系统:分拆的目标是广度而非深度 普通读书笔记卡
- 应用代码作为衍生函数,与状态管理的分离 普通读书笔记卡
- 围绕数据流构建应用优于同步查询的性能优势 普通读书笔记卡
- 写路径与读路径:索引、缓存、物化视图都在改变这条边界 结构图卡
- 有状态可离线客户端:把写路径延伸到终端设备 普通读书笔记卡
- 读也是事件:把读取请求也表示成流 普通读书笔记卡
- 端到端原则与操作标识符实现幂等性 普通读书笔记卡
- 基于日志消息传递实现唯一性约束与多分区请求处理 结构图卡
- 及时性与完整性的区分 普通读书笔记卡
- 宽松地解释约束:补偿性事务与无协调数据系统 普通读书笔记卡
- 信任但验证:审计与可审计性设计 普通读书笔记卡
- 为可审计性而设计:端到端完整性检查与默克尔树 普通读书笔记卡
- 预测性分析的算法监狱风险与偏见反馈循环 普通读书笔记卡
- 监视经济:隐私权从个体到公司的转移 普通读书笔记卡
- 数据是信息时代的污染:工业革命类比与立法自律 普通读书笔记卡
相关主题
暂无公开主题。