第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-致性(Consistency) 140
6.4.2 A-可用性(Availability) 140
6.4.3 P-分区容错性(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