编辑推荐
Akka是一个分布式计算工具集,支持开发者使用Java以及Scala便捷地构建正确的并发分布式应用程序。用户使用Akka构建的应用程序能够扩展至多台服务器,并能通过自恢复对失效情况做出响应。《Akka入门与实践》旨在对Akka进行系统的介绍。对刚开始使用Akka构建并发分布式应用程序的读者来说,本书将带领大家学习所需的所有概念。本书首先从Actor的概念开始,然后逐步介绍Akka中的并发实现以及网络应用程序的构建。在教授如何使用Akka来解决疑难问题的同时,本书将介绍如何规避其中常见的陷阱。从本书中学到的知识·使用Akka来解决并发编程中遇到的挑战·使用Akka来构建集群,并在多台机器上分配工作·扩展应用程序,使之支持大量并发用户·利用自恢复的应用程序为系统提供容错性·使用事件驱动的方法构建低延迟应用程序·通过高效利用系统资源来减少硬件开销·通过扩展来有效提高网络效率
内容简介
《Akka入门与实践》主要面向使用Akka工具集来构建大规模分布式应用程序的Java和Scala开发者。Akka入门与实践 介绍了分布式系统的基本概念以及如何使用Akka来构建容错性高、可横向扩展的分布式应用程序。《Akka入门与实践》的主要内容包括:Akka工具集、Actor模型、响应式编程、Actor及Future的使用、Akka消息传递模式、Actor生命周期、监督机制、状态与错误处理、Akka并发编程、路由、阻塞IO的处理、Akka Cluster、CAP理论、Akka邮箱问题的处理、Akka Testkit、领域驱动设计等。《Akka入门与实践》贯穿使用了分布式键值存储以及文章解析服务两个实例,将原理与实践结合,介绍了使用Akka设计并实现分布式应用程序的方法。
作者简介
Jason Goodwin,自学成才的开发者,从15岁起就开始学习编程,并且一直对技术保持着浓厚的兴趣。他在mDialog公司初次接触到Akka项目,这家公司zui终被Google收购。他同时还是一名很有影响力的“技术控”,将Akka引入加拿大一家主要的电信公司,帮助该公司为客户提供容错性更高、响应更及时的软件。现在他主要从事大规模分布式系统的开发。在业余时间,他喜欢自己原创电子音乐。译者简介诸豪文,网名clasnake,毕业于清华大学,现为全职软件开发工程师,常用的开发语言有Java、Scala、JavaScript和Python。其个人博客地址为http: clasnake.net。他也是开源项目Swagger的贡献者,并译有《Python网络编程》(第3版)一书。
目录
- 第1章 初识Actor 1
- 1.1 本章概述 1
- 1.2 什么是Akka 1
- 1.2.1 Actor模型的起源 1
- 1.2.2 什么是Actor 2
- 1.2.3 Actor和消息传递 2
- 1.3 本书示例系统 7
- 1.3.1 示例1:处理分布式状态 7
- 1.3.2 示例2:完成更多工作 8
- 1.4 配置环境 8
- 1.4.1 选择一门语言 9
- 1.4.2 安装Java——Oracle JDK8 9
- 1.4.3 确认Java环境配置 10
- 1.4.4 安装Scala 10
- 1.4.5 安装Typesafe Activator 10
- 1.4.6 新建项目 11
- 1.4.7 安装IDE 12
- 1.5 创建第一个Akka应用程序——设置SBT项目 15
- 1.5.1 将Akka添加至build.sbt 16
- 1.5.2 创建第一个Actor 17
- 1.5.3 使用单元测试验证代码 21
- 1.5.4 运行测试用例 24
- 1.6 课后作业 25
- 1.7 小结 26
- 第2章 Actor与并发 27
- 2.1 响应式系统设计 27
- 2.2 响应式四准则 28
- 2.2.1 灵敏性 28
- 2.2.2 伸缩性 28
- 2.2.3 容错性 28
- 2.2.4 事件驱动 消息驱动 28
- 2.2.5 响应式准则的相关性 29
- 2.3 剖析Actor 29
- 2.3.1 Java Actor API 29
- 2.3.2 Scala Actor API 32
- 2.4 Actor的创建 33
- 2.5 Promise、Future和事件驱动的编程模型 36
- 2.5.1 阻塞与事件驱动API 36
- 2.5.2 使用Future进行响应的Actor 40
- 2.5.3 理解Future和Promise 45
- 2.5.4 在失败情况下执行代码 49
- 2.5.5 从失败中恢复 49
- 2.5.6 异步地从失败中恢复 50
- 2.5.7 链式操作 51
- 2.5.8 组合Future 51
- 2.5.9 处理Future列表 52
- 2.5.10 Future速查表 53
- 2.5.11 准备数据库与消息 54
- 2.5.12 编写客户端 59
- 2.6 课后作业 62
- 2.6.1 基本知识 62
- 2.6.2 项目作业 62
- 2.7 小结 63
- 第3章 传递消息 64
- 3.1 示例问题 64
- 3.2 消息传递 65
- 3.2.1 消息是不可变的 66
- 3.2.2 Ask消息模式 69
- 3.2.3 Tell 78
- 3.3 课后作业 88
- 3.4 小结 88
- 第4章 Actor的生命周期——处理状态与错误 90
- 4.1 分布式计算的8个误区 90
- 4.1.1 网络是可靠的 90
- 4.1.2 没有延迟 91
- 4.1.3 带宽是无限的 91
- 4.1.4 网络是安全的 92
- 4.1.5 网络拓扑不会改变 92
- 4.1.6 只有一个管理员 92
- 4.1.7 网络传输没有开销 93
- 4.1.8 网络是同构的 93
- 4.2 错误 93
- 4.2.1 隔离错误 94
- 4.2.2 监督 95
- 4.3 状态 102
- 4.3.1 在线 离线状态 103
- 4.3.2 条件语句 104
- 4.3.3 热交换(Hotswap):Become Unbecome 105
- 4.3.4 通过重启转移状态 113
- 4.4 课后作业 113
- 4.5 小结 114
- 第5章 纵向扩展 115
- 5.1 摩尔定律 115
- 5.2 多核架构的分布式问题 116
- 5.3 选择Future或Actor进行并发编程 117
- 5.4 并行编程 117
- 5.4.1 使用Future进行并行编程 118
- 5.4.2 使用Actor进行并行编程 119
- 5.5 使用Dispatcher 123
- 5.5.1 Dispatcher解析 123
- 5.5.2 Executor 124
- 5.5.3 创建Dispatcher 124
- 5.5.4 决定何时使用哪种Dispatcher 126
- 5.5.5 默认Dispatcher 128
- 5.5.6 使用Future的阻塞IO Dispatcher 130
- 5.5.7 用于解析文章的Dispatcher 132
- 5.5.8 并行最优化 135
- 5.6 课后作业 135
- 5.7 小结 136
- 第6章 横向扩展——集群化 137
- 6.1 Akka Cluster介绍 137
- 6.2 巨型单体应用vs微服务 137
- 6.3 集群的定义 138
- 6.3.1 失败检测 139
- 6.3.2 通过gossip协议达到最终一致性 139
- 6.4 CAP理论 140
- 6.4.1 C ?C一致性(Consistency) 140
- 6.4.2 A ?C可用性(Availability) 140
- 6.4.3 P ?C分区容错性(Partition Tolerance) 140
- 6.4.4 CAP理论中的妥协 141
- 6.5 使用Akka Cluster构建系统 143
- 6.5.1 创建集群 143
- 6.5.2 集群成员的状态 150
- 6.5.3 通过路由向集群发送消息 151
- 6.5.4 编写分布式文章解析服务 151
- 6.5.5 用于集群服务的集群客户端 153
- 6.5.6 集群设计 159
- 6.6 结合分区与冗余 164
- 6.7 远程Actor寻址 166
- 6.8 课后作业 167
- 6.9 小结 167
- 第7章 处理邮箱问题 169
- 7.1 搞垮最可能出问题的服务 169
- 7.1.1 响应时间变长 170
- 7.1.2 崩溃 171
- 7.2 恢复能力 171
- 7.3 在高负载情况下保持响应速度 175
- 7.4 课后作业 181
- 7.5 小结 182
- 第8章 测试与设计 183
- 8.1 示例问题 183
- 8.2 应用程序设计 184
- 8.3 设计、构建并测试领域模型 186
- 8.3.1 行为说明 186
- 8.3.2 设计领域模型 187
- 8.3.3 构建并测试领域模型 188
- 8.3.4 基于行为说明编写代码 190
- 8.4 测试Actor 192
- 8.4.1 测试Actor行为及状态 192
- 8.4.2 测试消息流 195
- 8.5 测试建议 198
- 8.6 课后作业 199
- 8.7 小结 200
- 第9章 尾声 201
- 9.1 其他Akka功能及模块 201
- 9.1.1 Akka中的日志 202
- 9.1.2 消息信道与EventBus 204
- 9.1.3 Agent 206
- 9.1.4 Akka Persistence 209
- 9.1.5 Akka I O 210
- 9.1.6 Akka Streams与HTTP 210
- 9.2 部署工具 210
- 9.3 监控日志与事件 212
- 9.4 下一步 212
- 9.4.1 编写一些Actor代码 213
- 9.4.2 Coursera课程 213
- 9.5 小结 214