Akka服務位置透明 21

原文:https://doc.akka.io/docs/akka/2.5/general/remoting.htmlhtml

位置透明

已經描述瞭如何使用actor路徑來啓用位置透明性。這個特殊功能值得一些額外的解釋,由於相關術語「透明的遠程處理」在編程語言,平臺和技術的上下文中使用是很是不一樣。編程

默認分佈式

Akka中的全部內容都設計爲在分佈式環境中工做:actor的全部交互都使用純粹的消息傳遞,一切都是異步的。這項工做旨在確保在單個JVM或數百臺計算機集羣中運行時,全部功能都可用。啓用此功能的關鍵是經過優化從遠程轉到本地,而不是經過泛化嘗試從本地轉到遠程。請參閱此classsic paper,詳細討論第二種方法必然會失敗的緣由。安全

透明性被打破

對於使用它的應用程序來講,Akka的真實狀況不必定是正確的,由於爲分佈式執行進行設計會對可能的狀況產生一些限制。最明顯的一點是,經過線路發送的全部消息都必須是可序列化的。網絡

另外一個結果是,全部內容都須要瞭解徹底異步的交互,這在計算機網絡中可能意味着消息可能須要幾分鐘才能到達其收件人(取決於配置)。這也意味着消息丟失的機率可能遠高於一個JVM,但願它接近於零(沒有硬保證!)。負載均衡

Remoting使用

咱們將透明度的想法發揮到了極限,由於Akka的遠程處理層幾乎沒有API:它純粹是由配置驅動的。只需根據前面部分中概述的原則編寫應用程序,而後在配置文件中指定actor子樹的遠程部署。這樣,您的應用程序能夠擴展,而無需觸摸代碼。容許對遠程部署進行編程影響的惟一API是Props包含一個能夠設置爲特定Deploy實例的字段;這將等效部署放入配置文件具備相同的效果(若是二者都給出,配置文件優選)。異步

Peer-to-Peer vs. Client-Server

Akka Remoting是一個以點對點方式鏈接actor系統的通訊模塊,它是Akka Clustering的基礎。遠程設計由兩個(相關的)設計決策驅動:編程語言

  1. 所涉及系統之間的通訊是對稱的:若是系統A能夠鏈接到系統B,那麼系統B也必須可以獨立地鏈接到系統A。
  2. 通訊系統的Actor在鏈接模式方面是對稱的:沒有系統只接受鏈接,而且沒有系統只啓動鏈接。

這些決策的結果是沒法安全地建立具備預約義角色的純client-server設置(違反假設2)。對於client-server設置,最好使用HTTP或Akka I / O.分佈式

重要說明:使用涉及網絡地址轉換,負載均衡器或Docker容器的設置違反了假設1,除非在網絡配置中採起其餘步驟以容許所涉及系統之間的對稱通訊,在這種狀況下,能夠將Akka配置爲綁定到與用於在Akka節點之間創建鏈接的網絡地址不一樣的網絡地址。請參閱NAT後面的Akka或Docker容器中的Akka。優化

用Routers擴展

除了可以在集羣的不一樣節點上運行actor系統的不一樣部分以外,還能夠經過將支持並行化的actor子樹相乘來擴展到更多核心(例如,考慮搜索引擎處理不一樣的查詢)。而後能夠以不一樣的方式路由到。實現這一點的惟一必要條件是開發人員須要將某個actor聲明爲「withRouter」,而後將建立一個路由器actor,它將生成所需類型和路由的可配置數量的子節點。他們以配置的方式。一旦聲明瞭這樣的路由器,就能夠從配置文件中自由覆蓋其配置,包括將其與(某些)子節點的遠程部署混合。在Routing中瞭解更多相關信息。搜索引擎

原文:https://doc.akka.io/docs/akka/2.5/general/remoting.html

相關文章
相關標籤/搜索