《云系统管理 大规模分布式系统设计与运营》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)托马斯A.利蒙切利(THOMASA.LIMONCELLI),(美)斯特拉塔R.查卢普(STRATAR.CHALUP),(美)克里斯蒂娜J.霍根(CHRISTINAJ.HOGAN)著;姚军译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2016
  • ISBN:9787111541608
  • 页数:374 页
图书介绍:本书分为两个部分——设计和运营。第一部分捕捉我们在大规模、复杂、基于云的分布式计算系统设计上的想法。在引言之后,我们从底向上逐层介绍设计的每个要素。我们从系统管理员(而非计算机科学家)的角度介绍分布式系统,要运营一个系统就必须理解其内部原理。第二部分描述如何运营这些系统。前面几章介绍最基本的问题。后面几章深入更为复杂的技术活动,然后是概要规划和将以上要素组合起来的战略。

引言 1

第一部分 设计:构建系统 8

第1章 分布式世界中的设计 8

1.1 大规模的可见性 9

1.2 简单的重要性 10

1.3 构成 10

1.3.1 具有多个后端副本的负载平衡器 10

1.3.2 具有多个后端的服务器 12

1.3.3 服务器树 13

1.4 分布状态 14

1.5 CAP原则 16

1.5.1 一致性 16

1.5.2 可用性 17

1.5.3 分区可容忍性 17

1.6 松散耦合系统 19

1.7 速度 20

1.8 小结 23

练习 23

第2章 为运营而设计 25

2.1 运营需求 25

2.1.1 配置 26

2.1.2 启动和关机 27

2.1.3 队列排空 28

2.1.4 软件升级 29

2.1.5 备份和恢复 29

2.1.6 冗余性 29

2.1.7 数据库副本 30

2.1.8 热切换 31

2.1.9 单独功能开关 31

2.1.10 优雅降级 31

2.1.11 访问控制和速率限制 32

2.1.12 数据导入控制 33

2.1.13 监控 33

2.1.14 审计 33

2.1.15 调试设施 34

2.1.16 异常收集 34

2.1.17 运营文档 35

2.2 为运营实现设计 35

2.2.1 从一开始就构建功能 36

2.2.2 在确定功能时提出请求 36

2.2.3 自行编写功能 37

2.2.4 与第三方供应商合作 37

2.3 改善模型 38

2.4 小结 38

练习 39

第3章 选择服务平台 40

3.1 服务抽象水平 41

3.1.1 基础设施即服务 41

3.1.2 平台即服务 42

3.1.3 软件即服务 43

3.2 机器的类型 44

3.2.1 物理机器 44

3.2.2 虚拟机 44

3.2.3 容器 46

3.3 资源共享水平 48

3.3.1 依从性 49

3.3.2 隐私 49

3.3.3 成本 49

3.3.4 控制 50

3.4 主机托管 50

3.5 选择策略 51

3.6 小结 53

练习 53

第4章 应用程序架构 54

4.1 单机Web服务器 55

4.2 三层Web服务 56

4.2.1 负载平衡器种类 56

4.2.2 负载平衡方法 57

4.2.3 共享状态的负载平衡 58

4.2.4 用户身份标识 59

4.2.5 伸缩性 59

4.3 四层Web服务 60

4.3.1 前端 60

4.3.2 应用服务器 61

4.3.3 配置选项 62

4.4 反向代理服务 62

4.5 云规模服务 62

4.5.1 全局负载平衡器 63

4.5.2 全局负载平衡方法 63

4.5.3 使用用户特定数据的全局负载平衡 64

4.5.4 内部主干网 64

4.6 消息总线架构 66

4.6.1 消息总线设计 67

4.6.2 消息总线可靠性 67

4.6.3 例1:链接缩短网站 68

4.6.4 例2:员工人力资源数据更新 69

4.7 面向服务的架构 70

4.7.1 灵活性 70

4.7.2 支持 70

4.7.3 最佳实践 71

4.8 小结 71

练习 72

第5章 伸缩性设计模式 73

5.1 总体战略 74

5.1.1 识别瓶颈 74

5.1.2 重新设计组件 74

5.1.3 计量结果 74

5.1.4 保持主动 75

5.2 纵向扩展 75

5.3 AKF伸缩立方体 76

5.3.1 x轴:水平复制 76

5.3.2 y轴:功能或者服务分割 77

5.3.3 z轴:面向查找的分割 79

5.3.4 组合 80

5.4 缓存 80

5.4.1 缓存效能 80

5.4.2 缓存布置 81

5.4.3 缓存持久性 81

5.4.4 缓存置换算法 82

5.4.5 缓存条目失效 82

5.4.6 缓存大小 83

5.5 数据分片 84

5.6 线程处理 86

5.7 队列 86

5.7.1 优点 87

5.7.2 变种 87

5.8 内容分发网络 87

5.9 小结 89

练习 89

第6章 弹性设计模式 90

6.1 软件弹性胜过硬件可靠性 91

6.2 所有东西最终都会失灵 92

6.2.1 分布式系统的MTBF 92

6.2.2 传统方法 92

6.2.3 分布式计算方法 93

6.3 通过备用容量实现弹性 94

6.3.1 需要多少备用容量 95

6.3.2 负载平衡与热备份的对比 95

6.4 故障域 96

6.5 软件故障 97

6.5.1 软件崩溃 97

6.5.2 软件挂起 98

6.5.3 死查询 98

6.6 物理故障 99

6.6.1 部件和组件 99

6.6.2 机器 101

6.6.3 负载平衡器 102

6.6.4 机架 103

6.6.5 数据中心 104

6.7 超载故障 104

6.7.1 流量浪涌 105

6.7.2 DoS和DDoS攻击 106

6.7.3 抓取攻击 106

6.8 人为错误 107

6.9 小结 108

练习 108

第二部分 运营:运行系统 110

第7章 分布式世界中的运营 110

7.1 分布式系统运营 111

7.1.1 SRE和传统企业IT的对比 111

7.1.2 变化和稳定性的对比 112

7.1.3 SRE定义 113

7.1.4 大规模运营 114

7.2 服务生命周期 116

7.2.1 服务启动 117

7.2.2 服务退役 120

7.3 运营团队组织策略 120

7.3.1 团队成员的工作日类型 122

7.3.2 其他策略 124

7.4 虚拟办公室 125

7.4.1 沟通机制 125

7.4.2 沟通策略 125

7.5 小结 125

练习 126

第8章 DevOps文化 128

8.1 什么是DevOps 129

8.1.1 传统方法 130

8.1.2 DevOps方法 131

8.2 DevOps的3条道路 131

8.2.1 第一条道路:工作流 131

8.2.2 第二条道路:改进反馈 132

8.2.3 第三条道路:持续试验和学习 133

8.2.4 小批次更好 133

8.2.5 策略的采用 134

8.3 DevOps的历史 134

8.3.1 演变 135

8.3.2 网站可靠性工程 135

8.4 DevOps价值观和原则 136

8.4.1 关系 136

8.4.2 整合 136

8.4.3 自动化 136

8.4.4 持续改进 136

8.4.5 常见的非技术性DevOps实践 137

8.4.6 常见的技术性DevOps实践 138

8.4.7 DevOps发行工程实践 139

8.5 向DevOps转化 139

8.5.1 准备开始 139

8.5.2 企业层面的DevOps 140

8.6 敏捷和持续交付 141

8.6.1 什么是敏捷 141

8.6.2 什么是持续交付 141

8.7 小结 143

练习 144

第9章 服务交付:构建阶段 145

9.1 服务交付策略 146

9.1.1 模式:现代化的DevOps方法论 146

9.1.2 反模式:瀑布方法论 148

9.2 高质量的良性循环 148

9.3 构建阶段的步骤 150

9.3.1 开发 150

9.3.2 提交 150

9.3.3 构建 151

9.3.4 打包 152

9.3.5 注册 152

9.4 构建控制台 152

9.5 持续集成 153

9.6 以软件包作为移交接口 154

9.7 小结 155

练习 156

第10章 服务交付:部署阶段 157

10.1 部署阶段的步骤 157

10.1.1 升级 157

10.1.2 安装 158

10.1.3 配置 158

10.2 测试和批准 159

10.2.1 测试 160

10.2.2 批准 161

10.3 运营控制台 161

10.4 基础设施自动化策略 161

10.4.1 准备物理机器 162

10.4.2 准备虚拟机 162

10.4.3 安装OS和服务 163

10.5 持续交付 164

10.6 基础设施即代码 164

10.7 其他平台服务 165

10.8 小结 165

练习 166

第11章 升级运行中的服务 167

11.1 卸下服务进行升级 167

11.2 滚动升级 168

11.3 “金丝雀” 169

11.4 分阶段试运行 170

11.5 按比例分片 171

11.6 蓝—绿部署 171

11.7 功能切换 171

11.8 在线模式更改 174

11.9 在线代码更改 175

11.10 持续部署 175

11.11 处理失败的代码推送 177

11.12 发行原子性 178

11.13 小结 179

练习 180

第12章 自动化 181

12.1 自动化方法 182

12.1.1 剩余原则 182

12.1.2 补偿原则 183

12.1.3 互补性原则 184

12.1.4 系统管理自动化 185

12.1.5 经验教训总结 185

12.2 工具建设与自动化的对比 186

12.2.1 示例:汽车制造 186

12.2.2 示例:机器配置 187

12.2.3 示例:账户创建 187

12.2.4 工具很好,自动化更好 187

12.3 自动化的目标 187

12.4 创建自动化系统 190

12.4.1 为自动化投入时间 190

12.4.2 减少“苦活” 191

12.4.3 决定自动化的首要任务 191

12.5 如何自动化 192

12.6 语言工具 192

12.6.1 Shell脚本语言 192

12.6.2 脚本语言 193

12.6.3 编译型语言 194

12.6.4 配置管理语言 194

12.7 软件工程工具和技术 195

12.7.1 问题跟踪系统 196

12.7.2 版本控制系统 197

12.7.3 软件打包 198

12.7.4 风格指南 198

12.7.5 测试驱动开发 199

12.7.6 代码评审 200

12.7.7 编写刚好足够的代码 201

12.8 多租户系统 201

12.9 小结 202

练习 203

第13章 设计文档 204

13.1 设计文档概述 204

13.1.1 记录更改和依据 205

13.1.2 作为过去决策存储库的文档 205

13.2 设计文档剖析 205

13.3 模板 207

13.4 文档存档 207

13.5 审核工作流程 208

13.5.1 审核人和批准人 208

13.5.2 获得签字同意 209

13.6 采用设计文档 209

13.7 小结 210

练习 210

第14章 随时待命 212

14.1 设计值班 212

14.1.1 从SLA开始 213

14.1.2 值班人员花名册 213

14.1.3 值日 214

14.1.4 值班表设计 215

14.1.5 值班日程表 216

14.1.6 值班频率 217

14.1.7 通知类型 217

14.1.8 下班时间维护协调 219

14.2 当值 219

14.2.1 当班前的职责 219

14.2.2 常规值班职责 219

14.2.3 警报职责 220

14.2.4 观察、确认、决策、行动 221

14.2.5 值班剧本 221

14.2.6 第三方升级 222

14.2.7 班次结束时的职责 223

14.3 两次当值之间 223

14.3.1 长期修复 223

14.3.2 事后剖析 224

14.4 警报的定期审核 226

14.5 收到太多传呼 227

14.6 小结 228

练习 228

第15章 灾难准备 229

15.1 心态 230

15.1.1 反脆弱系统 230

15.1.2 降低风险 231

15.2 个人培训:灾祸之轮 232

15.3 团队培训:应急演练 233

15.3.1 服务测试 234

15.3.2 随机测试 235

15.4 组织培训:游戏日/DiRT 235

15.4.1 开始 236

15.4.2 扩大范围 237

15.4.3 实施和后勤 237

15.4.4 经历DiRT测试 239

15.5 事故指挥系统 242

15.5.1 工作原理:公共安全领域 243

15.5.2 工作原理:IT运营领域 243

15.5.3 事故行动计划 244

15.5.4 最佳实践 245

15.5.5 ICS示例 245

15.6 小结 246

练习 246

第16章 监控基础知识 248

16.1 概述 249

16.1.1 使用监控 250

16.1.2 服务管理 250

16.2 监控信息的消费者 250

16.3 监控的内容 252

16.4 留存期 253

16.5 元监控 254

16.6 日志 255

16.6.1 方法 255

16.6.2 时间戳 256

16.7小结 256

练习 256

第17章 监控架构与实践 258

17.1 传感与计量 259

17.1.1 黑盒与白盒监控 259

17.1.2 直接计量与合成计量 259

17.1.3 速率与能力监控 260

17.1.4 仪表和计数器 260

17.2 收集 261

17.2.1 推送与拉取 262

17.2.2 协议选择 262

17.2.3 服务器组件与代理、轮询器的对比 263

17.2.4 中心与区域收集器 263

17.3 分析和计算 264

17.4 警报和升级管理器 265

17.4.1 警报、升级和确认 265

17.4.2 静默与抑制 266

17.5 可视化 267

17.5.1 百分位数 268

17.5.2 堆栈排名 269

17.5.3 直方图 269

17.6 存储 270

17.7 配置 271

17.8 小结 271

练习 272

第18章 容量规划 273

18.1 标准容量规划 274

18.1.1 当前使用量 275

18.1.2 正常增长 276

18.1.3 计划增长 276

18.1.4 余量 276

18.1.5 弹性 277

18.1.6 时间表 277

18.2 高级容量规划 278

18.2.1 确定主要资源 278

18.2.2 了解容量限制 278

18.2.3 确定核心驱动力 279

18.2.4 参与度计量 280

18.2.5 分析数据 280

18.2.6 监控关键指标 284

18.2.7 委派容量规划 285

18.3 资源回归 285

18.4 发布新服务 286

18.5 缩短配给时间 287

18.6 小结 288

练习 288

第19章 建立KPI 290

19.1 什么是KPI 291

19.2 创建KPI 292

19.2.1 步骤1:想象理想状况 292

19.2.2 步骤2:量化与理想的距离 292

19.2.3 步骤3:想象行为的变化方式 293

19.2.4 步骤4:修订和选择 293

19.2.5 步骤5:部署KPI 294

19.3 KPI示例:机器分配 294

19.3.1 第一遍 295

19.3.2 第二遍 295

19.3.3 评估KPI 297

19.4 案例研究:错误预算 297

19.4.1 相互冲突的目标 297

19.4.2 统一的目标 298

19.4.3 所有人得益 298

19.5 小结 299

练习 299

第20章 卓越运营 301

20.1 卓越运营是什么样子的 301

20.2 如何计量卓越的程度 302

20.3 评估方法论 302

20.3.1 运营职责 303

20.3.2 评估级别 304

20.3.3 评估问题和匹配属性 305

20.4 服务评估 306

20.4.1 确定评估的内容 306

20.4.2 评估每个服务 306

20.4.3 比较不同服务的结果 307

20.4.4 根据结果采取行动 308

20.4.5 评估和项目计划的频率 308

20.5 组织评估 308

20.6 提高级别 309

20.7 开始着手 310

20.8 小结 311

练习 311

第三部分 附录 314

附录A评估 314

附录B分布式计算和云的起源及未来 335

附录C伸缩性术语和概念 352

附录D模板和示例 356

附录E推荐读物 360

后记 363

参考文献 365