书籍详情
分布式系统设计实践
作者:李庆旭
出版社:人民邮电出版社
出版时间:2019-11-01
ISBN:9787115519450
定价:¥59.00
购买这本书可以去
内容简介
本书对近年来涌现出的各种主流分布式技术做了简要介绍和全面梳理。本书将分布式系统中涉及的技术分为前端构造技术、分布式中间件技术和分布式存储技术三大类,对每类技术都详细介绍了其原理、设计思想和架构,以及相关应用场景。此外,本书还总结了分布式系统的构建思想,并分别对业界几个非常成功的大型分布式系统(谷歌搜索系统、淘宝网电商平台、阿里云公有云平台、领英社交平台)进行了案例研究。
作者简介
李庆旭 1999 年北京工业大学计算机系硕士毕业。曾先后就职于华为、北电网络、微软、CA、Symantec/Veritas等国内外知名企业,担任过软件开发工程师、项目经理、团队技术负责人等职务。参与研发过的产品有电信网管软件、微软拼音输入法、微软SharePoint、微软Office 365、CA Clarity项目管理软件等。对软件技术有着浓厚的兴趣,常于工作之余涉猎软件的多个领域,如桌面操作系统、移动操作系统、分布式技术、人工智能、机器学习等。
目录
目 录
第一部分 分布式系统概述
第1章 分布式系统概述 3
1.1 分布式系统的组成 4
1.2 分布式协调组件 6
1.3 分布式存储系统 7
1.4 分布式计算系统 9
1.4.1 批处理分布式计算系统 9
1.4.2 流处理分布式计算系统 10
1.4.3 混合系统 11
1.5 分布式系统中节点之间的关系 11
第二部分 分布式系统的前端构造技术
第2章 Web框架的实现原理 15
2.1 Web框架简介 16
2.2 PHP Web MVC框架的工作原理 17
2.2.1 框架的入口 17
2.2.2 URL到控制器的映射 17
2.2.3 如何将模型传给视图 18
2.3 Java Web MVC框架原理 19
2.3.1 Java Servlet API 3.0 19
2.3.2 框架的入口 20
2.3.3 Spring 4.0框架 22
2.3.4 Java EE 29
2.3.5 Spring与Java EE的比较 30
2.4 Go语言Web开发 30
2.4.1 Go语言简介 31
2.4.2 Go语言Web开发 32
第3章 反向代理与负载均衡 33
3.1 反向代理 33
3.1.1 Nginx 34
3.1.2 Tengine 35
3.1.3 Varnish 35
3.2 负载均衡 36
3.2.1 DNS负载均衡 36
3.2.2 硬件负载均衡 36
3.2.3 软件负载均衡 37
第三部分 分布式中间件
第4章 分布式同步服务中间件 41
4.1 分布式一致性协议 42
4.2 分布式同步服务中间件简介 43
4.3 分布式同步服务中间件的实现原理 44
4.3.1 架构 44
4.3.2 如何消除单点故障 45
4.3.3 Chubby对外提供的API 45
4.3.4 数据库 46
4.3.5 Chubby使用示例:集群的主服务器选举 46
4.4 其他分布式同步服务中间件 46
4.4.1 Linux心跳机制 47
4.4.2 ZooKeeper 47
4.4.3 iNexus 48
4.5 分布式同步服务的应用 48
第5章 关系型数据库访问中间件 53
5.1 数据库访问中间件的形式 54
5.2 数据库访问中间件的工作原理 55
5.3 著名的数据库访问中间件 56
5.3.1 MySQL代理 57
5.3.2 Cobar 58
5.3.3 TDDL 59
5.3.4 MyCAT 59
5.3.5 Heisenberg 59
5.4 数据库访问中间件的应用 60
5.4.1 使用MySQL代理实现读写数据库分离 60
5.4.2 研发自己的数据库中间件,实现MySQL的分库分表 60
第6章 分布式服务调用中间件 63
6.1 分布式服务调用中间件简介 63
6.2 分布式服务调用中间件的实现原理 64
6.2.1 Dubbo的架构 64
6.2.2 Dubbo中各组件的交互 65
6.2.3 Dubbo的实现及特点 66
6.2.4 Dubbox 66
6.3 其他分布式服务调用中间件 67
6.3.1 Protocol Buffers 67
6.3.2 gRPC 68
6.3.3 Thrift 69
6.3.4 Motan 72
6.3.5 sofa-pbrpc 73
6.4 分布式服务调用中间件的应用 73
第7章 分布式消息服务中间件 75
7.1 分布式消息服务中间件简介 75
7.2 分布式消息服务中间件的实现原理 77
7.2.1 消息模型 77
7.2.2 架构 77
7.3 其他分布式消息服务中间件 79
7.3.1 阿里巴巴RocketMQ 79
7.3.2 Apache Pulsar 80
7.4 分布式消息服务中间件的应用 82
7.4.1 秒杀系统中使用Kafka以削平峰值流量 83
7.4.2 使用Kafka流实现消息推送 83
第8章 分布式跟踪服务中间件 85
8.1 分布式跟踪服务中间件的实现原理 85
8.2 其他分布式跟踪服务中间件 88
8.2.1 Twitter的Zipkin 88
8.2.2 Pinpoint 90
8.2.3 阿里巴巴的EagleEye 92
8.3 分布式跟踪服务中间件的应用 92
第四部分 分布式存储技术
第9章 分布式文件系统 95
9.1 分布式文件系统的实现原理 96
9.2 其他分布式文件系统 102
9.3 分布式文件系统的应用 104
第10章 基于键值对的NoSQL数据库 107
10.1 NoSQL数据库的CAP权衡 108
10.2 基于键值对的NoSQL数据库的实现原理 108
10.2.1 谷歌的LevelDB 108
10.2.2 阿里巴巴的Tair 111
10.2.3 亚马逊的Dynamo 111
10.3 其他基于键值对的NoSQL数据库 115
10.3.1 Memcached 115
10.3.2 Redis 116
10.3.3 Berkeley DB 117
10.3.4 Facebook RocksDB 117
10.3.5 Riak 118
10.3.6 Voldemort 118
10.4 基于键值对的NoSQL数据库的应用 118
10.4.1 使用Redis缓存会话数据 118
10.4.2 使用Berkeley DB/LevelDB/RocksDB构建自己的分布式存储系统 119
10.4.3 使用Berkeley DB/LevelDB/RocksDB作为本地数据库 119
第11章 基于列的NoSQL数据库 121
11.1 基于列的NoSQL数据库的实现原理 121
11.1.1 数据模型 121
11.1.2 架构 124
11.2 其他基于列的NoSQL数据库 126
11.2.1 Apache HBase 126
11.2.2 Apache Cassandra 127
11.2.3 Baidu Tera 128
11.3 基于列的NoSQL数据库的应用 128
11.3.1 HBase用于数据分析系统 128
11.3.2 HBase用于存储呼叫记录 129
第12章 基于文档的NoSQL数据库 131
12.1 基于文档的NoSQL数据库的实现原理 131
12.1.1 数据模型 131
12.1.2 自动分片 132
12.1.3 副本 132
12.1.4 索引 133
12.1.5 查询路由 133
12.2 其他基于文档的NoSQL数据库 133
12.2.1 CouchDB 133
12.2.2 RethinkDB 134
12.3 基于文档的NoSQL数据库的应用 135
第13章 其他NoSQL数据库 137
13.1 基于图的NoSQL数据库Neo4j 138
13.1.1 数据模型 138
13.1.2 图的存储 138
13.1.3 高可用性 139
13.1.4 水平扩展 139
13.2 多数据模型NoSQL数据库OrientDB 139
13.2.1 基本概念 140
13.2.2 图的表示 140
13.2.3 节点与集群 140
13.2.4 分片 141
13.2.5 ACID支持 141
13.2.6 CAP的权衡 142
13.2.7 集群配置信息的管理 142
13.3 时间序列NoSQL数据库 142
第14章 NewSQL数据库 143
14.1 NewSQL和CAP理论 144
14.2 采用新架构的NewSQL系统 145
14.2.1 谷歌的Megastore 145
14.2.2 谷歌的Spanner 146
14.2.3 谷歌的F1 147
14.2.4 阿里巴巴的OceanBase 148
14.2.5 其他采用新架构的NewSQL数据库 152
第五部分 分布式系统的构建思想
第15章 云化 157
15.1 云化的技术基础 157
15.1.1 虚拟机技术 157
15.1.2 容器技术 159
15.2 公有云能提供什么 159
15.3 云化对软件架构的要求 161
第16章 分布式系统的构建思想 163
16.1 一切都可能失败与冗余的思想 163
16.1.1 如何避免单点故障 164
16.1.2 避免单点故障的具体做法 165
16.2 水平而不是垂直扩展的思想 165
16.2.1 数据的水平扩展 166
16.2.2 服务的水平扩展 167
16.2.3 数据中心的水平扩展 167
16.3 尽可能简单的思想 168
16.4 实用主义的思想 169
16.4.1 搜索引擎作为查询工具使用 169
16.4.2 阿里巴巴的OceanBase的架构 169
16.4.3 根据需要选择最适合的开发工具和开发语言 170
16.4.4 根据需要选择不同的存储系统 170
16.5 异步化以解耦并削平峰值 170
16.6 最终一致性的思想 171
16.7 微服务的思想 171
16.8 MapReduce的思想 172
16.9 服务跟踪的思想 172
16.10 资源池化的思想 173
第六部分 大型分布式系统案例研究及分析
第17章 大型分布式系统案例研究 177
17.1 案例研究之谷歌搜索系统 177
17.2 案例研究之淘宝网 182
17.3 案例研究之阿里云 185
17.4 案例研究之领英 189
第18章 关于分布式系统设计的思考 197
18.1 大型互联网公司架构的共性 197
18.2 为何大型互联网公司的架构如此相似 198
18.3 关于分布式监控系统 199
18.4 Linux系统调用epoll() 200
18.5 关于插件设计模式的实现 201
18.5.1 C/C++语言的动态库形式的实现 202
18.5.2 Java语言的插件模式实现 203
18.5.3 采用专用语言的插件模式实现 205
18.6 关于分布式服务调用中间件的实现 205
18.7 动态链接还是静态链接 206
18.8 无所不用其极的压榨性能手段 206
18.8.1 编译后代码的原生态化 206
18.8.2 定制的Linux内核 207
18.8.3 定制的Java虚拟机 208
18.8.4 定制的MySQL 208
参考文献 209
后记 211
第一部分 分布式系统概述
第1章 分布式系统概述 3
1.1 分布式系统的组成 4
1.2 分布式协调组件 6
1.3 分布式存储系统 7
1.4 分布式计算系统 9
1.4.1 批处理分布式计算系统 9
1.4.2 流处理分布式计算系统 10
1.4.3 混合系统 11
1.5 分布式系统中节点之间的关系 11
第二部分 分布式系统的前端构造技术
第2章 Web框架的实现原理 15
2.1 Web框架简介 16
2.2 PHP Web MVC框架的工作原理 17
2.2.1 框架的入口 17
2.2.2 URL到控制器的映射 17
2.2.3 如何将模型传给视图 18
2.3 Java Web MVC框架原理 19
2.3.1 Java Servlet API 3.0 19
2.3.2 框架的入口 20
2.3.3 Spring 4.0框架 22
2.3.4 Java EE 29
2.3.5 Spring与Java EE的比较 30
2.4 Go语言Web开发 30
2.4.1 Go语言简介 31
2.4.2 Go语言Web开发 32
第3章 反向代理与负载均衡 33
3.1 反向代理 33
3.1.1 Nginx 34
3.1.2 Tengine 35
3.1.3 Varnish 35
3.2 负载均衡 36
3.2.1 DNS负载均衡 36
3.2.2 硬件负载均衡 36
3.2.3 软件负载均衡 37
第三部分 分布式中间件
第4章 分布式同步服务中间件 41
4.1 分布式一致性协议 42
4.2 分布式同步服务中间件简介 43
4.3 分布式同步服务中间件的实现原理 44
4.3.1 架构 44
4.3.2 如何消除单点故障 45
4.3.3 Chubby对外提供的API 45
4.3.4 数据库 46
4.3.5 Chubby使用示例:集群的主服务器选举 46
4.4 其他分布式同步服务中间件 46
4.4.1 Linux心跳机制 47
4.4.2 ZooKeeper 47
4.4.3 iNexus 48
4.5 分布式同步服务的应用 48
第5章 关系型数据库访问中间件 53
5.1 数据库访问中间件的形式 54
5.2 数据库访问中间件的工作原理 55
5.3 著名的数据库访问中间件 56
5.3.1 MySQL代理 57
5.3.2 Cobar 58
5.3.3 TDDL 59
5.3.4 MyCAT 59
5.3.5 Heisenberg 59
5.4 数据库访问中间件的应用 60
5.4.1 使用MySQL代理实现读写数据库分离 60
5.4.2 研发自己的数据库中间件,实现MySQL的分库分表 60
第6章 分布式服务调用中间件 63
6.1 分布式服务调用中间件简介 63
6.2 分布式服务调用中间件的实现原理 64
6.2.1 Dubbo的架构 64
6.2.2 Dubbo中各组件的交互 65
6.2.3 Dubbo的实现及特点 66
6.2.4 Dubbox 66
6.3 其他分布式服务调用中间件 67
6.3.1 Protocol Buffers 67
6.3.2 gRPC 68
6.3.3 Thrift 69
6.3.4 Motan 72
6.3.5 sofa-pbrpc 73
6.4 分布式服务调用中间件的应用 73
第7章 分布式消息服务中间件 75
7.1 分布式消息服务中间件简介 75
7.2 分布式消息服务中间件的实现原理 77
7.2.1 消息模型 77
7.2.2 架构 77
7.3 其他分布式消息服务中间件 79
7.3.1 阿里巴巴RocketMQ 79
7.3.2 Apache Pulsar 80
7.4 分布式消息服务中间件的应用 82
7.4.1 秒杀系统中使用Kafka以削平峰值流量 83
7.4.2 使用Kafka流实现消息推送 83
第8章 分布式跟踪服务中间件 85
8.1 分布式跟踪服务中间件的实现原理 85
8.2 其他分布式跟踪服务中间件 88
8.2.1 Twitter的Zipkin 88
8.2.2 Pinpoint 90
8.2.3 阿里巴巴的EagleEye 92
8.3 分布式跟踪服务中间件的应用 92
第四部分 分布式存储技术
第9章 分布式文件系统 95
9.1 分布式文件系统的实现原理 96
9.2 其他分布式文件系统 102
9.3 分布式文件系统的应用 104
第10章 基于键值对的NoSQL数据库 107
10.1 NoSQL数据库的CAP权衡 108
10.2 基于键值对的NoSQL数据库的实现原理 108
10.2.1 谷歌的LevelDB 108
10.2.2 阿里巴巴的Tair 111
10.2.3 亚马逊的Dynamo 111
10.3 其他基于键值对的NoSQL数据库 115
10.3.1 Memcached 115
10.3.2 Redis 116
10.3.3 Berkeley DB 117
10.3.4 Facebook RocksDB 117
10.3.5 Riak 118
10.3.6 Voldemort 118
10.4 基于键值对的NoSQL数据库的应用 118
10.4.1 使用Redis缓存会话数据 118
10.4.2 使用Berkeley DB/LevelDB/RocksDB构建自己的分布式存储系统 119
10.4.3 使用Berkeley DB/LevelDB/RocksDB作为本地数据库 119
第11章 基于列的NoSQL数据库 121
11.1 基于列的NoSQL数据库的实现原理 121
11.1.1 数据模型 121
11.1.2 架构 124
11.2 其他基于列的NoSQL数据库 126
11.2.1 Apache HBase 126
11.2.2 Apache Cassandra 127
11.2.3 Baidu Tera 128
11.3 基于列的NoSQL数据库的应用 128
11.3.1 HBase用于数据分析系统 128
11.3.2 HBase用于存储呼叫记录 129
第12章 基于文档的NoSQL数据库 131
12.1 基于文档的NoSQL数据库的实现原理 131
12.1.1 数据模型 131
12.1.2 自动分片 132
12.1.3 副本 132
12.1.4 索引 133
12.1.5 查询路由 133
12.2 其他基于文档的NoSQL数据库 133
12.2.1 CouchDB 133
12.2.2 RethinkDB 134
12.3 基于文档的NoSQL数据库的应用 135
第13章 其他NoSQL数据库 137
13.1 基于图的NoSQL数据库Neo4j 138
13.1.1 数据模型 138
13.1.2 图的存储 138
13.1.3 高可用性 139
13.1.4 水平扩展 139
13.2 多数据模型NoSQL数据库OrientDB 139
13.2.1 基本概念 140
13.2.2 图的表示 140
13.2.3 节点与集群 140
13.2.4 分片 141
13.2.5 ACID支持 141
13.2.6 CAP的权衡 142
13.2.7 集群配置信息的管理 142
13.3 时间序列NoSQL数据库 142
第14章 NewSQL数据库 143
14.1 NewSQL和CAP理论 144
14.2 采用新架构的NewSQL系统 145
14.2.1 谷歌的Megastore 145
14.2.2 谷歌的Spanner 146
14.2.3 谷歌的F1 147
14.2.4 阿里巴巴的OceanBase 148
14.2.5 其他采用新架构的NewSQL数据库 152
第五部分 分布式系统的构建思想
第15章 云化 157
15.1 云化的技术基础 157
15.1.1 虚拟机技术 157
15.1.2 容器技术 159
15.2 公有云能提供什么 159
15.3 云化对软件架构的要求 161
第16章 分布式系统的构建思想 163
16.1 一切都可能失败与冗余的思想 163
16.1.1 如何避免单点故障 164
16.1.2 避免单点故障的具体做法 165
16.2 水平而不是垂直扩展的思想 165
16.2.1 数据的水平扩展 166
16.2.2 服务的水平扩展 167
16.2.3 数据中心的水平扩展 167
16.3 尽可能简单的思想 168
16.4 实用主义的思想 169
16.4.1 搜索引擎作为查询工具使用 169
16.4.2 阿里巴巴的OceanBase的架构 169
16.4.3 根据需要选择最适合的开发工具和开发语言 170
16.4.4 根据需要选择不同的存储系统 170
16.5 异步化以解耦并削平峰值 170
16.6 最终一致性的思想 171
16.7 微服务的思想 171
16.8 MapReduce的思想 172
16.9 服务跟踪的思想 172
16.10 资源池化的思想 173
第六部分 大型分布式系统案例研究及分析
第17章 大型分布式系统案例研究 177
17.1 案例研究之谷歌搜索系统 177
17.2 案例研究之淘宝网 182
17.3 案例研究之阿里云 185
17.4 案例研究之领英 189
第18章 关于分布式系统设计的思考 197
18.1 大型互联网公司架构的共性 197
18.2 为何大型互联网公司的架构如此相似 198
18.3 关于分布式监控系统 199
18.4 Linux系统调用epoll() 200
18.5 关于插件设计模式的实现 201
18.5.1 C/C++语言的动态库形式的实现 202
18.5.2 Java语言的插件模式实现 203
18.5.3 采用专用语言的插件模式实现 205
18.6 关于分布式服务调用中间件的实现 205
18.7 动态链接还是静态链接 206
18.8 无所不用其极的压榨性能手段 206
18.8.1 编译后代码的原生态化 206
18.8.2 定制的Linux内核 207
18.8.3 定制的Java虚拟机 208
18.8.4 定制的MySQL 208
参考文献 209
后记 211
猜您喜欢