天天看點

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編寫,代碼測試貫穿全書

繼續閱讀