响应式架构 消息模式Actor实现与Scala.Akka应用集成 高清扫描版

所需积分/C币:8 2018-12-20 11:13:50 61.76MB PDF
16
收藏 收藏
举报

响应式架构 消息模式Actor实现与Scala.Akka应用集成 高清扫描版
内容简介 通过 Actor模型使用响应式消息传输模式,可编写出具有高性能、高响应性、高可伸缩性和高韧性 的并发应用程序。本书由10章构成,详细介绍了使用 Actor模型中的响应式消息传输模式的理论和实用 技巧。其中包括: Actor模型和响应式软件的主要概念、 Scala语言的基础知识、Akka框架与Aka集群功 能、 Actor模型中的通道机制和技术、降低消息源与消息目的地之间耦合性的方式、持久化Acor对象和幂 等接收者。附录A中还介绍了通过NET平台和C#语言使用 Actor模型的方式。 在企业中任职的软件架构师和开发者,以及任何对 Actor模型感兴趣并渴望提高自身技术和价值的软 件开发者,均适合阅读本书。 Authorized translation from the English language edition, entitled Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka, by Vaughn Vernon, published by Pearson Education, Inc publishing as Addison-Wesley Professional, Copyright O 2016 Pearson Education, Inc All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, elec- tronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD, and PUBLISH ING HOUSE OF ELECTRONICS INDUSTRY Copyright C 2016 本书简体中文版专有出版权由 Pearson Education培生教育出版亚洲有限公司授予电子工业出版社。未 出版者预先书面许可,不得以任何方式复制或抄袭本书的任何部分。 本书简体中文版贴有 Pearson Education培生教育出版集团激光防伪标签,无标签者不得销售。 版权贸易合同登记号图字:01-2015-7885 图书在版编目(C|P)数据 响应式架构:消息模式 actor实现与 Scala、Aka应用集成/(美)沃恩·弗农( Vaughn Vernon)著;苏宝龙 译.一北京:电子工业出版社,2016.7 t KrX: Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka ISBN978-7-121-29113-5 I.①响…Ⅱ.①沃…②苏…Ⅲ.①程序语言程序设计Ⅳ.①TP312 中国版本图书馆CIP数据核字(2016)第137490号 策划编辑:张春雨 责任编辑:刘舫 印刷:北京中新伟业印刷有限公司 装订:北京中新伟业印刷有限公司 出版发行:电子工业出版社 北京市海淀区万寿路173信箱邮编:100036 开本:787×9801/16 印张:27.5字数:555千字 版次:2016年7月第1版 印次:2016年7月第1次印刷 定价:990元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联 系,联系及邮购电话:(010)88254888,8825888 质量投诉请发邮件至ts@phei.com.cn,盗版侵权举报请发邮件至dbq@phei.com.cn 本书咨询联系方式:010-5126088819faq@phei.com.cn 推荐序 终于有一本围绕企业应用和架构来讲解 Actor模型和Akka的书了。很期待 这类书的出现,希望能引领 Actor模型开始向企业应用的“回归”。 本书作者 Vaughn Vernon恰好也是《实现领域驱动设计》( Implementing Domain Driven Design)一书的作者,这在某种程度上印证了,近十来年的“领域 驱动设计(DDD)”理想在 Actor模型和Akka上终于找到了现实的技术实现。 DDD希望能在业务领域层面就把模型和逻辑设计清楚(业务模型和逻辑是 最稳定的),并一一对应到实现中。或者说,领域有什么,实现中才应该有,也 应该有。但由于计算机性能限制、语言实现难度等方面的原因,这一理想在现实 中一直没能得到很大程度的实现。 而近二十年来,Java及其生态一直占据着企业应用领域的主导地位。尤其从 20世纪90年代末以来,JEE规范(现在叫 Java ee)也试图围绕业务领域,为 企业应用提供从建模到分层,涵盖事务、持久化、分布式的整套解决方案,并提 出 Entity Bean、 Session bean及 Message Bean等试图对应到业务领域的模型。 遗憾的是,基于当时的技术, Java ee也并没有很好地实现初衷,这在我看 来至少有以下几方面的原因: EJB规范起初的一个主要价值—一对分布式应用进行事务管理,在实践中 几乎很少被使用,反倒引入了整个架构的复杂性。 Entity Bean不能在集群中分片部署,而这本应是分布式系统最需要解决的 问题之 只有 Message Bean是异步的,但它却不是 Entity Bean。这意味着系统很 难在时间维度解耦。 2005年前后, Hibernate、 Spring等技术逐渐兴起,以轻量化的角度切入了企 业应用领域,并在互联网领域异军突起 对于 Spring+ Hibernate的方案,保存在持久层的业务实体的数据/状态 推荐序 需要反复被业务逻辑存取。为了解决这个性能瓶颈,不得不引入 Ehcache、 Memcached、 Redis等中间缓存。这样,在数据扩张时,为了解决这些缓存数据 的分片( sharding)问题,这些缓存方案还需要进一步引入和实现集群分片的支 持,这带来了复杂性。可即便如此,它解决的是缓存数据的分布,而并没有解决 Beans本身的分布。 Beans仍然受限于Bean容器的缓存大小,而不得不经常去中 间缓存甚至持久层要数据。 那么,在企业应用领域, Actor模型能带来更合适的解决范式吗? Carl hewitt在1973年对 Actor模型进行了如下定义:“ Actor模型是一个把 Actor’作为‘并发数字计算的通用原语’的数学理论。”。这个定义跟我常说的 “ Actor是最适合并行计算的最小颗粒”是相通的。 Actor是异步驱动、可以并行和分布式部署及运行的最小颗粒。也即,它可以 被分配、分布、调度到不同的CPU、不同的节点,乃至不同的时间片上运行,而 不影响最终的结果。因此, Actor是在空间(分布式)和时间(异步驱动)上解耦的。 Aka是 Tightend(前身是 Typesafe)公司在JvM上的 Actor模型实现,它 同时是一个可扩展、引入了多种分布式范式的框架。而且,Aka2.3.0开始支持 带状态的 Actors的分片集群,以及根据 journal/ snapshot形式对事件流和状态快照 实施持久化和回放。 Akka的 Actor模式本身可以保证在单个 Actor实例中每个行为的原子性,并 行的粒度可以细化到单个 Actor实例。也即,当行为被封装在一个 Actor实例中时, 该行为不会阻塞其他 Actors实例的行为,从而很难出现整个系统被阻塞的情况。 从EJB角度看, Akka actor提供了什么对应的角色呢? 首先,从各类Bean的角色看。 Akka actor支持持久化,所以有一类 Actor可 以设成“ Entity Bean”; Actor实例可以维护自己的状态,所以它也可以是“ Stateful Session bean”;而不需要关心其状态的 Actor,自然可以担当“ Stateless session Bean”;最后,对 Actor的存取、调用,都是通过异步的消息传递来实现的,因此, 它们都是“ Message bean”。 其次,从架构层面看。 Actor能同时担当实体 Beans和中间缓存的角色,并 且是异步驱动的,且具备分片集群下的水平扩展能力。而 akka-persistent进一步 将持久化、HA一并细粒度地实现了。与 SSHJava ee相比, Actor减少了数据反 复在各种形态(数据库、缓存、业务层中的实体对象实例)间转化的消耗,减少 了线程阻塞的消耗,并提供了一致的并行和分布式机制 再次,从业务领域看。 Actor可以非常自然地直接对应到业务实体。某类 Actor的一个实例可以是一个人、一个物品、一部设备,等等。这些实体 Actor都 VI推荐序 是通过接收命令或者事件,来驱动完成一次状态的变化或者完成一次任务会话 Akka的每个 Actor仍由自己的 scheduler来完成各类定时任务,也可以理解为它 们同时可以由时钟事件来驱动。而一次任务会话也可以抽象为一个会话 Actor的 实例,它跟踪会话的进度、事务状态、发送事件等。 最后,就像前面提到的,对 Actor实例的存取、调用是通过异步的消息传递 来实现的,这带来一种担心:性能代价会不会很高? 这确实是很多年前,采用异步消息驱动来设计、实现系统的架构师、程序员 的最大障碍,因为那时的机器不仅性能有限,多核的物理机制也少见且昂贵,而 且多线程的切换代价高昂。 但对于现在的计算机而言,多核处处可见,CPU的计算能力、线程的调度 和切换能力也有了极大的提高,上面这些问题已经不再是障碍。比如,Akka在 单核的CPU上,每秒可以处理的异步消息数是5000万以上。尤其是,现代JVM 的线程切换时间已经在微秒级,线程切换的代价变得非常小。小到在大量场景下, 釆用异步处理所带来的整体性能和效率的提升已经足够将其代价忽略。 还有一种担心来自:用Akka会引入复杂的架构吗? 从DDD的理念和实践来看,恰恰相反,因为处处都是同样的模型( Actor、 Async Message Driven、 Event Streaming),系统实际上更具一致性和弹性(包括 对需求的弹性)。 这些年,我本人一直在尝试将 Actor模式及Aka用于企业应用,包括证券 交易及计算领域,以及在豌豆荚实现的若干实时系统。实际上最近十年做来做去 无非是同一件事:将现实(直接)映射到计算机体系的 Actor模型。而实践效果 充分验证了,采用异步消息驱动以及小粒度的并行和持久化机制,在性能和内存 的使用上都不是问题。更重要的是,模型及架构与领域的自然对应大大降低了系 统进化和维护的成本。而得益于Aka的集群、高可用及事件溯源( Event- Souring) 的持久化机制,这几个系统也几乎都能无故障地持续运行。运行时间最长的一个, 超过了两年没有重启。 本书的内容是基于Akka234版本的,这个版本包含了Akka框架主要的功 能和实现(包括 sharding和 persistent),非常新且全面。而且作为一个长期从事 企业应用领域的设计和实现的专家,作者非常熟悉在企业业务领域需要用到的知 识和术语以及思维方式,并很好地融入了Akka的实践。 豌豆英资深程序员邓草原 译者序 1965年 Intel的创始人戈登·摩尔发现了摩尔定律,50多年来,计算机的性 能一直遵循摩尔定律迅猛发展:CPU可容纳的晶体管数目,每隔约18个月便会 增加一倍,性能也将提升一倍。如今CPU中晶体管的数量以指数形式增长的迅 猛势头似乎要走到尽头了。而计算机性能的另一要素—CPU主频速度的提高, 早在2003年就开始急剧下降。计算机的性能无法迅猛增长的同时,人们的需求 却仍旧以指数形式增长,供求矛盾日益尖锐。 传统提高CPU性能的技术已经被多核和超线程技术取代。事实证明,硬件 工程师再也不能独自承担提高计算机性能的重任了。当前硬件工程师确实能够设 计出含有288个核心的CPU,但如果该CPU没有被用于运行相应的并发程序, 这个含有288个核心的CPU只能被当作单核CPU使用 该是软件工程师挺身而出勇挑重担的时候了。但是,使用传统的并发技术(如 线程、锁和监控器等)开发软件会遇到许多难以克服的难题。例如,到软件开发 过程的末尾阶段,客户提出增加功能的要求,或者需要对某个(些)功能进行改进, 就不得不重新调整线程的分配和几乎所有并发分支。这些工作量可能不比重新开 发一个新的软件少多少,甚至可能会比开发新的软件更加困难。因此,传统并发 技术注定不能担任当前软件开发工作的主角。开发者们迫切需要的是高级并发编 程技术 Carl hewitt博士早在20世纪70年代初就发明了 Actor模型,这种优秀的高 级并发编程思想超越了 Carl hewitt博士所处的时代。但当时功能最强大的处理器 也无法将该理论付诸实践。直到多核处理器、云计算、移动设备和互联网无处不 在的今天, Actor模型才重新焕发了青春。 Actor模型拥有下列优点: 1.大幅度降低应用程序内部的耦合性。 2. Actor模型的消息传递形式简化了并行程序的开发工作,使开发人员无须 I译者序 与并发编程基础元素打交道。 3.在高动态环境中, Actor模型既可以利用顺序编程技巧,也可以利用函数 编程技巧。 4. Actor模型可以解决许多并发编程难题,如死锁、活锁、互斥体等。 5. Actor模型能够大幅度提高调用方法的安全性和速度 凭借 Actor模型的这些优势,通过响应式消息传输模式,开发者能够开发出 具有高性能、高响应性、高可伸缩性和高韧性的并发应用程序。 本书的作者 Vaughn Vernon是一位资深的软件开发者,并且是一位简化软件 设计和实现思想的领袖人物。他在本书中使用了大量的实践案例,这些范例程 序既有实用性也有启迪性,深入浅出地讲解了使用 Actor模型通过 Scala语言和 Akka框架,编写响应式应用程序的理论和实用技巧。 翻译前沿计算机科学书籍的工作并不轻松,也不是单独一个人能够完成的。 在此我要感谢电子工业出版社计算机出版分社的张春雨等编辑对本书提供的帮 助。此外,石浩、孙顾、徐颖、朱晶晶、沈骏杰、何志颖、许诗怡、马佳妮、尹晓婷」 徐雯、郭盺、陆迎明和孙艳婷等也参与了本书的翻译工作。 因时间仓促,译者水平有限,本书的错漏之处欢迎广大读者朋友们批评指正。 序 20世纪70年代初, Carl hewitt发明了 Actor模型,他超越了自己所处的时代 他通过 Actor概念,定义了一个含有不确定性的计算模型(假设所有计算操作都 是通过异步方式执行的)。该模型使用并发处理模式和有稳定的状态独立处理过 程的概念,全方位地降低了 Actor对象的耦合性,并使之支持分布式和移动架构 当前,软件行业已经跟上了 Carl hewitt的创新思路;多核处理器、云计算、 移动设备和互联网都成为常见的事物。这从根本上改变了软件行业,而且使创建 并发模型和分布式处理基础理论的需求变得更为迫切。我相信 Actor模型能够成 为我们迫切需要的坚实理论基础,使我们能够通过具有响应性、韧性和弹性的响 应式编程原则,创建复杂的分布式系统以应对当前的挑战。这就是我编写Akka 框架的原因:将 Actor模型的强大功能交到普通开发者手中 看到 Vaughn Vernon撰写的这本书我感到非常兴奋。这本书介绍了大家都很 需要了解的知识——将 Actor对象与传统的企业级消息传输系统连接起来,以及 使用 Actor对象创建响应式应用程序的方式。我喜欢这本书仅依赖Akka框架基础 功能(是 Actor模型而不是Aka框架中的高级库)来介绍高级消息传输和通信模 式的方式。即使 Actor模型仅是一种低等级的计算模型,但看到使用它可以通过 简单直观的方式实现功能强大且多样的消息传输模式,确实是一件令人赏心悦目 的事情。一旦你了解了基础的编程思路,就能够向其中添加高级工具和技巧 这本书还介绍了许多形式化和命名模式,这是Aka社区成员通过数年的 研究探索和反复改进获得的成果。这使我回忆起几年前,读到 Gregor Hohpe和 Bobby Woolf撰写的经典著作 Enterprise Integration Patterns[EIP]时的惊喜之情。 我对 Vaughn Vernon能够继承这本经典著作的精髓,并对其做了全新的诠释感到 很高兴。但我认为这本书最重大的贡献在于,它并没有止步于前人探索过的区域, 而是为 Actor对象的消息传输操作定义了一种独特的模式化语言。这使我们能够 X序 使用专业术语来思考、讨论和交流 Actor对象传输消息的模式和编程思路 不论你是初学者还是资深的编程高手,这本书都能够为你提供重要帮助。我 希望你能够和我一样与它成为好朋友。 Jonas boner Aka项目的创始人

...展开详情
试读 127P 响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
响应式架构 消息模式Actor实现与Scala.Akka应用集成 高清扫描版 8积分/C币 立即下载
1/127
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第1页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第2页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第3页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第4页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第5页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第6页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第7页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第8页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第9页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第10页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第11页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第12页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第13页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第14页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第15页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第16页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第17页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第18页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第19页
响应式架构  消息模式Actor实现与Scala.Akka应用集成 高清扫描版第20页

试读结束, 可继续阅读

8积分/C币 立即下载