天天看点

Akka——并发、分布式软件开发工具

"IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 

导Lead语直到90年代中期,互联网革命之前,编写只在一台计算机,单个CPU上运行的程序是十分正常的。如果程序不够快,那标准的反应就是等CPU变得更快,而不会改变任何代码如果程序需要执行的更快,或者需要支持更多的用户,则必须是并发的。Akka是目前最著名和通用的并发、分布式软件开发工具。

01什么是Akka?

Akka是一个由Lightbend构建的开源项目,它提供了一种简单的、单一编程模型——并发和分布式应用的一种编程方式——Actor编程模型,它能够保证在应用程序扩展中高效的利用资源,并保持相对较低的复杂性。

Akka的主要目标是,使部署在云端的应用,或者运行在多核设备上的应用程序的开发变得简单,而且充分利用计算资源。它是构建可扩展应用的工具,提供了Actor编程模型、运行环境和所需的支持工具。

02Akka Actor

Akka Actor是为了并发而设计的一种模型。简单地说,Actor好像消息队列,但不需要额外配置和安装消息代理。它们就像微缩版的可编程消息队列——可以很容易的创建几千个甚至几百万个Actor。Actor每次接收一条消息,并执行某些行为。Actor的执行是异步的,可以向一个Actor发送消息并不需要等待它的响应。Actor和线程不同,但在某些时间点上,发送给它们的消息被推送给线程。消息可以由本地的线程进行处理,也可以由远程的服务器进行处理。Actor使用户很容易地通过类似于网络服务的小组件构建应用程序,缩减了空间占用和管理开销。

03Akka如何实现Actor模型

(1)ActorSystem

首先,来看一下Actor是如何创建的。Actor可以创建其他Actor,但谁创建第一个Actor呢?见图1。

Akka——并发、分布式软件开发工具

图1 “TeamCha”tActorSystem

聊天应用的第一个Actor是Supervisor。图1中的所有Actor是相同应用的一部分。如何把Actor作为更大系统的一部分?答案就是Akka的ActorSystem。任何Akka应用的第一件事情就是创建ActorSystem。ActorSystem能够创建顶层的Actor,一般情况是只创建一个顶层的Actor——在这个例子中,Supervisor监控一切。

ActorSystem返回创建的顶层Actor的地址,而不是Actor本身。这个地址称作ActorRef。

(2)ActorRef、邮箱和Actor

消息被发送到Actor的ActorRef。每个Actor有一个邮箱——它很像一个队列。发送给ActorRef的消息暂存在邮箱中,以备后续处理,按到达的顺序一次处理一个。图2显示了ActorRef、邮箱和Actor三者之间的关系。

Akka——并发、分布式软件开发工具

图2 ActorRef、邮箱和Actor

(3)分发器

Actor在某个点上被分发器调用,或者说,分发器将消息推送到Actor,如图3所示。

分发器类型决定了使用哪种线程模型推送消息。许多Actor可以接收几个线程推送的消息,如图3所示。

Akka——并发、分布式软件开发工具
Akka——并发、分布式软件开发工具

图3分发器通过邮箱推送消息图4分发器向多个Actor推送消息

当向某个Actor发送一条消息时,实际上只是把这条消息放到邮箱的最后,最终分发器将把它推送给Actor。这个Actor又可以把一条消息放到下一个Actor邮箱的最后,并在某个时间点进行推送。Akka的Actor比线程占用的空间要少:大约270万个Actor可存放在1GB内存中,这与4096个线程占用1GB内存有很大区别,这就意味着可以比直接使用线程更加自由的创建各种类型的Actor。

(4)Actor和网络

Akka的Actor如何通过网络进行交互?ActorRef负责定位Actor,我们所要做的就是地址如何链接到Actor。

Akka提供了远程模块,可以透明地查找Actor。Akka向远程Actor驻留的机器发送消息,并通过网络传回结果。

现在唯一需要改变的就是远程Actor的引用是如何查找的,这可以通过简单的配置实现。

Akka——并发、分布式软件开发工具

想要了解更多关于Akka的内容,请关注新书《Akka实战》

本书引进自知名出版机构Manning

由三位经验丰富的软件工程师联合编写

本书介绍了Akka工具和重要的模块。集中介绍Actor编程模型、支持Actor构建并发和分布式应用的模块

书中所有例子以Scala编写,代码测试贯穿全书

继续阅读