akka 概覽

體系結構

Actor是Akka最核心的概念,也是最基本的執行單元,所以對Actor管理和監控的有效性是極爲重要的。在Akka中,每個Actor都有自己的監管對象,即該Actor的創建者,它們通常會負責子Actor的失敗處理,另外,某些Actor也需要對生命週期進行監控(比如該Actor的終止),以便及時的響應並作正確處理,這些監督和監控者本身也都是一個Actor。在Akka中,整個Actor體系被抽象成一個ActorSystem,它是一個層級的結構,擁有公共行爲的配置和管理。

在ActorSystem基礎上,Akka也提供了一些配套的組件,比如持久化,Http服務,網絡服務等,他們都是構建高可用分佈式應用不可或缺的部分,基本架構體系和周邊產品如圖1-4所示。

圖1-4  Akka基本架構體系及周邊產品

 

Actor組件

在Akka中,Actor是一個高度抽象的對象引用,它包含以下幾個要素:   

  • 引用(ActorReference)  Actor的引用不同於普通對象的引用,也不能通過傳統的“new”的方式直接創建一個Actor對象。很多時候需要通過actorOf或者actorSelection等方式返回一個ActorRef對象,該對象有可能存在於本地,也可能存在於遠程節點,對我們來說,它是位置透明的。Actor之間的通信和執行任務都是通過消息驅動的(而不是API的調用)。

  • 狀態(State)  Actor在不同時刻可能有着不同的狀態,這些狀態用變量來表示。在底層實現上,Actor是運行於線程池之上的,肯定會存在多個Actor共享同一個線程的情況,那麼會不會出現併發問題呢?實際上,Akka爲每個Actor都抽象出一個輕量級的執行“線程”(不是真的線程),在底層已經實現了隔離性,所以基本上不用擔心該問題的出現。

  • 另外,當JVM崩潰時,爲了避免Actor狀態的丟失,我們可以藉助持久化方案來對狀態進行持久化操作。

  • 行爲(Behavior)  Actor都有接收和發送消息的能力,每當它接收到一個消息後,就可以執行某個業務操作,同時也可以把消息轉發到其他節點進行處理。

  • 監管策略(SupervisorStrategy)  Actor系統是一個層級結構,當任務被某個Actor分攤到子Actor時,父Actor就擁有監管子Actor的義務。在監管時,我們需要根據不同的情況選擇不同的處理方案(比如停止、重啓、恢復或者失敗上溯)和策略(比如1 vs 1、1 vs N策略)。

郵箱  (Mailbox)

每個Actor都有自己的郵箱,所有其他Actor發送過來的消息都會進入該郵箱。Akka 自帶多種郵箱類型,也提供自定義郵箱的接口。

 

路由 (Routing)

消息除了通過普通的Actor發送之外,也可以通過路由進行發送。當通過路由發送 消息時,我們可以根據需求來選擇不同的路由策略,比如輪詢、廣播等。

 

持久化 (Persistence)

任何程序都可能有失敗的可能,即便是JVM如此強大穩定的平臺也都一樣。當程 序出錯, JVM崩潰時,任何關鍵狀態的丟失,對我們後續的業務來講都可能是致命的打擊,所以狀態數據的持久化變得非常重要。Akka提供了Actor狀態的持久化方案, 以便我們在必要時恢復數據。

 

網絡(遠程和分佈式集羣)

網絡功能是實現遠程Actor和分佈式集羣的基礎,這其中包含I/O、網絡通(TCP/UDP)、序列化配置、分佈式通信協議(Gossip)、節點(node)管理、集羣分片等內容。

 

HTTP 模塊

Akka提供了簡單易用的Http模塊,支持完整的Http服務端與客戶端開發,可以幫 助我們快速構建性能極強的Rest Web服務。   

 

相關開源項目

Akka具有高性能、可擴展、設計友好等諸多優點,非常被適合用來作爲分佈式應 用的基礎框架,而且由於對Http有非常好的支持,也讓它在web服務領域佔有一席之地。目前業界已經有多個基於Akka實現的開源項目,項目類型涵蓋了Web開發、微服 務、分佈式文件或計算服務等。下面是Akka中兩個具有代表性的開源項目:    

 

Play框架    

  • 一款大名鼎鼎的Web開發框架。它不同於其他Servlet系的框架,比如Struts或者SpringMVC,底層基於Akka構建,天生擁有異步的特點,具有極佳的性能。

  • 它默認提供restful風格的API,同時也對WebSocket有不錯的支持。

Lagom框架

在目前IT界,最火爆的概念要屬"微服務"了,微服務的理念是:把業務功能 拆成小的、獨立的單元,他們之間能夠互相通信而且支持水平擴展。Lagom 就是這樣一款微服務框架,它基於異步的消息驅動,對分佈式集羣、持久化(如  JPA、NoSql)都有良好的支持。同時,它也擁有完整的集成開發環境,非常 便於在線部署和管理。

 

小結

隨着互聯網的高速發展,開發分佈式&並行應用將不再是某些巨頭公司的“專利”,而對大部分研發團隊來講,從零開發自己的分佈式架構又會面臨諸多挑戰,此時選擇Akka作爲分佈式並行服務的基礎框架將是極好的! Akka底層採用Scala語言實現(JVM上另外一款明星語言),它基於Actor模型,在底層幫助開發者屏蔽了異步、消息通信、容錯處理、網絡服務、分佈式集羣等實現細節。在Akka基礎上,也誕生了Play、Lagom等應用框架,讓開發者更容易打造自己的高可用分佈式系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章