前一節中描述了如何使用Actor路徑,使位置透明性。這個特點值得額外的解釋,因為相關的術語“透明遠程”在上下文中使用編程語言,平臺和技術是完全不同的。
分布式
Akka中所有被設計為分布式環境工作:所有交互的Actor純粹用消息傳遞且都是異步實現。它的成果是所有的功能在單個JVM上或成百上千的集群機器上同樣可用。啟用的關鍵是從遠程到本地的優化,而還是本地到遠程的泛化。看本文詳細論論第二種方法的注定失敗的原因。
透明傳輸的方法的缺陷
由于設計分布式執行帶來了一些限制,哪些適用于Akka需要不適用于應用程序使用它。最明顯的一點是所有消息發送時必須序列化。另一不太明顯的一點是在Actor在遠程節點上創建時,如果Actor工廠那樣封閉。
另一方面,所有交互是異步的,這意味著一個消息在網絡中傳遞可能需要幾分鐘后到達接收人(按配置)。這表示消息丟失的可能遠高于在一個JVM中,那里丟失的可能接近于零(仍無法絕地保證)。
如何遠程使用
透明方式限制幾乎沒有Akka沒有API訪問遠程:通過配置驅動。應用程序根據前一節描述的原則,然后在配置文件中指定遠程部署的Actor子樹。通過這種方式,應用程序可以向外擴展,而無需訪問代碼。在遠程布署時僅有的可編程API是Prop
字段,可能指定為Deploy
實例。把布署內容在配置文件中發布會有同樣的效果(兩者都有取配置文件中的)。
點對點和客戶服務方式
Akka遠程的連接Actor系統的通訊方式是點對點,這是Akka集群的基礎。這樣設計遠程驅動有兩點(相關):
- 系統間的通信是對稱的;如果系統A能連接到系統B,那么系統B也能獨立的連接到系統A。
- 通信系統的規則是對稱的連接模式:沒有系統只接收連接,沒有系統只發送連接。
這些是不可能安全地創建純客戶端-服務器設置預定義的規則(違反假設2)。客戶端-服務器設置最好是使用HTTP或Akka I / O
重要:使用設置網絡地址轉換、負載均衡和Dock容器違反假設1,除非采取額外的步驟允許所涉及對稱通信系統通信。在這種情況下可以配置Akka綁定到一個不同的網絡地址用于Akka節點之間建立連接。
標記點擴大用于路由
除了能夠一個Actor系統的不同部分在不同節點上的集群運行,還可以擴大到更多的內核繁殖Actor子樹支持并行化(例如搜索引擎并行處理不同的查詢)。克隆可以用不同的方式被路由到,例如循環。唯一需要實現目標是,開發人員需要聲明一個特定的演員“withRouter”,接著路由Actor將會創建,它會產生一定數量可配置的相要的子級,并通過配置方式路由到它們。當一個路由被申明后,它能自由的被覆蓋,包括被遠程發布的(子)級混合。