新書推薦:
《
危局
》
售價:NT$
383.0
《
穿裙子的士:叶嘉莹传
》
售價:NT$
245.0
《
财富方程式
》
售價:NT$
352.0
《
知识社会史(下卷):从《百科全书》到“在线百科”
》
售價:NT$
454.0
《
我读巴芒:永恒的价值
》
售價:NT$
602.0
《
你漏财了:9种逆向思维算清人生这本账
》
售價:NT$
254.0
《
我们终将老去:认识生命的第二阶段(比利时的“理查德·道金斯”,一位行为生物学家的老年有用论
》
售價:NT$
418.0
《
谁是窃书之人 日本文坛新锐作家深绿野分著 无限流×悬疑×幻想小说
》
售價:NT$
254.0
|
編輯推薦: |
(1)Java技术专家在大量实践后的经验与教训的总结
|
內容簡介: |
本书一共分为10章,全面介绍了Akka的基础架构、Actor模型、常用组件、分布式&集群、微服务等。下面是各个章节的简介及阅读说明。第1章介绍了Akka的技术背景、应用场景及架构体系,为大家日后做技术选型提供参考依据。第2章介绍了Actor的相关概念、常见用法、生命周期、容错处理等。第3章介绍了Dispatcher的用途和常见配置方法。第4章介绍了邮箱的常见类型及配置,同时也给出了一个自定义邮箱类型的简单案例。第5章介绍了消息路由器的基本概念和创建方式(Pool和Group),然后分别演示了几种常见路由策略。第6章介绍了Akka的一些实用工具包,如Future、EventBus等。第7、8章介绍了Akka分布式&集群相关的内容。第9章介绍了如何使用Akka构建HTTP和WebSocket服务,并完整实现了一个图文聊天系统。第10章介绍了一款“全家桶式”的微服务框架Lagom。
|
關於作者: |
杜云飞
Java技术专家,上海小虫科技合伙人兼CTO,在Akka方面有丰富的实践经验。
从事软件开发和架构近10年,擅长Java体系下各项技术,在大型企业软件平台(如制造业ERP、财税云平台、智慧城市服务平台、电商系统等)的开发和架构方面经验丰富。
曾穿梭于各个技术岗位之间,并乐此不彼,期间独立创业近两年。多次受邀为惠普、通用等企业做技术分享、培训和咨询。
|
目錄:
|
Contents目录
前言
第1章 认识Akka1
1.1 Akka简介1
1.1.1 技术背景1
1.1.2 Akka是什么3
1.2 Akka应用场景4
1.3 Akka架构体系4
1.3.1 Actor模型4
1.3.2 体系结构4
1.4 本章小结7
第2章 走进Actor8
2.1 Actor组件8
2.1.1 Akka中的Actor8
2.1.2 ActorSystem与监管9
2.1.3 生命周期监控9
2.1.4 引用与路径10
2.2 Akka环境搭建10
2.2.1 环境准备11
2.2.2 使用Lightbend Activator平台12
2.3 创建一个Actor14
2.3.1 定义Actor14
2.3.2 创建Actor实例14
2.3.3 工厂模式---PropsCreator15
2.4 发送-接收消息16
2.4.1 tell方法16
2.4.2 ask方法17
2.4.3 消息转发18
2.5 查找一个Actor18
2.6 消息不可变21
2.7 Actor行为切换21
2.8 Actor生命周期25
2.9 停掉一个Actor26
2.10 监督与容错处理29
2.11 Circuit Breaker(熔断)33
2.12 配置相关35
2.13 本章小结36
第3章 线程调度38
3.1 什么是Dispatcher?38
3.2 Executor选择39
3.3 配置Dispatcher39
3.4 使用Dispatcher41
3.5 PinnedDispatcher41
3.6 本章小结42
第4章 邮箱43
4.1 消息处理顺序43
4.2 默认邮箱配置44
4.3 内置邮箱45
4.3.1 内置邮箱说明45
4.3.2 自定义优先级45
4.3.3 控制指令优先48
4.4 Actor使用邮箱的多种方式49
4.4.1 配置Actor邮箱49
4.4.2 配置dispatcher邮箱49
4.4.3 实现RequiresMessageQueue接口50
4.5 自定义邮箱类型50
4.6 本章小结52
第5章 消息路由53
5.1 Router和Routee53
5.2 路由器及路由逻辑53
5.3 路由Actor56
5.3.1 Pool方式56
5.3.2 Group方式58
5.4 常见路由类型59
5.4.1 广播-Broadcast60
5.4.2 最快响应-ScatterGatherFirstCompleted61
5.4.3 随机-最快响应-TailChopping62
5.4.4 创建可修改容量的池62
5.5 特殊消息处理63
5.5.1 Broadcast消息64
5.5.2 PoisonPill消息64
5.5.3 其他管理类消息64
5.6 本章小结65
第6章 实用工具67
6.1 定时调度—Scheduler67
6.2 处理并发结果—Future68
6.2.1 Future常规用法68
6.2.2 函数式Future70
6.3 事件总线72
6.3.1 实现事件总线72
6.3.2 事件流处理74
6.4 日志处理75
6.4.1 基础配置76
6.4.2 使用slf4j76
6.5 Akka扩展78
6.5.1 TypedActor初探78
6.5.2 自定义扩展81
6.5.3 集成Spring83
6.6 Akka IO87
6.6.1 TCP服务87
6.6.2 UDP服务90
6.7 Akka Streams91
6.7.1 Streams组件91
6.7.2 组合Source、Sink94
6.7.3 案例:日志处理95
6.7.4 错误处理99
6.7.5 关联Actor101
6.8 本章小结102
第7章 远程103
7.1 远程介绍103
7.1.1 Java RPC103
7.1.2 Akka远程106
7.2 创建远程ActorSystem107
7.3 Actor远程访问108
7.4 创建远程Actor109
7.5 远程路由器110
7.6 远程事件113
7.7 序列化114
7.7.1 Protobuf框架114
7.7.2 序列化API115
7.8 本章小结116
第8章 集群117
8.1 Akka集群概述117
8.1.1 种子节点118
8.1.2 领导节点118
8.1.3 节点状态及生命周期118
8.1.4 故障检测119
8.2 创建Akka集群119
8.2.1 代码及集群配置119
8.2.2 启动集群122
8.2.3 加入集群123
8.2.4 akka-cluster集群工具123
8.3 集群示例—实现文章单词统计125
8.3.1 示例分析125
8.3.2 代码实现127
8.4 使用路由133
8.4.1 Group路由133
8.4.2 Pool路由133
8.5 集群指标136
8.5.1 指标收集136
8.5.2 基于指标的负载均衡138
8.6 集群单例139
8.7 集群客户端140
8.7.1 集群客户端概述140
8.7.2 使用 ClusterClient141
8.7.3 事件监听142
8.8 集群分片143
8.8.1 分片概念143
8.8.2 持久化Actor144
8.8.3 分片示例148
8.9 本章小结155
第9章 HTTP服务156
9.1 HTTP协议156
9.1.1 header信息157
9.1.2 状态码159
9.2 Akka HTTP159
9.2.1 配置依赖159
9.2.2 HTTP服务端160
9.2.3 请求和响应160
9.2.4 HTTP客户端163
9.2.5 使用Routing DSL163
9.2.6 常用Directive165
9.3 Akka WebSocket166
9.3.1 WebSocket协议167
9.3.2 Akka WebSocket167
9.3.3 WebSocket应用之聊天室169
9.4 本章小结176
第10章 微服务全家桶之Lagom177
10.1 Lagom简介177
10.2 Lagom初探178
10.3 搭建Lagom服务181
10.3.1 项目结构181
10.3.2 编写Lagom服务182
10.4 持久化实体186
10.4.1 持久化简介186
10.4.2 PersistentEntity API187
10.4.3 持久化示例187
10.4.4 MySQL支持191
10.5 Lagom部署(SandBox)192
10.5.1 安装ConductR SandBox192
10.5.2 部署Maven项目195
10.6 本章小结199
|
內容試閱:
|
Preface前 言为何写作本书在大力提倡互联网+的今天,人们在PC、手机、Pad上安装了各式各样的软件服务或APP,享受着互联网技术带来的高效和便捷。同时,随着这些产品的高速发展,用户规模急剧扩大,系统承载能力会逐渐达到瓶颈,一些早期不常出现的问题也会慢慢浮出水面。实际上,系统开发者们也越来越重视软件的稳定性、高可用性、可扩展性对用户体验的影响,大家纷纷使出浑身解数,实践出多个构建大型应用所需要的技术架构。在这些架构方案中,有几个词始终不绝于耳,那就是:“高并发”“分布式”“高可用”。
对于很多工程师来讲,这几个词可谓“既爱又恨”。“爱”是因为大家都希望能掌握大型分布式系统架构所涉及的各个知识点。这样,大家在实现产品不断迭代更新,并持续服务好用户的同时,也能够进一步提升自己的技术实力和技术视野,可谓“产品”和“技术”共同成长。“恨”是因为很多产品并没有机会“跑”成大型系统,工程师们也就没有机会去解决大型系统才会出现的可扩展性问题,再加上目前市面上的一些分布式架构解决方案确实都存在不小的门槛,让大家认为任何分布式系统(学习起来)都是如此复杂。从某种程度上,这些都限制了工程师的自我提升。后来,我有幸接触到了一些较大型的系统,也逐渐开始承担起技术选型的工作,以我的经验来看,当你对整个系统架构有一定决策权的时候,就必须考虑你所选的架构是否足够稳定、可控、可依赖,更直白点说,即是否足够“简单”。因为只有简单的东西,才是可控的、低风险的。所以在当时,我所有的技术选型都以“简单”作为出发点,不希望将事情做得更复杂。就在我们打算为某个业务产品实现一套实时数据处理系统时,我接触到了Akka框架,在经过初步的了解后,我们开始尝试搭建Demo工程。最初我们只需要一个足够简单的单机程序,不用考虑太多的可扩展性问题,而Akka在单机上的并发性能也足以支撑我们当时的业务需求。但随着产品不断迭代和更新,数据处理所需要的系统资源突破单机的瓶颈,这时就不得不对其做水平扩展,即分布式&集群。我们发现,使用Akka做这类扩展是如此简单,无论是单机还是分布式,它都提供了统一的编程模型,这正好符合我的“简单”原则。Akka并非大型项目才可以使用,只要场景合适,它可以从“小”用到“大”。所以当你想要学习一门简单够用的分布式并行框架时,可以从Akka开始。
Akka虽然好用,但是在国内的知名度并不高(特别是和Java界的那几座大山相比)。我个人认为,出现这样的情况,可能有两个原因:一是Akka是基于Scala开发的,虽然同为JVM上的语言,也提供了Java API,但是Scala还略显小众(语言本身还是挺棒的),大家接受度不高;二是Akka的中文资料非常匮乏,这让很多工程师学习起来比较吃力,并且在出了问题后,不太容易找到合适的解决方案。我曾有幸被好几家企业邀请做一些这方面的技术咨询和培训,期间和小伙伴儿们一起踩过不少坑,但是总算爬出来了(笑),并且还留下了一些自己做的笔记和资料,所以就想写一本Java版的Akka书籍,也算是为普及Akka框架做点小贡献。再后来,一个偶然的机会认识了机械工业出版社的杨福川老师,了解了书籍出版的相关事宜,在他的鼓励下,我开始走上写书的道路。
写书对我来讲,远比写代码要困难得多。写代码时,我只需要考虑当前业务场景下的功能实现,并且对于技术的运用更多靠的是一种习惯—觉得该这么写,不用考虑“why”,也不用考虑具体的细节。但写书需要更加全面地了解整个框架结构,将零散的知识“点”串成一条“线”,然后连成一个个知识“面”。虽然以前我有记笔记和写博客的习惯,但是要把这些整合成一本书,还是花费了不少精力。另外,写作时间对我来说也是个问题。在决定要写这本书时,我正处于独立创业中,并且刚从上一个项目中抽出身来,时间相对来说比较充裕,所以趁热打铁,很快交出了第一稿。正当我为自己的写作进度感到开心时,一个新的创业机会向我招手了,然后我来到了现在这家公司。加入新公司后,我几乎把所有精力都投入到新产品的研发和管理工作上,所以写书一事也只能暂缓了。在这期间,我一直得到家人、朋友,包括福川老师的支持和鼓励,我对完成本书的愿望也越来越强,所以不敢(也不想)有任何懈怠,一直尽可能挤出空闲时间用于写作。终于,在搭上了多个“不那么忙”的周日后,我完成了本书。
本书特色据我了解,目前国内还没有一本真正意义上的Akka原创书籍,而网上流传的相关资料同质化又比较严重,同时对Java版进行全面介绍的也非常少,这些都对初学者产生了很大干扰。本书以Java版为基础,对Akka的各个知识点都做了较为全面的介绍,并且每个知识点都附带了详细的代码示例,也对配置进行了说明,相信读者朋友们可以很快上手。
本书读者对象Java工程师系统架构师分布式系统爱好者高校师生及IT培训机构相关人员如何阅读本书本书一共分为10章,全面介绍了Akka的基础架构、Actor模型、常用组件、分布式&集群、微服务等。下面是各个章节的简介及阅读说明。
第1章主要介绍了Akka的技术背景、应用场景及架构体系,为大家日后做技术选型提供参考依据。
第2章全面介绍了Actor的相关概念、常见用法、生命周期、容错处理等。Actor可谓Akka最核心的组件,所有其他功能都是围绕它来构建的,所以对其理解越深刻,越有助于后续内容的学习。
第3章介绍了Dispatcher的用途和常见配置方法。对其进行合理配置,可以有效提高系统吞吐率。
第4章介绍了邮箱的常见类型及配置,同时给出了一个自定义邮箱类型的简单案例。
第5章介绍了消息路由器的基本概念和创建方式(Pool和Group),然后分别演示了“广播”“最快响应”等常见路由策略。虽然本章的示例都是基于本地系统的,但实际上它可以无缝切换成远程模式,即在分布式集群环境下(具体会在第7章和第8章进行介绍),路由功能也是完全可用的。
第6章介绍了Akka的一些实用工具包,比较重要的有Future、Event Bus(事件总线)、Akka Streams等。其中Future可以接收Actor的计算结果,并通过多种方式对结果进行处理;事件总线实现了基于发布-订阅的消息流处理,解决了耦合问题;Akka Streams是基于Reactive Streams的一个实现,它提供的“背压”(Back Pressure)机制用于解决大规模数据处理带来的生产和消费速度不均的问题,并以此实现流控。Akka Streams的内容较多且复杂,大家可以通过本章入门,更多详细的内容请参考官方文档。
第7章和第8章主要介绍了Akka分布式&集群相关的内容,如远程Actor、远程路由、事件监听、集群搭建、集群分片、持久化等,相信大家通过书中的示例,可以很快搭建自己的分布式应用。
第9章主要介绍了如何使用Akka构建HTTP和WebSocket服务,并完整实现了一个图文聊天系统。
第10章主要介绍了一款“全家桶式”的微服务框架Lagom,它是基于Akka和Play构建的,提供了一整套微服务解决方案。虽然在Java界已经有了Spring Boot或Spring Cloud这类“既叫好又叫座”的微服务框架,但是大家不妨也看看Lagom,或许能带给你新的思路。
勘误与反馈由于水平有限,写作时间仓促,书中难免会出现一些错误或不准确的地方,还请大家多多批评指正。假如你在阅读本书的过程中,有任何更好的意见或建议,希望能通过微信duyunfeiRoom、邮箱angel6380@126.com与我联系。非常期待得到大家的反馈,多谢!
致谢本书得以顺利出版,首先要感谢机械工业出版社的杨福川老师,正是因为他的信任,才让我能有机会完成本书。由于今年实在太过忙碌,导致中途屡次拖稿,但是每次都能得到福川老师的理解与鼓励,这使我备受感动!同时也感谢我的编辑小艺和李雷鸣,他们在审稿期间给了我很多好的建议,很佩服你们的“火眼金睛”!
另外,也感谢为本书写推荐序的多位技术专家们。平日里,我会经常阅读他们的文章、博客和公众号,也和他们进行过多次交流和讨论,总是受益匪浅,能邀请到他们,是我的荣幸!
写书的过程辛苦且漫长,很感谢家人、朋友的支持与陪伴,你们是我最大的动力!
杜云飞2018年1月于上海
|
|