目录
序 xii
前言 xiii
第 1章 数据库可靠性工程介绍 1
1.1 数据库可靠性工程师的指导原则 2
1.1.1 保护数据 2
1.1.2 大量自助服务 3
1.1.3 消除琐事 3
1.1.4 数据库并不特殊 4
1.1.5 消除软件和运维之间的障碍 4
1.2 运维核心概述 5
1.3 需求层次 6
1.3.1 生存和安全 . 6
1.3.2 爱和归属感 7
1.3.3 尊重 7
1.3.4 自我实现 8
1.4 小结 9
第 2章 服务等级管理 10
2.1 为何需要SLO 10
2.2 服务等级指标 12
2.2.1 延时 12
2.2.2 可用性 12
2.2.3 吞吐量 12
2.2.4 持久性 13
2.2.5 成本或效率 13
2.3 定义服务目标 13
2.3.1 延时指标 13
2.3.2 可用性指标 16
2.3.3 吞吐量指标 18
2.4 SLO的监控和报告 19
2.4.1 可用性监控 20
2.4.2 延时监控 21
2.4.3 吞吐量监控 22
2.4.4 监控成本和效率 22
2.5 小结 23
第3章 风险管理 24
3.1 风险考量因素 25
3.1.1 未知因素和复杂性 25
3.1.2 可用资源 25
3.1.3 人为因素 25
3.1.4 团队因素 26
3.2 可以做什么 27
3.3 不可以做什么 27
3.4 工作流程:初始版本 28
3.4.1 服务风险评估 29
3.4.2 架构清单 30
3.4.3 优先级 31
3.4.4 风险控制和决策制定 34
3.5 持续迭代 36
3.6 小结 37
第 4 章 操作可见性 38
4.1 操作可见性的新规则 40
4.1.1 把操作可见性视为商业智能系统 40
4.1.2 分布式易失环境成为趋势 40
4.1.3 高频存储关键度量值 42
4.1.4 保持架构简洁 43
4.2 操作可见性框架 44
4.3 数据输入 45
4.3.1 遥测/度量值 46
4.3.2 事件 47
4.3.3 日志 47
4.4 数据输出 47
4.5 监控的初始版本 48
4.5.1 数据安全吗 49
4.5.2 服务运行正常吗 50
4.5.3 用户受影响了吗 51
4.6 度量应用程序 51
4.6.1 分布式追踪 52
4.6.2 事件与日志 53
4.7 度量服务器或实例 53
4.8 度量数据存储 55
4.9 数据存储连接层 56
4.9.1 利用率 56
4.9.2 饱和度 56
4.9.3 错误 57
4.10 数据库内部可见性 58
4.10.1 吞吐量和延时度量值 58
4.10.2 提交、重做和日志 58
4.10.3 复制状态 59
4.10.4 内存结构 60
4.10.5 锁与并发 60
4.11 数据库对象 62
4.12 数据库查询 62
4.13 数据库报警和事件 62
4.14 小结 63
第5章 基础设施工程 64
5.1 主机 64
5.1.1 物理服务器 64
5.1.2 系统或内核的运维 65
5.1.3 存储区域网络 72
5.1.4 物理服务器的优点 73
5.1.5 物理服务器的缺点 73
5.2 虚拟化 73
5.2.1 虚拟机管理程序 74
5.2.2 并发 74
5.2.3 存储 74
5.2.4 用例 74
5.3 容器 75
5.4 DaaS 75
5.4.1 DaaS面临的挑战 76
5.4.2 数据库可靠性工程师与DaaS 76
5.5 小结 77
第6章 基础设施管理 78
6.1 版本控制 79
6.2 配置定义 79
6.3 基于配置的构建 81
6.4 维护配置 82
6.5 基础设施定义和编排 83
6.5.1 单一基础设施定义 83
6.5.2 垂直拆分 84
6.5.3 分层(水平定义) 85
6.6 验收测试和合规性 86
6.7 服务目录 86
6.8 完成拼图 87
6.9 开发环境 88
6.10 小结 88
第7章 备份和恢复 89
7.1 核心概念 90
7.1.1 物理与逻辑 90
7.1.2 在线与离线 90
7.1.3 全量、增量和差量 90
7.2 恢复的考量 91
7.3 恢复场景 91
7.3.1 计划内的恢复场景 92
7.3.2 计划外的场景 93
7.3.3 场景的范围 95
7.3.4 不同场景的影响 95
7.4 恢复策略分解 96
7.4.1 策略第 1步:检测 96
7.4.2 策略第 2步:分层存储 98
7.4.3 策略第3步:多样的工具集 98
7.4.4 策略第4步:测试 100
7.5 既定恢复策略 100
7.5.1 在线快速存储的全量备份和增量备份 100
7.5.2 在线慢速存储的全量备份和增量备份 101
7.5.3 离线存储 102
7.5.4 对象存储 103
7.6 小结 103
第8章 发布管理 104
8.1 培训与合作 104
8.1.1 收集并分享相关资讯 105
8.1.2 促进对话 105
8.1.3 特定领域知识 105
8.1.4 协作 108
8.2 集成 108
8.3 测试 111
8.3.1 测试友好的开发实践 111
8.3.2 变更签入后的测试 112
8.3.3 完整的数据集测试 112
8.3.4 下游测试 113
8.3.5 操作测试 114
8.4 部署 114
8.4.1 迁移和版本 114
8.4.2 影响分析 115
8.4.3 变更模式 115
8.4.4 手动或自动化 118
8.5 小结 118
第9章 安全 119
9.1 安全的目标 119
9.1.1 防止数据被窃 119
9.1.2 防止故意破坏 120
9.1.3 防止意外损坏 120
9.1.4 保护数据免于泄露 120
9.1.5 合规与审计标准 120
9.2 数据库安全即功能 121
9.2.1 培训与合作 121
9.2.2 自助服务 122
9.2.3 集成和测试 122
9.2.4 操作可见性 123
9.3 漏洞和漏洞利用 124
9.3.1 STRIDE 125
9.3.2 DREAD 125
9.3.3 基本防御措施 126
9.3.4 DoS攻击 127
9.3.5 SQL注入 129
9.3.6 网络和身份验证协议 131
9.4 数据加密 131
9.4.1 财务数据 132
9.4.2 个人健康数据 132
9.4.3 个人隐私数据 132
9.4.4 军事数据或政府数据 132
9.4.5 机密或敏感的业务数据 132
9.4.6 传输中的数据 133
9.4.7 数据库中的数据 136
9.4.8 文件系统中的数据 138
9.5 小结 139
第 10章 数据存储、索引和复制 141
10.1 数据的存储结构 141
10.1.1 数据库行的存储 141
10.1.2 SSTable和LSM树 144
10.1.3 索引 146
10.1.4 日志和数据库 147
10.2 数据复制 148
10.2.1 单leader复制 148
10.2.2 多leader复制 158
10.3 小结 163
第 11章 数据存储领域指南 164
11.1 数据存储的概念属性 164
11.1.1 数据模型 165
11.1.2 事务 167
11.1.3 BASE 171
11.2 数据存储的内部属性 172
11.2.1 存储 172
11.2.2 无处不在的CAP理论 173
11.2.3 一致性与延时的权衡 174
11.2.4 可用性 175
11.3 小结 176
第 12章 数据架构示例 177
12.1 架构组件 177
12.1.1 前端数据库 177
12.1.2 数据访问层 178
12.1.3 数据库代理 179
12.1.4 事件与消息系统 180
12.1.5 缓存和内存存储 182
12.2 数据架构 184
12.2.1 Lambda和Kappa 184
12.2.2 事件溯源 186
12.2.3 CQRS 186
12.3 小结 187
第 13章 数据库可靠性工程师行为指南 188
13.1 数据库可靠性工程文化 188
13.1.1 突破障碍 189
13.1.2 数据驱动决策 192
13.1.3 数据完整性和可恢复性 193
13.2 小结 193
关于作者 194
封面介绍 194