《分布式架构原理与实践》简介:
3 年持续打磨,总结 20 年架构经验,全网阅读量60万+
◎ 编辑推荐
☆ 内容涉及拆分、调用、协同、计算、存储、调度、Gao性能和可用性、指标与监控等
☆ 按照“为什么→ 是什么 → 怎么办”的思路介绍
☆ 图文并茂,全书包含300多张图片
◎ 内容简介
本书从软件结构的发展历史入手,通过一个简单的例子,描述了分布式架构的特性和存在的问题,并围绕这些问题展开了分析和实践。
书中从为什么、是什么、怎么办这三个方面,分别讲解了分布式应用服务的拆分、分布式调用、分布式协同、分布式计算、分布式存储、分布式资源管理和调度、高性能与可用性以及指标与监控等内容,基本涵盖了分布式技术的要点。读者既可以按照逻辑联系从前往后看,也可以只阅读感兴趣的章节。
◎ 名人推荐
我和崔皓从在惠普共事开始,已经认识很多年了。他是一个做事情非常认真、仔细的人。后来有段时间我们又在同一家创业公司共事,他负责管理产品研发团队,只用一年的时间,他就把一个初创公司的产品研发团队从零打造成了一个优秀的团队,各项产品研发指标都超过了比较基准,这让我再次对他肃然起敬。
本书深入浅出地讲解了架构设计的演进历程和各个关键模块,可以说是对作者多年工作经验的总结。无论是对刚进入架构设计师行业的开发人员,还是对资深的架构设计师而言,都有很高的参考价值。在这本书中,我还看到了很多他在项目实践中的经验总结和分享,是一本难得的理论结合实践的书,值得一看。如果能有幸再听到作者分享在美国的研发经历,将让我受益匪浅。
—— 吴晖
上海联蔚利歌信息科技有限公司(金融科技行业)运营总监,前 SAP 大中华区 OEM 售前部门负责人,前惠普云计算交付中国区负责人
本书的写作历时 3 年,崔皓把过去多年在研究和应用分布式系统过程中的经验整理到了其中,同时还对技术背后的原理做了详尽剖析,能够让读者解决在工作中遇到的实际问题,而不仅是纸上谈兵。本书通俗易懂、操作性强,对于初学者、高级程序员、架构师都有很好的指导意义。在实际项目中,到底是如何有效应用分布式系统的?这本书会给你答案。
—— 冯是聪,百炼智能 CEO
老崔是我 10 年的同事,不管是在中国惠普研发中心还是在互联网创业期间,他一直以资深架构师的角色奋战在大型复杂项目的一线,对分布式架构有着相当深入的理解和丰富的实践经验,擅长将技术理论落地,特别是在设计和把控高可用、高并发系统方面。
随着国内互联网产业在最近 15 年的飞速发展,从底层的分布式存储、分布式数据库,到以微服务形式呈现的分布式计算、物联网场景下的边缘计算,再到区块链技术以及人工智能领域的联邦学习,无一不是分布式架构理念和相关技术在各行各业的广泛应用和落地实践。本书从应用和实践的角度系统讲解了分布式架构的相关技术和组件在实际场景中的应用,能帮助读者全面梳理和了解分布式架构的原理及知识体系,以期“授之以渔”。
—— 胡浩文,神州数码研发中心技术总监,前惠普交付中心研发经理
《分布式架构原理与实践》目录:
第1章 分布式架构设计的特征与问题 1
1.1 架构设计的演进过程 1
1.1.1 应用与数据一体模式 1
1.1.2 应用与数据分离模式 2
1.1.3 缓存与性能的提升 3
1.1.4 服务器集群处理并发 4
1.1.5 数据库读写分离 5
1.1.6 反向代理和CDN 6
1.1.7 分布式数据库与分表分库 9
1.1.8 业务拆分 10
1.1.9 分布式与微服务 11
1.2 一个简单的例子:分布式架构的组成 13
1.2.1 架构概述与分层 13
1.2.2 客户端与CDN 15
1.2.3 接入层 16
1.2.4 应用层 17
1.2.5 存储层 23
1.3 分布式架构的特征 26
1.4 分布式架构的问题 27
1.4.1 分布式架构的逻辑结构图 27
1.4.2 应用服务拆分 28
1.4.3 分布式调用 29
1.4.4 分布式协同 29
1.4.5 分布式计算 30
1.4.6 分布式存储 30
1.4.7 分布式资源管理与调度 31
1.4.8 高性能与可用性 31
1.4.9 指标与监控 31
1.5 本书的阅读方式 32
1.6 总结 33
第2章 分布式应用服务的拆分 34
2.1 起因与概念 34
2.2 拆分思路 36
2.3 模型结构 38
2.3.1 通用语言 38
2.3.2 领域、子域和限界上下文 39
2.3.3 实体和值类型 41
2.3.4 聚合和聚合根 45
2.3.5 领域事件 46
2.4 分析业务需求形成应用服务 48
2.4.1 分析业务流程 49
2.4.2 抽取领域对象和生成聚合 51
2.4.3 划定限界上下文 53
2.5 领域驱动设计分层 54
2.5.1 分层的概述与原则 54
2.5.2 分层的内容 56
2.5.3 分层的总结 57
2.5.4 服务内部的分层调用与服务间的调用 58
2.5.5 把分层映射到代码结构 60
2.5.6 代码分层示例 65
2.6 总结 70
第3章 分布式调用 71
3.1 负载均衡 71
3.1.1 负载均衡分类 72
3.1.2 负载均衡算法 83
3.2 API 网关 85
3.2.1 API 网关的定义 85
3.2.2 API 网关的服务定位 87
3.2.3 API 网关的技术原理 88
3.3 服务注册与发现 90
3.3.1 服务注册与发现的概念和原理 91
3.3.2 服务注册中心的可用性 92
3.3.3 服务注册中心的服务保存 92
3.4 服务间的远程调用 92
3.4.1 RPC 调用过程 93
3.4.2 RPC 动态代理 94
3.4.3 RPC 序列化 97
3.4.4 协议编码 98
3.4.5 网络传输 99
3.4.6 Netty 实现 RPC 104
3.5 总结 116
第4章 分布式协同 117
4.1 分布式系统的特性与互斥问题 117
4.1.1 集中互斥算法 118
4.1.2 基于许可的互斥算法 120
4.1.3 令牌环互斥算法 122
4.2 分布式锁 124
4.2.1 分布式锁的由来和定义 125
4.2.2 通过Redis缓存实现分布式锁 126
4.2.3 通过ZooKeeper 实现分布式锁 129
4.2.4 分布式分段加锁 132
4.3 分布式事务 133
4.3.1 ACID 理论 134
4.3.2 CAP 理论 135
4.3.3 BASE 理论 137
4.3.4 DTP 模型 139
4.3.5 分布式事务 2PC 解决方案 141
4.3.6 分布式事务 TCC 解决方案 143
4.4 分布式选举 146
4.4.1 Bully 算法 147
4.4.2 Raft 算法 150
4.4.3 ZAB 算法 154
4.5 ZooKeeper——分布式系统的实践 157
4.5.1 从一个简单的例子开始 157
4.5.2 Znode 的原理与使用 158
4.5.3 Watcher 原理与使用 159
4.5.4 Version 的原理与使用 162
4.5.5 会话的原理与使用 164
4.5.6 服务群组 166
4.6 总结 169
第5章 分布式计算 171
5.1 MapReduce 模式 171
5.1.1 MapReduce 的策略和理念 171
5.1.2 MapReduce 的体系结构 173
5.1.3 MapReduce 的工作流程 175
5.1.4 MapReduce 的应用实例 178
5.2 Stream 模式 180
5.2.1 Stream 模式的处理过程及特点 181
5.2.2 Storm 的体系结构与工作原理 182
5.2.3 Storm 的并发机制 185
5.2.4 Stream Grouping 188
5.2.5 Storm 集群架构 191
5.3 总结 193
第6章 分布式存储 195
6.1 数据存储面临的问题以及解决思路 195
6.1.1 RAID 磁盘阵列 196
6.1.2 分布式存储的组成要素 199
6.2 分布式数据库 200
6.2.1 分表分库 200
6.2.2 主从复制 205
6.2.3 数据扩容 213
6.3 分布式缓存 216
6.3.1 缓存分片算法 217
6.3.2 Redis 集群方案 221
6.3.3 缓存节点之间的通信 222
6.3.4 请求分布式缓存的路由 223
6.3.5 缓存节点的扩展和收缩 226
6.3.6 缓存故障的发现和恢复 228
6.4 总结 230
第7章 分布式资源管理和调度 231
7.1 分布式资源调度的由来与过程 231
7.1.1 资源调度可以解决什么问题 232
7.1.2 资源调度过程 234
7.2 资源划分和调度策略 237
7.2.1 Linux Container 资源是如何划分的 237
7.2.2 任务与资源如何匹配 244
7.3 分布式调度架构 249
7.3.1 中央式调度器 250
7.3.2 两级调度器 253
7.3.3 共享状态调度器 259
7.4 Kubernetes——资源调度的实践 262
7.4.1 Kubernetes 架构概述 263
7.4.2 从一个例子开始 264
7.4.3 kubectl 和 API Server 264
7.4.4 controller manager、Scheduler 和 kubelet 268
7.4.5 Service 和 kubelet 271
7.5 总结 277
第8章 高性能与可用性 278
8.1 缓存的应用 278
8.1.1 处处皆缓存 279
8.1.2 动静分离 280
8.1.3 HTTP 缓存 284
8.1.4 CDN 缓存 288
8.1.5 DNS 结构与访问流程 289
8.1.6 负载均衡实现动态缓存 292
8.1.7 进程内缓存 296
8.1.8 分布式进程缓存 304
8.2 可用性 306
8.2.1 请求限流 306
8.2.2 服务降级 314
8.2.3 服务熔断 319
8.3 总结 328
第9章 指标与监控 329
9.1 为什么需要监控系统 329
9.2 监控系统的指标 330
9.3 创建监控系统的步骤 332
9.4 监控系统的分类 333
9.4.1 日志类监控 333
9.4.2 调用链监控 339
9.4.3 度量类监控:LSM Tree 和 LevelDB 350
9.5 监控系统的分层 355
9.6 Zabbix 实现监控系统 356
9.6.1 Zabbix 构建监控系统过程 357
9.6.2 Zabbix 架构的安装和配置 358
9.6.3 Zabbix 监控方式 364
9.7 Prometheus 实现监控系统 369
9.7.1 Prometheus 系统架构 369
9.7.2 时间序列与 Metric 数据模型 370
9.7.3 Exporter 采集数据与服务发现 372
9.7.4 报警规则的定义和报警路由的分发 374
9.8 总结 378
第10章 架构设计思路和要点 379
10.1 架构设计思维方式 379
10.1.1 架构师的设计模型 379
10.1.2 过程设计模型 383
10.1.3 协作式设计模型 386
10.1.4 扩展立方设计模型 389
10.2 重构与测试 391
10.2.1 代码重构 391
10.2.2 性能测试与压力测试 395
10.3 学习与发展 401
10.3.1 思维方式 401
10.3.2 学习提升 402
10.3.3 职业发展 403
10.4 总结 405
· · · · · ·