1. 程式人生 > >AKKA文件(java版)—位置透明性

AKKA文件(java版)—位置透明性

2.6 位置透明性

前一章節描述瞭如何使用角色路徑來實現位置透明性。這一個特性應該需要一些額外的說明,因為與之關聯的術語“transparent remoting”(透明的遠端處理)在程式語言、平臺和技術中的用法是不一樣的。

2.6.1 預設分散式
Akka中的所有事物被設計成用於分散式環境中:角色之間的交流都是純資訊傳遞,並且是同步的。這一成就已經被用於確保所有的功能在單個JVM或者在擁有數以百計的機器的叢集中執行都同樣有效。實現這一功能的關鍵在於從遠端到本地的優化代替試圖從本地到遠端的範化。關於第二種方式註定要失敗的詳細討論請訪問this classic paper

2.6.2 透明方式被打破
對Akka適用的,不一定適用於使用它的應用,因為設計分散式執行會帶來一些限制。最明顯的一點就是所有通過電纜傳送的訊息都必須可序列化。雖然有一點不太明顯的就是包括閉包在內的遠端角色工廠,用來在遠端節點建立角色(即Props內部)。
另一個結論是,要意識到所有互動都是完全非同步的,它意味著在一個計算機網路中一條訊息需要幾分鐘才能到達接收者那裡(基於配置),而且可能比在單JVM中有更高丟失率,後者丟失率接近於0(還沒有確鑿的證據)。

2.6.3 如何遠端使用?
我們持透明性的觀點的限制是幾乎沒有關於Akka遠端處理層的API:它純粹是配置驅動的。根據前面章節講述的原則去編寫你的應用,然後在配置檔案中指定角色子樹的遠端部署。你的應用可以用這種方式在不需要改動程式碼的情況下實現橫向擴充套件。唯一的允許通過程式設計影響遠端部署的API是Props,Props可以指定Deploy例項的屬性,這種方式等同於通過配置檔案部署(如果兩種方式都用了,會以配置檔案優先)。

2.6.4 點對點 VS 客戶端-伺服器端
Akka遠端處理是一個在點對點模式下用來連線角色系統的通訊模組,而它是Akka叢集的基礎。遠端處理是通過兩個設計決策(相關的)作為導向來設計的:

  1. 相關係統之間的通訊是對等的:如果一個系統A可以連線到系統B,那麼系統B也一定可以獨立的連線到系統A。
  2. 關於連線模式,通訊系統的地位是對等的:沒有一個系統是隻能接受連線,也沒有一個系統只能發起連線。

通過這些決策我們知道是不可能通過預定義角色(審校者注:原文為role,而不是文件通常出現的Actor)(違反假設1)和涉及網路地址轉換或負載平衡器的設定(違反假設2)來安全的建立純粹的client-server設定。

client-server的設定最好使用HTTP或者Akka I/O。

2.6.5 利用路由器縱向擴充套件標記點
除了能夠在叢集的不同節點上執行角色系統的不同部分,還可以通過支援並行的多角色子樹擴充套件到更多的核心(想象成一個搜尋引擎可以並行的處理不同的查詢)。克隆可以不同的方式路由,例如輪詢。唯一要做的就是開發人員需要宣告一個特定的角色“withRouter”,然後,將會建立一個路由角色,該角色將產生許多可配置的期望型別的子角色並以配置指定的方式路由到它們。一旦聲明瞭這樣的一個路由器,它的配置可以自由的用配置檔案覆蓋,還可以與遠端部署(的一些)子角色混合。更多內容請見

Routing(Scala)Routing(Java)