分布式系统常用技术及案例分析
  • 推荐2
  • 收藏5
  • 浏览2.9K

分布式系统常用技术及案例分析

柳伟卫 (作者) 

  • 书  号:978-7-121-30771-3
  • 出版日期:2017-02-07
  • 页  数:700
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:陈晓猛
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的常见架构体系,其中也包括最近比较火的RESTful 风格架构、微服务、容器技术等。第二部分主要列举了在分布式系统应用中经常用到的一些主流技术,并介绍这些技术的作用和用法;这些技术涵盖了分布式消息服务、分布式计算、分布式存储、分布式监控系统、分布式版本控制、RESTful、微服务、容器等领域的内容。第三部分选举了以淘宝网和 Twitter 为代表的国内外知名互联网企业的大型分布式系统案例,分析其架构设计以及演变过程;这部分相当于是对第二部分零散的技术点做一个“串烧”,让读者可以结合技术的理论,看到实战的效果。
详细讲解分布式系统的相关技术,适合想了解分布式系统细节的读者阅读
柳伟卫,英文名Way Lau,80后程序员,关注编程、系统架构、性能优化。对技术抱有极大的热情,坚持每天学习。喜欢开源,乐于分享。具有多年软件开发管理及系统架构经验。负责过多个国家级、省级大型分布式系统的设计与研发,也参与过多个大型项目系统架构的技术改造。现为某集团技术公司项目经理,负责大型分布式系统的微服务化改造。
前  言


写作背景
我一直想写一本关于分布式系统方面的书。一方面是想把个人多年工作中涉及的分布式技术做一下总结,另一方面也想把个人的经验分享给广大的读者朋友。由于我的开发工作大都以Java为主,所以一开始的主题设想是“分布式Java”,书也以开源方式发布在互联网上(网址为https://github.com/waylau/distributed-java)。
后来,陈晓猛编辑看到了这本开源书,以及我关于分布式系统方面的博文,问我是否有兴趣出版分布式相关题材的图书。当然书的内容不仅仅是“分布式Java”。
对于出书一事,我犹豫良久。首先,本身工作挺忙,实在无暇顾及其他;其次,虽然我之前写过超过一打的书籍(可见https://waylau.com/books/),但多是开源电子书,时间、内容方面自然也就不会有太多约束,几乎是“想写就写,没有时间就不写”,这个跟正式出版还是存在比较大的差异的;最后,这本书涉及面相对较广,需要查阅大量资料,实在是太耗费精力。
但陈晓猛编辑还是鼓励我能够去尝试做这个事情。思索再三,于是我便答应。当然,最后这本书还是在规定时间内完成了。它几乎耗尽了我写作期间所有的业余和休息时间。
“不积跬步,无以至千里;不积小流,无以成江海。”虽然整本书从构思到编写完成的时间不足一年,但书中的大部分知识点,却是我在多年的学习、工作中积累下来的。之所以能够实现快速写作,一方面是做了比较严格的时间管理,另一方面也得益于我多年坚持写博客和开源书的习惯。
内容介绍
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分为第1章和第2章,主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题。 第二部分为第3章到第8章,主要列举了在分布式系统应用中经常用到的一些主流技术,并介绍这些技术的作用和用法。第三部分为第9章和第10章,选取了以淘宝网和Twitter为代表的国内外知名互联网企业的大型分布式系统案例,分析其架构设计以及演变过程。
第1章介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP理论、安全性和并发等相关内容。
第2章详细介绍分布式系统的架构体系,包括传统的基于对象的体系结构、SOA,也包括最近比较火的RESTful风格架构、微服务、容器技术、Serverless架构等。
第3章介绍常用的分布式消息服务框架,包括Apache ActiveMQ、RabbitMQ、RocketMQ、Apache Kafka等。
第4章介绍分布式计算理论和应用框架方面的内容,包括MapReduce、Apache Hadoop、Apache Spark、Apache Mesos 等。
第5章介绍分布式存储理论和应用框架方面的内容,包括Bigtable、Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。
第6章介绍分布式监控方面常用的技术,包括Nagios、Zabbix、Consul、ZooKeeper等。
第7章介绍常用的分布式版本控制工具,包括Bazaar、Mercurial、Git等。
第8章介绍RESTful API、微服务及容器相关的技术,着重介绍Jersey、Spring Boot、Docker等技术的应用。
第9章和第10章分别介绍以淘宝网和Twitter为代表的国内外知名互联网企业的大型分布式系统案例,分析其架构设计以及演变过程。
源代码
本书提供源代码下载,下载地址为https://github.com/waylau/distributed-systems-technologies- and-cases-analysis。
勘误和交流
本书如有勘误,会在https://github.com/waylau/distributed-systems-technologies-and-cases- analysis上进行发布。由于笔者能力有限,时间仓促,难免错漏,欢迎读者批评指正。读者也可以到博文视点官网的本书页面进行交流(www.broadview.com.cn/30771)。
您也可以直接联系我:
博客:https://waylau.com
邮箱:waylau521@gmail.com
微博:http://weibo.com/waylau521
开源:https://github.com/waylau
致谢
首先,感谢电子工业出版社博文视点公司的陈晓猛编辑,是您鼓励我将本书付诸成册,并在我写作过程中审阅了大量稿件,给予了我很多指导和帮助。感谢工作在幕后的电子工业出版社评审团队对于本书在校对、排版、审核、封面设计、错误改进方面所给予的帮助,使本书得以顺利出版发行。
其次,感谢在我十几年求学生涯中教育过我的所有老师。是你们将知识和学习方法传递给了我。感谢我曾经工作过的公司和单位,感谢和我一起共事过的同事和战友,你们的优秀一直是我追逐的目标,你们所给予的压力正是我不断改进自己的动力。
感谢我的父母、妻子Funny和两个女儿。由于撰写本书,牺牲了很多陪伴家人的时间。感谢你们对于我工作的理解和支持。
最后,特别要感谢这个时代,互联网让所有人可以公平地享受这个时代的成果。感谢那些为计算机、互联网所做出贡献的先驱,是你们让我可以站在更高的“肩膀”上!感谢那些为本书提供灵感的佳作,包括《分布式系统原理与范型》《Unix Network Programming》《Enterprise SOA》《MapReduce Design Patterns》《Hadoop: The Definitive Guide》《Learning Hbase》《Advanced Analytics with Spark》《Pro Git》《Docker in Action》《淘宝技术这十年》《Hatching Twitter》,等等,详细的书单可以参阅本书最后的“参考文献”部分。

柳伟卫
2016年11月13日于杭州

目录

目  录


第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
参考文献 680

本书勘误

印次
  • 页码:v  •  行数:17  •  印次: 1

    《分布式系统原理与范式》应为《分布式系统原理与范型》

    陈晓猛 提交于 2017/2/22 15:13:51
    陈晓猛 确认于 2017/2/22 15:53:51
  • 页码:13  •  行数:4  •  印次: 1

    第5行代码注释中的“设置present的时间值”,应为“设置patience的时间值”

    陈晓猛 提交于 2017/2/22 15:35:10
    陈晓猛 确认于 2017/2/22 15:54:00
  • 页码:47  •  行数:倒数第3行  •  印次: 1

    倒数第1段中的“随意性故障”应为“任意性故障”。

    陈晓猛 提交于 2017/2/22 15:42:43
    陈晓猛 确认于 2017/2/22 15:54:06
  • 页码:79  •  行数:12  •  印次: 1

    “C++”应为小写的“c++”。这里不是指编程语言,而是指变量c的自增操作。

    陈晓猛 提交于 2017/2/22 15:46:26
    陈晓猛 确认于 2017/2/22 15:54:12
  • 页码:84  •  行数:3  •  印次: 1

    “C++”应为小写的“c++”。这里不是指编程语言,而是指变量c的自增操作。

    陈晓猛 提交于 2017/2/22 15:47:29
    陈晓猛 确认于 2017/2/22 15:54:18

读者评论

图书类别

相关博文

  • 用大白话聊聊分布式系统

    柳伟卫 2017-03-06

    原文同步至https://waylau.com/talk-about-distributed-system/ 一提起“分布式系统”,大家的第一感觉就是好高大上啊,深不可测,看各类大牛关于分布式系统的演讲或者书籍,也大多是一脸懵逼。本文期望...

    柳伟卫 2017-03-06
    1097 1 0 0
  • 分布式系统常见的事务处理机制

    柳伟卫 2017-04-14

    原文同步至https://waylau.com/distributed-system-transaction/ 为保障系统的可用性、可靠性以及性能,在分布式系统中,往往会设置数据冗余,即对数据进行复制。举例来说,当一个数据库的副本被破环以...

    柳伟卫 2017-04-14
    209 0 0 0

推荐用户

相关图书

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

架构解密:从分布式到微服务(第2版)

吴治辉 (作者)

微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术...

 

深入理解Apache Dubbo与实战

诣极 林琳 (作者)

本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实...

¥79.00

RabbitMQ实战指南

朱忠华 (作者)

本书从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。本书大致可以分为基础篇、进阶...

¥79.00

Spring Boot 2精髓:从构建小系统到架构分布式大系统

李家智 (作者)

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring ...

¥79.00

架构探险:从零开始写分布式服务框架

李业兵 李业兵 (作者)

分布式服务框架目前已经是互联网公司实现SOA服务化架构的必备基础设施,对于一般的开发而言,自己要独立实现一个分布式服务框架,还是有相当的难度的。本书围绕如何从零...