Akka入门与实践 - (EPUB全文下载)
文件大小:0.25 mb。
文件格式:epub 格式。
书籍内容:
Akka入门与实践
第1章 初识Actor
第2章 Actor与并发
第3章 传递消息
第4章 Actor的生命周期——处理状态与错误
第5章 纵向扩展
第6章 横向扩展——集群化
第7章 处理邮箱问题
第8章 测试与设计
第9章 尾声
欢迎来到异步社区!
第1章 初识Actor
1.1 本章概述
Actor模型是一种并发计算的理论模型,而Akka的核心其实是Actor模型的一种实现。在本章中,我们将通过了解Akka和Actor模型的历史来介绍Akka的核心概念。这会帮助读者更好地理解Akka到底是什么,以及Akka试图要解决什么样的问题。其次,本章中将重复使用同一个例子来阐述本书的目的。
在介绍了上面这些概念后,本章将会把篇幅放在开发环境及工具的配置方法上。我们将配置好机器的环境,集成开发环境(Integrated Development Environment,IDE)并介绍第一个Akka项目(包括该项目的单元测试)。
1.2 什么是Akka
本节将介绍Akka和Actor模型。Akka一词据说来源于瑞典的一座山,我们说到Akka时,通常是指一个分布式工具集,用于协调远程计算资源来进行一些工作。Akka是Actor并发模型的一种现代化实现。现在的Akka可以认为是从许多其他技术发展演化而来的,它借鉴了Erlang的Actor模型实现,同时又引入了许多新特性,帮助构建能够处理如今大规模问题的应用程序。
1.2.1 Actor模型的起源
为了更好地理解Akka的含义及其使用方法,我们将快速地了解Actor模型的历史,理解Actor模型的含义,以及它是如何一步一步发展到如今的Akka这样一个用于构建高容错性分布式系统的框架。
Actor并发模型最早出现于一篇叫作《A Universal Modular Actor Formalism for Artificial Intelligence》的论文,该论文发表于1973年,提出了一种并发计算的理论模型,Actor就源于该模型。我们将在本节中学习Actor模型的特性,理解它的优点,能够在并发计算中帮助我们解决共享状态带来的常见问题。
1.2.2 什么是Actor
首先,让我们来定义什么是Actor。在Actor模型中,Actor是一个并发原语;更简单地说,可以把一个Actor看作是一个工人,就像能够工作或是处理任务的进程和线程一样。把Actor看成是某个机构中拥有特定职位及职责的员工可能会对理解有所帮助。比如说一个寿司餐馆。餐馆的职员需要做各种各样不同的工作,给客人准备餐盘就是其中之一。
1.2.3 Actor和消息传递
在面向对象编程语言中,对象的特点之一就是能够被直接调用:一个对象可以访问或修改另一个对象的属性,也可以直接调用另一个对象的方法。这在只有一个线程进行这些操作时是没有问题的,但是如果多个线程同时读取并修改同一个值,那么可能就需要进行同步并加锁。
Actor和对象的不同之处在于其不能被直接读取、修改或是调用。反之,Actor只能通过消息传递的方式与外界进行通信。简单来说,消息传递指的是一个Actor可以接收消息(在我们的例子中该消息是一个对象),本身可以发送消息,也可以对接收到的消息作出回复。尽管我们可以将这种方式与向某个方法传递参数并接收返回值进行类比,但是消息传递与方法调用在本质上是不同的:消息传递是异步的。无论是处理消息还是回复消息,Actor对外界都没有依赖。
Actor每次只同步处理一个消息。邮箱本质上是等待Actor处理的一个工作队列,如图1-1所示。处理一个消息时,为了能够做出响应,Actor可以修改内部状态,创建更多Actor或是将消息发送给其他Actor。
图1-1
在具体实现中,我们通常使用Actor系统这个术语来表示多个Actor的集合以及所有与该Actor集合相关的东西,包括地址、邮箱以及配置。
下面再重申一下这几个重要的概念:
Actor:一个表示工作节点的并发原语,同步处理接收到的消息。Actor可以保存并修改内部状态。
消息:用于跨进程(比如多个Actor之间)通信的数据。
消息传递:一种软件开发范式,通过传递消息来触发各种行为,而不是直接触发行为。
邮箱地址:消息传递的目标地址,当Actor空闲时会从该地址获取消息进行处理。
邮箱:在Actor处理消息前具体存储消息的地方。可以将其看作是一个消息队列。
Actor系统:多个Actor的集合以及这些Actor的邮箱地址、邮箱和配置等。
虽然现在看来可能还不是太明显,但是Actor模型要比命令式的面向对象并发应用程序容易理解多了。我们可以举一个现实世界中的例子来比喻使用Actor模型来建模的过程,这会帮助我们理解它带来的好处。比如有一个寿司餐馆,其中有3个Actor:客人、服务员以及厨师。
首先,客人向服务员点单。服务员将客人点的菜品写在一张纸条上,然后将这张纸条放在厨师的邮箱中(将纸条贴在厨房的窗户上)。当厨师有空闲的时候,就会获取这条消息(客人点的菜品),然后就开始制作寿司(处理消息),直至寿司制作完成。寿司准备好以后,厨师会发送一条消息(盛放寿司的盘子)到服务员的邮箱(厨房的窗户),等待服务员来获取这条消息。此时厨师可以去处理其他客人的订单。
当服务员有空闲时,就可以从厨房的窗户获取食物的消息(盛放寿司的盘子),然后将其送到客人的邮箱(比如餐桌)。当客人准备好的时候,他们就会处理消息(吃寿司),如图1-2所示。
运用餐厅的运作来理解Actor模型是很容易的。随着越来越多的客人来到餐厅,我们可以想象服务员每次接收一位客人的下单,并将订单交给厨房,接着厨师处理订单制作寿司,最后服务员将寿司交给客人。每个任务都可以并发进行。这就是Actor模型提供的最大好处之一:当每个人各司其职时,使用Actor模型分析并发事件非常容易。而使用Actor模型对真实应用程序的建模过程和本例中对寿司餐厅的建模过程并没有太大差异。
Actor模型的另一个好处就是可以消除共享状态。因为一个Act ............
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » Akka入门与实践 - (EPUB全文下载)