| 作者 |
| [美]路易斯·安德烈·巴罗索 (Luiz André Barroso) 乌尔斯·霍尔兹勒(Urs H&ouml lzle) 帕塔萨拉蒂·兰加纳坦(Parthasarathy Ranganathan)[美]克里斯·理查森(Chris Richardson) |
| 丛书名 |
| 数据科学与工程技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782002122123 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------数据中心一体化最佳实践:设计仓储级计算机(原书第3版)--------------------------- 本书将介绍仓储级计算机(WSC)。这种计算平台是云计算的核心,支撑着我们每天都在使用的各种强大的互联网服务。本书讨论了此类新型系统如何将数据中心本身当作一台超大规模仓储级的计算机来使用,同时又能使软硬件充分协同并提供高性能的互联网服务。书中还详细讲述了WSC的架构设计,其中不仅涵盖影响其设计、运行和成本结构的主要因素,还包括相应的基础软件的各种特性。每一章都介绍了多个真实世界的案例,其中包括详尽的分析在线服务的基础设施信息。本书主要面向当今WSC系统的架构师和程序开发人员,希望能为有志于在此重要领域发展的人才打下一个坚实的基础,同时相关的内容也适用于那些仅想了解互联网基础设施信息的人群。 ---------------------------微服务架构设计模式--------------------------- 本书共13章,第1章引入了微服务架构模式语言的概述;第2章解释了为什么软件架构很重要,并描述了可用于将应用程序分解为服务的模式;第3章介绍了微服务架构中强大的进程间通信的几种模式;第4章介绍Saga模式;第5章介绍领域驱动设计(DDD)的聚合和领域事件等模式的使用;第6章介绍如何使用事件溯源模式;第7章介绍如何使用 API 组合模式或命令查询责任隔离(CQRS)模式;第8章介绍外部 API 模式;第9章和第10章介绍微服务自动化测试技术;第11章介绍开发生产就绪服务的各个方面;第12章介绍部署模式;第13章介绍绞杀者模式。 |
| 目录 |
---------------------------数据中心一体化最佳实践:设计仓储级计算机(原书第3版)--------------------------- 译者序 致谢 作者简介 译者简介 第1章 绪论 1 1.1 仓储级计算机 2 1.2 规模化下的成本效益 3 1.3 不仅是服务器的简单堆砌 4 1.4 单个数据中心与多个数据中心 4 1.5 为什么WSC对你至关重要 5 1.6 WSC架构概述 6 1.6.1 服务器 6 1.6.2 存储 7 1.6.3 网络结构 8 1.6.4 建筑与基础设施 9 1.6.5 电力使用 11 1.6.6 故障与维修处理 12 1.7 本书概述 12 第2章 工作负载与基础软件 15 2.1 WSC系统栈 15 2.2 平台层软件 16 2.3 集群层基础软件 17 2.3.1 资源管理 17 2.3.2 集群基础软件 18 2.3.3 应用框架 18 2.4 应用层软件 19 2.4.1 工作负载多样性 19 2.4.2 网页搜索 20 2.4.3 视频服务 22 2.4.4 学术文章相似度搜索 23 2.4.5 机器学习 24 2.5 监控基础设施 27 2.5.1 服务层仪表盘 27 2.5.2 性能诊断工具 27 2.5.3 平台层健康监控 28 2.6 WSC软件的权衡 29 2.6.1 数据中心和台式机 29 2.6.2 性能与可用性工具箱 30 2.6.3 购买还是自建 32 2.6.4 长尾容忍 33 2.6.5 工程师应该知道的延迟数据 33 2.7 云计算 35 2.7.1 面向公有云服务的WSC和对内服务的WSC 36 2.7.2 云原生软件 36 2.8 仓储级信息安全 37 第3章 WSC硬件组件 39 3.1 服务器硬件 39 3.1.1 服务器和机架概述 40 3.1.2 大型SMP通信效率的影响 43 3.1.3 高性能服务器和低性能服务器 45 3.2 计算加速器 48 3.2.1 图形处理器 49 3.2.2 张量处理器 50 3.3 网络 52 3.3.1 集群网络 52 3.3.2 主机网络 56 3.4 存储 57 3.4.1 硬盘托盘与无盘服务器 57 3.4.2 WSC非结构化存储 58 3.4.3 WSC结构化存储 59 3.4.4 存储与网络技术相互作用 60 3.5 平衡的设计 61 3.5.1 系统平衡:存储层次结构 62 3.5.2 量化延迟、带宽及容量 62 第4章 数据中心基础:建筑、电力与冷却 65 4.1 数据中心概述 65 4.1.1 等级分类与规格 65 4.1.2 建筑基础知识 66 4.2 数据中心电力系统 68 4.2.1 不间断电源系统 68 4.2.2 配电单元 69 4.2.3 交流与直流配电架构对比 70 4.3 应用实例:冗余径向配电 71 4.4 应用实例:中压电源层 72 4.5 数据中心冷却系统 74 4.5.1 机房空调系统 76 4.5.2 冷水机组 77 4.5.3 冷却塔 77 4.5.4 自然冷却 79 4.5.5 对气流的考量 79 4.5.6 机架内冷却、行级冷却和液体冷却 81 4.5.7 基于集装箱的数据中心 82 4.6 应用实例:谷歌数据中心顶部冷却系统 84 4.7 本章小结 84 第5章 能耗与能效 85 5.1 数据中心能效 85 5.1.1 PUE指标 86 5.1.2 PUE指标的问题 88 5.1.3 数据中心能效损失来源 89 5.1.4 提升数据中心能效 90 5.1.5 基础设施之外的因素 91 5.2 计算能效 92 5.2.1 能效的测量 92 5.2.2 服务器能效 92 5.2.3 WSC使用画像 93 5.3 能耗成比例计算 95 5.3.1 能耗成比例程度低的原因 96 5.3.2 提升能耗成比例的能力 97 5.3.3 系统其他部分的能耗成比例 98 5.3.4 低功耗模式的相对有效性 99 5.3.5 软件在能耗成比例中的作用 100 5.4 通过专用定制提高能效 103 5.5 数据中心供电 105 5.5.1 部署适量的设备 105 5.5.2 数据中心超额用电 105 5.6 服务器能量使用趋势 107 5.7 本章小结 109 第6章 成本建模 111 6.1 资本成本 111 6.2 运营成本 113 6.3 案例分析 114 6.4 实际数据中心成本 116 6.5 建模部分使用的数据中心 117 6.6 公有云成本 118 第7章 故障处理与维修 119 7.1 软件容错 120 7.2 故障分类 121 7.2.1 故障严重性分级 122 7.2.2 导致服务级故障的原因 123 7.3 机器级故障 124 7.3.1 导致机器级故障的原因 127 7.3.2 故障预测 128 7.4 维修 129 7.5 容错不是隐藏错误 130 7.6 集群系统设计的故障统计 131 第8章 结束语 135 8.1 硬件 136 8.2 软件 137 8.3 经济性与能效 138 8.4 打造响应快速的大规模系统 139 8.4.1 不断演进的工作负载 139 8.4.2 残酷的阿姆达尔定律 139 8.4.3 为微秒级系统优化 140 8.4.4 长尾 140 8.5 展望 141 8.5.1 摩尔定律的终结 141 8.5.2 加速器与全局系统设计 141 8.5.3 软件定义基础设施 142 8.5.4 计算机体系结构和WSC的新纪元 143 8.6 总结 144 参考文献 145 ---------------------------微服务架构设计模式--------------------------- 写给中文版读者的话 译者序 中文版序一 中文版序二 前言 引言 第1章 逃离单体地狱 / 1 1.1 迈向单体地狱的漫长旅程 / 2 1.1.1 FTGO应用程序的架构 / 3 1.1.2 单体架构的好处 / 4 1.1.3 什么是单体地狱 / 4 1.2 为什么本书与你有关 / 7 1.3 你会在本书中学到什么 / 8 1.4 拯救之道:微服务架构 / 8 1.4.1 扩展立方体和服务 / 9 1.4.2 微服务架构作为模块化的一种形式 / 11 1.4.3 每个服务都拥有自己的数据库 / 12 1.4.4 FTGO的微服务架构 / 12 1.4.5 微服务架构与SOA的异同 / 14 1.5 微服务架构的好处和弊端 / 15 1.5.1 微服务架构的好处 / 15 1.5.2 微服务架构的弊端 / 17 1.6 微服务架构的模式语言 / 19 1.6.1 微服务架构并不是“银弹” / 20 1.6.2 模式和模式语言 / 21 1.6.3 微服务架构的模式语言概述 / 24 1.7 微服务之上:流程和组织 / 29 1.7.1 进行软件开发和交付的组织 / 30 1.7.2 进行软件开发和交付的流程 / 31 1.7.3 采用微服务架构时的人为因素 / 32 第2章 服务的拆分策略 / 34 2.1 微服务架构到底是什么 / 35 2.1.1 软件架构是什么,为什么它如此重要 / 35 2.1.2 什么是架构的风格 / 37 2.1.3 微服务架构是一种架构风格 / 40 2.2 为应用程序定义微服务架构 / 43 2.2.1 识别系统操作 / 45 2.2.2 根据业务能力进行服务拆分 / 50 2.2.3 根据子域进行服务拆分 / 53 2.2.4 拆分的指导原则 / 54 2.2.5 拆分单体应用为服务的难点 / 56 2.2.6 定义服务API / 59 第3章 微服务架构中的进程间通信 / 63 3.1 微服务架构中的进程间通信概述 / 64 3.1.1 交互方式 / 64 3.1.2 在微服务架构中定义API / 66 3.1.3 API的演化 / 67 3.1.4 消息的格式 / 69 3.2 基于同步远程过程调用模式的通信 / 70 3.2.1 使用REST / 71 3.2.2 使用gRPC / 74 3.2.3 使用断路器模式处理局部故障 / 75 3.2.4 使用服务发现 / 78 3.3 基于异步消息模式的通信 / 82 3.3.1 什么是消息传递 / 83 3.3.2 使用消息机制实现交互方式 / 84 3.3.3 为基于消息机制的服务API创建API规范 / 86 3.3.4 使用消息代理 / 87 3.3.5 处理并发和消息顺序 / 91 3.3.6 处理重复消息 / 92 3.3.7 事务性消息 / 93 3.3.8 消息相关的类库和框架 / 97 3.4 使用异步消息提高可用性 / 99 3.4.1 同步消息会降低可用性 / 99 3.4.2 消除同步交互 / 101 第4章 使用Saga管理事务 / 106 4.1 微服务架构下的事务管理 / 107 4.1.1 微服务架构对分布式事务的需求 / 108 4.1.2 分布式事务的挑战 / 109 4.1.3 使用Saga模式维护数据一致性 / 109 4.2 Saga的协调模式 / 113 4.2.1 协同式Saga / 113 4.2.2 编排式Saga / 117 4.3 解决隔离问题 / 121 4.3.1 缺乏隔离导致的问题 / 122 4.3.2 Saga模式下实现隔离的对策 / 123 4.4 Order Service和Create Order Saga的设计 / 127 4.4.1 OrderService类 / 128 4.4.2 Create Order Saga的实现 / 129 4.4.3 OrderCommandHandlers类 / 136 4.4.4 OrderServiceConfiguration类 / 138 第5章 微服务架构中的业务逻辑设计 / 141 5.1 业务逻辑组织模式 / 142 5.1.1 使用事务脚本模式设计业务逻辑 / 143 5.1.2 使用领域模型模式设计业务逻辑 / 144 5.1.3 关于领域驱动设计 / 146 5.2 使用聚合模式设计领域模型 / 146 5.2.1 模糊边界所带来的问题 / 147 5.2.2 聚合拥有明确的边界 / 149 5.2.3 聚合的规则 / 150 5.2.4 聚合的颗粒度 / 152 5.2.5 使用聚合设计业务逻辑 / 153 5.3 发布领域事件 / 154 5.3.1 为什么需要发布变更事件 / 154 5.3.2 什么是领域事件 / 155 5.3.3 事件增强 / 155 5.3.4 识别领域事件 / 156 5.3.5 生成和发布领域事件 / 157 5.3.6 消费领域事件 / 161 5.4 Kitchen Service的业务逻辑 / 162 5.5 Order Service的业务逻辑 / 167 5.5.1 Order聚合 / 169 5.5.2 OrderService类 / 173 第6章 使用事件溯源开发业务逻辑 / 176 6.1 使用事件溯源开发业务逻辑概述 / 177 6.1.1 传统持久化技术的问题 / 177 6.1.2 什么是事件溯源 / 179 6.1.3 使用乐观锁处理并发更新 / 186 6.1.4 事件溯源和发布事件 / 186 6.1.5 使用快照提升性能 / 188 6.1.6 幂等方式的消息处理 / 189 6.1.7 领域事件的演化 / 190 6.1.8 事件溯源的好处 / 192 6.1.9 事件溯源的弊端 / 193 6.2 实现事件存储库 / 194 6.2.1 Eventuate Local事件存储库的工作原理 / 195 6.2.2 Eventuate的Java客户端框架 / 198 6.3 同时使用Saga和事件溯源 / 201 6.3.1 使用事件溯源实现协同式Saga / 203 6.3.2 创建编排式Saga / 203 6.3.3 实现基于事件溯源的Saga参与方 / 205 6.3.4 实现基于事件溯源的Saga编排器 / 208 第7章 在微服务架构中实现查询 / 212 7.1 使用API组合模式进行查询 / 213 7.1.1 findOrder()查询操作 / 213 7.1.2 什么是API组合模式 / 214 7.1.3 使用API组合模式实现findOrder()查询操作 / 215 7.1.4 API组合模式的设计缺陷 / 216 7.1.5 API组合模式的好处和弊端 / 219 7.2 使用CQRS模式 / 220 7.2.1 为什么要使用CQRS / 220 7.2.2 什么是CQRS / 223 7.2.3 CQRS的好处 / 226 7.2.4 CQRS的弊端 / 227 7.3 设计CQRS视图 / 228 7.3.1 选择视图存储库 / 229 7.3.2 设计数据访问模块 / 230 7.3.3 添加和更新CQRS视图 / 232 7.4 实现基于AWS DynamoDB的CQRS视图 / 233 7.4.1 OrderHistoryEventHandlers模块 / 234 7.4.2 DynamoDB中的数据建模和查询设计 / 235 7.4.3 OrderHistoryDaoDynamoDb类 / 239 第8章 外部API模式 / 244 8.1 外部API的设计难题 / 245 8.1.1 FTGO移动客户端API的设计难题 / 246 8.1.2 其他类型客户端API的设计难题 / 248 8.2 API Gateway模式 / 250 8.2.1 什么是API Gateway模式 / 250 8.2.2 API Gateway模式的好处和弊端 / 256 8.2.3 以Netflix为例的API Gateway / 257 8.2.4 API Gateway的设计难题 / 258 8.3 实现一个API Gateway / 260 8.3.1 使用现成的API Gateway产品或服务 / 261 8.3.2 开发自己的API Gateway / 262 8.3.3 使用GraphQL实现API Gateway / 269 第9章 微服务架构中的测试策略(上) / 282 9.1 微服务架构中的测试策略概述 / 284 9.1.1 什么是测试 / 284 9.1.2 微服务架构中的测试挑战 / 289 9.1.3 部署流水线 / 295 9.2 为服务编写单元测试 / 296 9.2.1 为实体编写单元测试 / 298 9.2.2 为值对象编写单元测试 / 299 9.2.3 为Saga编写单元测试 / 300 9.2.4 为领域服务编写单元测试 / 302 9.2.5 为控制器编写单元测试 / 303 9.2.6 为事件和消息处理程序编写单元测试 / 305 第10章 微服务架构中的测试策略(下) / 308 10.1 编写集成测试 / 308 10.1.1 针对持久化层的集成测试 / 311 10.1.2 针对基于REST的请求/响应式交互的集成测试 / 312 10.1.3 针对发布/订阅式交互的集成测试 / 316 10.1.4 针对异步请求/响应式交互的集成契约测试 / 320 10.2 编写组件测试 / 324 10.2.1 定义验收测试 / 325 10.2.2 使用Gherkin编写验收测试 / 326 10.2.3 设计组件测试 / 328 10.2.4 为FTGO的Order Service编写组件测试 / 330 10.3 端到端测试 / 334 10.3.1 设计端到端测试 / 335 10.3.2 编写端到端测试 / 335 10.3.3 运行端到端测试 / 336 第11章 开发面向生产环境的微服务应用 / 338 11.1 开发安全的服务 / 339 11.1.1 传统单体应用程序的安全性 / 340 11.1.2 在微服务架构中实现安全性 / 343 11.2 设计可配置的服务 / 349 11.2.1 使用基于推送的外部化配置 / 350 11.2.2 使用基于拉取的外部化配置 / 352 11.3 设计可观测的服务 / 353 11.3.1 使用健康检查API模式 / 355 11.3.2 使用日志聚合模式 / 357 11.3.3 使用分布式追踪模式 / 358 11.3.4 使用应用程序指标模式 / 361 11.3.5 使用异常追踪模式 / 364 11.3.6 使用审计日志模式 / 365 11.4 使用微服务基底模式开发服务 / 367 11.4.1 使用微服务基底 / 368 11.4.2 从微服务基底到服务网格 / 368 第12章 部署微服务应用 / 371 12.1 部署模式:编程语言特定的发布包格式 / 374 12.1.1 使用编程语言特定的发布包格式进行部署的好处 / 376 12.1.2 使用编程语言特定的发布包格式进行部署的弊端 / 377 12.2 部署模式:将服务部署为虚拟机 / 378 12.2.1 将服务部署为虚拟机的好处 / 380 12.2.2 将服务部署为虚拟机的弊端 / 380 12.3 部署模式:将服务部署为容器 / 381 12.3.1 使用Docker部署服务 / 383 12.3.2 将服务部署为容器的好处 / 385 12.3.3 将服务部署为容器的弊端 / 386 12.4 使用Kubernetes部署FTGO应用程序 / 386 12.4.1 什么是Kubernetes / 386 12.4.2 在Kubernetes上部署Restaurant Service / 389 12.4.3 部署API Gateway / 392 12.4.4 零停机部署 / 393 12.4.5 使用服务网格分隔部署与发布流程 / 394 12.5 部署模式:Serverless部署 / 402 12.5.1 使用AWS Lambda进行Serverless部署 / 403 12.5.2 开发Lambda函数 / 404 12.5.3 调用Lambda函数 / 404 12.5.4 使用Lambda函数的好处 / 405 12.5.5 使用Lambda函数的弊端 / 406 12.6 使用AWS Lambda和AWS Gateway部署RESTful服务 / 406 12.6.1 AWS Lambda版本的Restaurant Service / 407 12.6.2 把服务打包为ZIP文件 / 411 12.6.3 使用Serverless框架部署Lambda函数 / 412 第13章 微服务架构的重构策略 / 415 13.1 重构到微服务需要考虑的问题 / 416 13.1.1 为什么要重构单体应用 / 416 13.1.2 绞杀单体应用 / 417 13.2 将单体应用重构为微服务架构的若干策略 / 420 13.2.1 将新功能实现为服务 / 420 13.2.2 隔离表现层与后端 / 422 13.2.3 提取业务能力到服务中 / 423 13.3 设计服务与单体的协作方式 / 429 13.3.1 设计集成胶水 / 430 13.3.2 在服务和单体之间维持数据一致性 / 434 13.3.3 处理身份验证和访问授权 / 438 13.4 将新功能实现为服务:处理错误配送订单 / 440 13.4.1 Delayed Delivery Service的设计 / 441 13.4.2 为Delayed Delivery Service设计集成胶水 / 442 13.5 从单体中提取送餐管理功能 / 444 13.5.1 现有的送餐管理功能 / 444 13.5.2 Delivery Service概览 / 446 13.5.3 设计Delivery Service的领域模型 / 447 13.5.4 Delivery Service集成胶水的设计 / 450 13.5.5 修改FTGO单体使其能够与Delivery Service交互 / 451 |