计算机
类型
可以朗读
语音朗读
451千字
字数
2020-08-01
发行日期
展开全部
主编推荐语
全面介绍分布式系统设计原理与实践。
内容简介
本书从原理和实践角度全面介绍如何设计分布式系统。内容包括节点、通信、并发与并行、面向对象的分布式架构、面向服务的分布式架构、面向消息的分布式架构、EST风格的架构、微服务架构、Serverless架构、Cloud Native架构、虚拟化与容器技术、分布式计算、分布式存储、分布式监控、分布式版本控制、数据一致性、分布式事务、安全性、可用性等,内容丰富、案例新颖,相关理论与技术实践较为前瞻。本书最后还提供了一个综合实战案例,手把手教读者如何来基于Spring Cloud技术来实现微服务架构。
目录
- 封面
- 扉页
- 版权信息
- 目录
- 内容提要
- 前言
- 第1章 分布式系统概述
- 1.1 什么是分布式系统
- 1.2 分布式系统常用术语
- 1.3 集中式系统与分布式系统
- 1.4 分布式系统特征
- 1.5 设计分布式系统所面临的挑战
- 1.6 本章小结
- 1.7 习题
- 第2章 节点
- 2.1 什么是线程
- 2.2 进程和线程
- 2.3 线程和纤程
- 2.4 编程语言中的线程对象
- 2.4.1 定义和启动一个线程
- 2.4.2 暂停线程执行
- 2.4.3 中断线程
- 2.4.4 等待另一个线程完成
- 2.5 节点之间的通信
- 2.5.1 消息丢失
- 2.5.2 消息乱序
- 2.5.3 数据错误
- 2.5.4 不可靠的TCP
- 2.6 本章小结
- 2.7 习题
- 第3章 通信
- 3.1 本地过程调用
- 3.1.1 本地过程调用的概念
- 3.1.2 本地过程调用的实现
- 3.2 远程过程调用
- 3.2.1 远程过程调用原理
- 3.2.2 如何实现远程过程调用
- 3.2.3 远程过程调用API
- 3.2.4 远程过程调用发展历程
- 3.3 常用网络I/O模型
- 3.3.1 阻塞I/O模型
- 3.3.2 非阻塞I/O模型
- 3.3.3 I/O复用模型
- 3.3.4 信号驱动I/O模型
- 3.3.5 异步I/O模型
- 3.3.6 几种I/O模型的比较
- 3.4 I/O操作中的常用术语
- 3.4.1 阻塞和非阻塞
- 3.4.2 同步与异步
- 3.4.3 总结
- 3.5 实战:在Java中实现常用网络I/O模型
- 3.5.1 Java OIO
- 3.5.2 Java NIO
- 3.5.3 Java AIO
- 3.6 事件驱动
- 3.6.1 事件驱动编程
- 3.6.2 事件循环的实现
- 3.6.3 Reactor模型
- 3.6.4 Proactor模型
- 3.7 本章小结
- 3.8 习题
- 第4章 并发与并行
- 4.1 并发与并行的区别
- 4.2 线程与并发
- 4.3 并发带来的风险
- 4.3.1 死锁
- 4.3.2 饥饿
- 4.3.3 活锁
- 4.4 解决并发风险
- 4.4.1 同步
- 4.4.2 原子访问
- 4.5 提升系统并发能力
- 4.5.1 无锁化设计提升并发能力
- 4.5.2 缓存提升并发能力
- 4.5.3 更细颗粒度的并发单元
- 4.6 本章小结
- 4.7 习题
- 第5章 面向对象的分布式架构
- 5.1 基于对象的分布式架构
- 5.2 常用的分布式对象系统
- 5.2.1 微软DCOM
- 5.2.2 CORBA
- 5.2.3 Java RMI
- 5.3 分布式对象系统优缺点
- 5.4 实战:基于Java RMI实现分布式对象通信
- 5.4.1 示例概述
- 5.4.2 编写RMI服务器
- 5.4.3 编写RMI客户端
- 5.4.4 运行
- 5.5 本章小结
- 5.6 习题
- 第6章 面向服务的分布式架构
- 6.1 什么是面向服务的架构
- 6.2 SOA的基本概念
- 6.3 基于Web服务的SOA
- 6.3.1 XML-RPC
- 6.3.2 SOAP
- 6.3.3 Microsoft.NET Remoting
- 6.3.4 Java中的XML Web服务
- 6.3.5 超越SOAP
- 6.3.6 SOA的演变
- 6.4 Web服务的分类
- 6.4.1 “大”Web服务
- 6.4.2 RESTful Web服务
- 6.4.3 Web服务技术选型
- 6.5 实战:基于JAX-WS实现Web服务
- 6.5.1 JAX-WS概述
- 6.5.2 创建Web服务器和客户端的基本步骤
- 6.5.3 JAX-WS终端要求
- 6.5.4 创建基于JAX-WS的服务器
- 6.5.5 创建基于JAX-WS的客户端
- 6.5.6 运行
- 6.6 本章小结
- 6.7 习题
- 第7章 面向消息的分布式架构
- 7.1 什么是面向消息的分布式架构
- 7.1.1 常用术语
- 7.1.2 使用场景
- 7.1.3 常用技术
- 7.2 常见消息中间件产品介绍
- 7.2.1 Apache ActiveMQ
- 7.2.2 RabbitMQ
- 7.2.3 Apache RocketMQ
- 7.3 消息通信常用模式
- 7.3.1 工作队列
- 7.3.2 发布/订阅
- 7.3.3 路由
- 7.3.4 主题
- 7.3.5 RPC
- 7.4 了解JMS规范
- 7.4.1 JMS消息风格
- 7.4.2 JMS接口
- 7.5 实战:基于JMS的消息发送和接收
- 7.5.1 项目概述
- 7.5.2 项目配置
- 7.5.3 编码实现
- 7.5.4 运行
- 7.6 本章小结
- 7.7 习题
- 第8章 REST风格的架构
- 8.1 什么是REST
- 8.2 REST设计原则
- 8.3 成熟度模型
- 8.3.1 第0级:使用HTTP作为传输方式
- 8.3.2 第1级:引入了资源的概念
- 8.3.3 第2级:根据语义使用HTTP动词
- 8.3.4 第3级:使用HATEOAS
- 8.4 REST API管理
- 8.5 常用技术
- 8.5.1 JAX-RS规范
- 8.5.2 Jersey
- 8.5.3 Apache CXF
- 8.5.4 Spring Web MVC
- 8.6 实战:基于Java实现REST API
- 8.6.1 基于Jersey来构建REST服务
- 8.6.2 基于Apache CXF来构建REST服务
- 8.6.3 基于Spring Web MVC来构建REST服务
- 8.7 本章小结
- 8.8 习题
- 第9章 微服务架构
- 9.1 什么是微服务架构
- 9.2 微服务架构与SOA架构的区别
- 9.2.1 单体架构的例子
- 9.2.2 微服务架构的例子
- 9.3 何时采用微服务架构
- 9.4 常用技术
- 9.4.1 Jetty HTTP Server
- 9.4.2 构建REST程序
- 9.4.3 运行
- 9.5 实战:基于Spring Boot实现微服务
- 9.5.1 配置环境
- 9.5.2 REST API设计
- 9.5.3 编写程序代码
- 9.5.4 安装REST客户端
- 9.5.5 运行、测试程序
- 9.6 微服务与通信
- 9.6.1 HTTP通信
- 9.6.2 消息通信
- 9.6.3 事件驱动的通信
- 9.7 了解CQRS
- 9.7.1 CQRS概述
- 9.7.2 CQRS与Event Sourcing的关系
- 9.7.3 CQRS好处
- 9.8 实战:基于CQRS微服务通信
- 9.8.1 配置
- 9.8.2 Aggregate
- 9.8.3 Command
- 9.8.4 Event
- 9.8.5 测试
- 9.9 本章小结
- 9.10 习题
- 第10章 Serverless架构
- 10.1 什么是Serverless架构
- 10.2 Serverless架构的典型应用
- 10.2.1 UI驱动的应用
- 10.2.2 消息驱动的应用
- 10.3 常见的Serverless架构
- 10.3.1 AWS Lambda
- 10.3.2 Google Cloud Functions
- 10.3.3 Iron.io
- 10.3.4 IBM OpenWhisk
- 10.3.5 Serverless Framework
- 10.3.6 Azure WebJobs
- 10.4 Serverless架构原则
- 10.4.1 根据需要使用计算服务执行代码
- 10.4.2 编写单一用途的无状态函数
- 10.4.3 设计基于推送的、事件驱动的管道
- 10.4.4 创建更粗实、更强大的前端
- 10.4.5 拥抱第三方服务
- 10.5 实战:使用AWS平台实现Serverless架构
- 10.6 本章小结
- 10.7 习题
- 第11章 Cloud Native架构
- 11.1 Cloud Native概述
- 11.1.1 软件需求的发展
- 11.1.2 开发方式的巨变
- 11.1.3 云是大势所趋
- 11.2 Cloud Native特性
- 11.2.1 以云为基础架构
- 11.2.2 云服务
- 11.2.3 无服务
- 11.2.4 可扩展
- 11.2.5 高可用
- 11.2.6 敏捷
- 11.2.7 云优先
- 11.3 12-Factor
- 11.3.1 基准代码
- 11.3.2 依赖
- 11.3.3 配置
- 11.3.4 后端服务
- 11.3.5 构建、发布、运行
- 11.3.6 进程
- 11.3.7 端口绑定
- 11.3.8 并发
- 11.3.9 易处理
- 11.3.10 开发环境与线上环境等价
- 11.3.11 日志
- 11.3.12 管理进程
- 11.4 Cloud Native成功案例分析
- 11.4.1 Amazon
- 11.4.2 Netflix
- 11.4.3 淘宝网
- 11.5 Cloud Native与微服务架构的关系
- 11.6 Cloud Native与Serverless架构的关系
- 11.7 Cloud Native的优点及面临的挑战
- 11.7.1 Cloud Native优点
- 11.7.2 Cloud Native不是“银弹”
- 11.7.3 面临的挑战
- 11.8 本章小结
- 11.9 习题
- 第12章 虚拟化与容器技术
- 12.1 虚拟化技术
- 12.2 容器与虚拟机
- 12.2.1 成熟度方面的比较
- 12.2.2 启动速度的比较
- 12.2.3 安全方面的比较
- 12.2.4 性能方面的比较
- 12.3 基于容器的持续部署
- 12.3.1 持续部署管道
- 12.3.2 测试
- 12.3.3 构建
- 12.3.4 部署
- 12.3.5 蓝-绿部署
- 12.3.6 运行预集成以及集成后测试
- 12.3.7 回滚与清理
- 12.3.8 决定每个步骤的执行环境
- 12.3.9 完成整个持续部署流
- 12.4 容器技术与微服务架构
- 12.4.1 基于Google Kubernetes架构
- 12.4.2 基于DaoCloud DCE架构
- 12.5 容器技术与Cloud Native架构
- 12.6 实战:基于Docker发布微服务
- 12.6.1 创建微服务
- 12.6.2 微服务容器化
- 12.6.3 使用Gradle来构建Docker image
- 12.6.4 运行image
- 12.6.5 访问应用
- 12.6.6 关闭容器
- 12.6.7 Docker发布微服务
- 12.7 本章小结
- 12.8 习题
- 第13章 分布式计算
- 13.1 分布式计算概述
- 13.2 分布式计算应用场景
- 13.3 分布式计算常用技术
- 13.3.1 MapReduce
- 13.3.2 Apache Hadoop
- 13.3.3 Apache Spark
- 13.4 实战:基于Spark词频统计
- 13.4.1 项目概述
- 13.4.2 项目配置
- 13.4.3 编码实现
- 13.4.4 运行
- 13.5 本章小结
- 13.6 习题
- 第14章 分布式存储
- 14.1 分布式存储概述
- 14.2 分布式存储应用场景
- 14.3 分布式存储常用技术
- 14.3.1 Bigtable
- 14.3.2 Apache HBase
- 14.3.3 Apache Cassandra
- 14.3.4 Memcached
- 14.3.5 Redis
- 14.3.6 MongoDB
- 14.4 实战:基于MongoDB文件服务器
- 14.4.1 文件服务器的需求
- 14.4.2 所需技术
- 14.4.3 文件服务器的实现
- 14.4.4 运行
- 14.4.5 其他配置项
- 14.5 本章小结
- 14.6 习题
- 第15章 分布式监控
- 15.1 分布式监控概述
- 15.2 分布式监控应用场景
- 15.3 分布式监控常用技术
- 15.3.1 Nagios
- 15.3.2 Zabbix
- 15.3.3 Consul
- 15.3.4 ZooKeeper
- 15.4 实战:基于ZooKeeper的服务注册和发现
- 15.4.1 项目概述
- 15.4.2 项目配置
- 15.4.3 编码实现
- 15.4.4 运行
- 15.5 本章小结
- 15.6 习题
- 第16章 分布式版本控制
- 16.1 版本控制系统简史
- 16.2 集中式与分布式版本控制系统
- 16.3 常用技术
- 16.3.1 Bazaar
- 16.3.2 Mercurial
- 16.3.3 Git
- 16.4 了解Git Flow
- 16.4.1 分支定义
- 16.4.2 新功能开发工作流
- 16.4.3 Bug修复工作流
- 16.4.4 版本发布工作流
- 16.5 本章小结
- 16.6 习题
- 第17章 数据一致性
- 17.1 什么是CAP理论
- 17.2 为什么CAP只能三选二
- 17.3 CAP常见模型
- 17.3.1 牺牲分区容错性(CA模型)
- 17.3.2 牺牲可用性(CP模型)
- 17.3.3 牺牲一致性(AP模型)
- 17.4 CAP的意义及发展
- 17.4.1 CAP最新发展
- 17.4.2 BASE
- 17.5 以数据为中心的一致性模型
- 17.5.1 严格一致性
- 17.5.2 持续一致性
- 17.5.3 顺序一致性
- 17.5.4 因果一致性
- 17.5.5 入口一致性
- 17.6 以客户为中心的一致性模型
- 17.6.1 单调读一致性
- 17.6.2 单调写一致性
- 17.6.3 读写一致性
- 17.6.4 写读一致性
- 17.7 本章小结
- 17.8 习题
- 第18章 分布式事务
- 18.1 本地事务
- 18.1.1 一个银行转账的例子
- 18.1.2 事务隔离级别
- 18.2 分布式事务面临的挑战
- 18.3 节点复制
- 18.3.1 Master-Slave复制
- 18.3.2 Master-Master多主复制
- 18.4 两阶段提交
- 18.4.1 准备阶段
- 18.4.2 提交阶段
- 18.4.3 两阶段提交状态机
- 18.4.4 两阶段提交的缺陷
- 18.5 三阶段提交
- 18.5.1 CanCommit
- 18.5.2 PreCommit
- 18.5.3 DoCommit
- 18.5.4 三阶段提交状态机
- 18.5.5 三阶段提交的缺陷
- 18.6 Paxos算法
- 18.6.1 问题描述
- 18.6.2 提案的选定
- 18.6.3 获取被选定的提案值
- 18.6.4 进展性
- 18.6.5 实现
- 18.6.6 总结
- 18.6.7 缺陷
- 18.7 Raft算法
- 18.7.1 Raft概述
- 18.7.2 复制状态机
- 18.7.3 Raft算法基础
- 18.7.4 Raft算法Leader选举
- 18.7.5 Raft算法日志同步
- 18.7.6 Raft算法安全性
- 18.7.7 处理Follower和Candidate异常
- 18.7.8 时间要求及可用性
- 18.7.9 集群成员关系变更
- 18.7.10 日志压缩
- 18.7.11 客户端交互
- 18.7.12 总结
- 18.8 消息
- 18.8.1 本地消息表
- 18.8.2 事务消息
- 18.8.3 如何保障幂等性
- 18.8.4 总结
- 18.9 本章小结
- 18.10 习题
- 第19章 安全性
- 19.1 基本概念
- 19.1.1 安全威胁、策略和机制
- 19.1.2 密码与数字签名
- 19.2 加密算法
- 19.2.1 对称加密
- 19.2.2 使用对称密钥加密的数字签名
- 19.2.3 非对称加密
- 19.2.4 使用公钥加密的数字签名
- 19.3 安全通道
- 19.3.1 SSL/TLS
- 19.3.2 SSL握手过程
- 19.3.3 HTTPS
- 19.4 访问控制
- 19.4.1 防火墙
- 19.4.2 堡垒机
- 19.4.3 拒绝服务
- 19.4.4 访问控制的模型
- 19.5 实战:基于Spring Security实现安全认证
- 19.5.1 添加依赖
- 19.5.2 添加业务代码
- 19.5.3 配置消息转换器
- 19.5.4 配置Spring Security
- 19.5.5 创建应用配置类
- 19.5.6 创建内嵌Jetty的服务器
- 19.5.7 应用启动器
- 19.5.8 运行应用
- 19.6 本章小结
- 19.7 习题
- 第20章 可用性
- 20.1 故障不可避免
- 20.2 使用冗余提升系统可用性
- 20.3 常用副本控制协议
- 20.3.1 中心化副本控制协议
- 20.3.2 primary-secondary协议
- 20.3.3 去中心化副本控制协议
- 20.4 负载均衡技术
- 20.4.1 客户端发现模式
- 20.4.2 服务端发现模式
- 20.5 实战:基于NGINX实现服务高可用
- 20.5.1 配置负载均衡
- 20.5.2 负载均衡常用算法
- 20.5.3 实现Web服务的高可用
- 20.5.4 运行
- 20.6 本章小结
- 20.7 习题
- 第21章 综合实战:基于Spring Cloud的微服务架构设计与实现
- 21.1 Spring Cloud概述
- 21.1.1 什么是Spring Cloud
- 21.1.2 Spring Cloud与Spring Boot的关系
- 21.2 Spring Cloud入门配置
- 21.2.1 Maven配置
- 21.2.2 Gradle配置
- 21.2.3 声明式方法
- 21.3 Spring Cloud的子项目介绍
- 21.3.1 Spring Cloud子项目的组成
- 21.3.2 Spring Cloud组件的版本
- 21.4 实现微服务的注册与发现
- 21.4.1 服务发现的意义
- 21.4.2 如何集成Eureka Server
- 21.4.3 如何集成Eureka Client
- 21.4.4 实现服务的注册与发现
- 21.5 本章小结
- 21.6 习题
- 附录 本书所涉及的软件及相关版本
- 参考文献
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。