内容简介
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的常见架构体系,其中也包括近比较火的RESTful 风格架构、微服务、容器技术等。第二部分主要列举了在分布式系统应用中经常用到的一些主流技术,并介绍这些技术的作用和用法;这些技术涵盖了分布式消息服务、分布式计算、分布式存储、分布式监控系统、分布式版本控制、RESTful、微服务、容器等领域的内容。第三部分选举了以*网和 Twitter 为代表的国内外知名互联网企业的大型分布式系统案例,分析其架构设计以及演变过程;这部分相当于是对第二部分零散的技术点做一个“串烧”,让读者可以结合技术的理论,看到实战的效果。
作者简介
多年软件开发管理及系统架构经验。负责过多个省、*大型分布式系统的设计与研发,也负责过多个大型项目的微服务架构的技术改造,在实际工作中,积累了大量的微服务架构经验。
目 录
第1章 分布式系统基础知识 1
1.1 概述 2
1.1.1 什么是分布式系统 2
1.1.2 集中式系统VS.分布式系统 3
1.1.3 如何设计分布式系统 4
1.1.4 分布式系统所面临的挑战 5
1.2 线程 6
1.2.1 什么是线程 6
1.2.2 进程和线程 7
1.2.3 编程语言中的线程对象 8
1.2.4 SimpleThreads示例 11
1.3 通信 14
1.3.1 网络基础知识 14
1.3.2 网络I/O模型的演进 19
1.3.3 远程过程调用(RPC) 33
1.3.4 面向消息的通信 41
1.4 一致性 43
1.4.1 以数据为中心的一致性模型 44
1.4.2 以客户为中心的一致性 45
1.5 容错性 46
1.5.1 基本概念 46
1.5.2 故障分类 47
1.5.3 使用冗余来掩盖故障 48
1.5.4 分布式提交 48
1.6 CAP理论 52
1.6.1 什么是CAP理论 52
1.6.2 为什么说CAP只能三选二 53
1.6.3 CAP常见模型 55
1.6.4 CAP的意义 56
1.6.5 CAP最新发展 56
1.7 安全性 57
1.7.1 基本概念 58
1.7.2 加密算法 60
1.7.3 安全通道 63
1.7.4 访问控制 72
1.8 并发 74
1.8.1 线程与并发 75
1.8.2 并发与并行 75
1.8.3 并发带来的风险 76
1.8.4 同步(Synchronization) 78
1.8.5 原子访问(Atomic Access) 83
第2章 分布式系统架构体系 85
2.1 基于对象的体系结构 86
2.1.1 分布式对象 86
2.1.2 微软DCOM(COM+) 87
2.1.3 CORBA 88
2.1.4 Java RMI 90
2.2 面向服务的架构(SOA) 93
2.2.1 架构VS.标准 94
2.2.2 SOA的基本概念 95
2.2.3 基于Web Services的SOA 97
2.2.4 SOA的演变 112
2.3 REST风格的架构 112
2.3.1 什么是REST 112
2.3.2 REST有哪些特征 113
2.3.3 Java实现REST的例子 115
2.3.4 REST API最佳实践 125
2.4 微服务架构(MSA) 128
2.4.1 什么是MSA 128
2.4.2 MSA VS. SOA 130
2.4.3 何时采用MSA 134
2.4.4 如何构建微服务 135
2.5 容器技术 139
2.5.1 虚拟化技术 139
2.5.2 容器VS.虚拟机 139
2.5.3 基于容器的持续部署 142
2.6 Serverless架构 149
2.6.1 什么是Serverless架构 150
2.6.2 Serverless典型的应用场景 151
2.6.3 常见的Serverless框架 153
2.6.4 Serverless架构原则 155
2.6.5 例子:使用Serverless实现游戏全球同服 157
第3章 分布式消息服务 164
3.1 Apache ActiveMQ 165
3.1.1 Apache ActiveMQ简介 165
3.1.2 Apache ActiveMQ安装配置 166
3.1.3 例子:producer-consumer 173
3.1.4 例子:使用JMX来监控ActiveMQ 174
3.1.5 例子:使用Java实现producer-consumer 176
3.2 RabbitMQ 180
3.2.1 RabbitMQ简介 180
3.2.2 RabbitMQ安装配置 181
3.2.3 例子:Work Queues 185
3.2.4 例子:Publish/Subscribe 191
3.2.5 例子:Routing 195
3.2.6 例子:Topics 200
3.2.7 例子:RPC 204
3.3 RocketMQ 210
3.3.1 RocketMQ简介 210
3.3.2 RocketMQ安装配置 213
3.3.3 例子:使用Java实现producer-consumer 214
3.3.4 RocketMQ最佳实践 219
3.4 Apache Kafka 223
3.4.1 Apache Kafka简介 224
3.4.2 Apache Kafka的核心概念 225
3.4.3 Apache Kafka的使用场景 228
3.4.4 Apache Kafka的安装、配置、使用 229
第4章 分布式计算 236
4.1 MapReduce 237
4.1.1 MapReduce简介 237
4.1.2 MapReduce的编程模型 238
4.1.3 MapReduce的实现 243
4.1.4 MapReduce的使用技巧 248
4.2 Apache Hadoop 251
4.2.1 Apache Hadoop简介 252
4.2.2 Apache Hadoop核心组件 253
4.2.3 Apache Hadoop单节点上的安装配置 254
4.2.4 Apache Hadoop集群上的安装配置 258
4.2.5 例子:词频统计WordCount程序 267
4.3 Apache Spark 272
4.3.1 Apache Spark简介 272
4.3.2 Apache Spark与Apache Hadoop的关系 274
4.3.3 Apache Spark 2.0的新特性 275
4.3.4 Apache Spark的安装和使用 279
4.3.5 Apache Spark集群模式 280
4.4 Apache Mesos 282
4.4.1 Apache Mesos简介 283
4.4.2 Apache Mesos的安装、使用 285
4.4.3 设计高可用的Mesos framework 289
第5章 分布式存储 296
5.1 Bigtable 297
5.1.1 Bigtable简介 297
5.1.2 Bigtable的数据模型 298
5.1.3 Bigtable的实现 300
5.1.4 Bigtable的性能优化 304
5.2 Apache HBase 308
5.2.1 Apache HBase简介 308
5.2.2 Apache HBase基本概念 310
5.2.3 Apache HBase架构 318
5.2.4 Apache HBase的安装、配置、使用 332
5.2.5 本地伪分布式 336
5.2.6 完全分布式 338
5.3 Apache Cassandra 342
5.3.1 Apache Cassandra简介 342
5.3.2 Apache Cassandra的应用场景 345
5.3.3 Apache Cassandra的架构、数据模型 346
5.3.4 用于配置Apache Cassandra的核心组件 347
5.3.5 Apache Cassandra的安装、配置、使用 349
5.4 Memcached 352
5.4.1 Memcached简介 352
5.4.2 Memcached的架构 353
5.4.3 Memcached的安装、使用 355
5.4.4 Memcached客户端 358
5.5 Redis 370
5.5.1 Redis简介 370
5.5.2 Redis的下载、安装、使用 372
5.5.3 Redis的数据类型及抽象 372
5.6 MongoDB 392
5.6.1 MongoDB简介 392
5.6.2 MongoDB的安装、配置、运行 394
5.6.3 MongoDB核心概念 401
5.6.4 MongoDB的数据模型 406
5.6.5 示例:Java连接MongoDB 420
第6章 分布式监控 422
6.1 Nagios 423
6.1.1 Nagios简介 423
6.1.2 Nagios的安装、使用 424
6.1.3 Nagios监控 428
6.1.4 Nagios插件 446
6.2 Zabbix 448
6.2.1 Zabbix简介 449
6.2.2 安装Zabbix 451
6.2.3 Zabbix对于容器的支持 460
6.2.4 Zabbix基本概念 463
6.3 Consul 474
6.3.1 Consul简介 475
6.3.2 Consul架构 476
6.3.3 Consul的安装和使用 478
6.3.4 Consul agent 492
6.4 ZooKeeper 501
6.4.1 ZooKeeper简介 501
6.4.2 ZooKeeper的安装和使用 505
6.4.3 ZooKeeper内部工作原理 509
6.4.4 例子:ZooKeeper实现barrier和producer-consumer queue 514
第7章 分布式版本控制系统 522
7.1 Bazaar 523
7.1.1 Bazaar简介 523
7.1.2 Bazaar的核心概念 525
7.1.3 Bazaar的安装 526
7.1.4 Bazaar的使用 528
7.2 Mercurial 533
7.2.1 Mercurial简介 533
7.2.2 Mercurial的核心概念 533
7.2.3 Mercurial的安装 537
7.2.4 Mercurial的使用 538
7.3 Git 545
7.3.1 Git简介 545
7.3.2 Git的安装 546
7.3.3 Git的基础概念 548
7.3.4 Git的使用 551
第8章 RESTful API、微服务及容器技术 578
8.1 Jersey 579
8.1.1 Jersey简介 579
8.1.2 Jersey的模块和依赖 580
8.1.3 JAX-RS核心概念 583
8.1.4 例子:用SSE构建实时Web应用 595
8.2 Spring Boot 603
8.2.1 Spring Boot简介 603
8.2.2 Spring Boot的安装 604
8.2.3 Spring Boot的使用 610
8.2.4 Spring Boot的属性与配置 615
8.3 Docker 620
8.3.1 Docker简介 621
8.3.2 Docker的特性 621
8.3.3 Docker的概念和原理 622
8.3.4 Docker Engine的安装 628
8.3.5 Docker的使用 633
第9章 淘宝网:“双11”神话的缔造者 636
9.1 从LAMP到Java平台的转变 637
9.1.1 淘宝网的诞生与发展 637
9.1.2 “平民英雄”LAMP架构 638
9.1.3 数据库更改为Oracle 639
9.1.4 向Java平台转变 642
9.2 坚定不移地走“去IOE”的道路 643
9.2.1 使用小型机、EMC存储 644
9.2.2 考虑“去IOE” 644
9.2.3 如何去“I” 646
9.2.4 如何去“O” 649
9.2.5 如何去“E” 650
9.3 打造云计算,决战“双11” 653
9.3.1 “大淘宝”战略简介 653
9.3.2 成立阿里云,专注云计算 656
9.3.3 利用大数据优化物流 660
9.3.4 技术是决胜“双11”的关键 661
第10章 Twitter:实时信息传递的王者 664
10.1 缓存,让响应更快 665
10.1.1 Twitter的诞生 665
10.1.2 RoR的蛮荒时代 666
10.1.3 使用Memcached 667
10.2 服务拆分与治理 668
10.2.1 关系数据库不是万灵药 668
10.2.2 系统拆分,平台转换 670
10.2.3 Finagle 670
10.3 抗击流量的洪流 672
10.3.1 业务的重新设计 673
10.3.2 Storm处理实时的大数据 675
10.3.3 从Storm到Heron 676
名词解释
IOE:IBM是服务器提供商,Oracle是数据库软件提供商,EMC则是存储设备提供商,三者构成了一个从软件到硬件的企业数据库系统。