扫描二维码,下载手机APP
下载安卓APP箭头
客服QQ
箭头给我发消息

客服QQ:2698585038

云系统管理-大规模分布式系统设计与运营

综合评级:
★★★★★

定价:
¥99.00

作者:
利蒙切利

出版社:
机械工业

出版日期:
2016/07/01

页数:
371

ISBN:
9787111541608

书籍介绍

本书分为两个部分——设计和运营。

第一部分捕捉我们在大规模、复杂、基于云的分布式计算系统设计上的想法。在引言之后,我们从底向上逐层介绍设计的每个要素。我们从系统管理员(而非计算机科学家)的角度介绍分布式系统,要运营一个系统就必须理解其内部原理。

第二部分描述如何运营这些系统。前面几章介绍最基本的问题。后面几章深入更为复杂的技术活动,然后是概要规划和将以上要素组合起来的战略。

目录

第一部分 设计:构建系统

第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 分布式系统的MTBF92

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

第二部分 运营:运行系统

第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 什么是DevOps129

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 企业层面的DevOps140

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 组织培训:游戏日/DiRT235

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章 建立KPI290

19.1 什么是KPI291

19.2 创建KPI292

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

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

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

19.2.4 步骤4:修订和选择293

19.2.5 步骤5:部署KPI294

19.3 KPI示例:机器分配294

19.3.1 第一遍295

19.3.2 第二遍295

19.3.3 评估KPI297

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

第三部分 附录

附录A 评估314

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

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

附录D 模板和示例356

附录E 推荐读物360

后记363

参考文献365