Akka的類庫和模塊《six》譯

    在深刻研究編寫Actor的一些最佳實踐以前,先預覽一下最經常使用的Akka庫會頗有幫助。這將幫助您開始考慮要在系統中使用的功能。全部核心Akka功能均可以做爲開源軟件(OSS)使用。Lightbend贊助了Akka開發,但也能夠爲您提供培訓,諮詢,支持和Enterprise Suite 等商業產品,這是一套管理Akka系統的綜合工具。html

    Akka OSS包含如下功能,將在本頁後面介紹:編程

    使用Lightbend訂閱,您能夠在生產中使用Enterprise Suite ,包括如下對Akka核心功能的擴展:安全

    此頁面未列出全部可用模塊,但概述了主要功能,並讓您瞭解在Akka上開始構建系統時能夠達到的複雜程度。服務器

Actor library

    核心Akka庫是akka-actor,在Akka庫中使用了actor,提供了一致的集成模型,使您沒法單獨解決併發或分佈式系統設計中出現的挑戰。Actor是一種編程範式,它將封裝(OOP的支柱之一)帶到極致。與對象不一樣,actor不只封裝了它們的狀態,還封裝了它們的執行。與actor的通訊不是經過方法調用,而是經過傳遞消息。雖然這種差別可能看起來很小,但實際上它容許咱們在併發和遠程通訊方面打破OOP的限制。若是這個描述感受過高而沒法徹底掌握,請不要擔憂,在下一章中咱們將詳細解釋Actor。目前,重要的一點是,這是一個處理基本級別的併發和分發的模型,而不是將這些功能引入OOP的臨時修補嘗試。網絡

    Actor解決的挑戰包括:多線程

  • 如何構建和設計高性能的併發應用程序。
  • 如何在多線程環境中處理錯誤。
  • 如何保護個人項目免受併發的陷阱。

Remoting

    遠程處理使位於不一樣計算機上的Actor可以無縫地交換消息。雖然做爲JAR包分發,但Remoting比模塊庫更像模塊。您主要使用配置啓用它,它只有幾個API。因爲actor模型,遠程和本地消息發送看起來徹底相同。您在本地系統上使用的模式直接轉換爲遠程系統。您不多須要直接使用Remoting,但它提供了構建Cluster子系統的基礎。併發

    遠程解決的挑戰包括如下內容:負載均衡

  • 如何解決生活在遠程主機上的actor系統。
  • 如何解決遠程演員系統上的各個Actor。
  • 如何將消息轉換爲線路上的字節。
  • 如何透明地管理主機之間的低級網絡鏈接(和從新鏈接),檢測崩潰的actor系統和主機。
  • 如何透明地在同一網絡鏈接上覆用來自不相關的一組參與者的通訊。

Cluster

    若是您有一組合做解決某些業務問題的actor系統,那麼您可能但願以一種規範的方式管理這些系統。雖然Remoting解決了與遠程系統組件進行尋址和通訊的問題,但Clustering使您可以將這些組織成一個由成員協議捆綁在一塊兒的「元系統」。在大多數狀況下,您但願使用羣集模塊而不是直接使用遠程處理。羣集在遠程處理之上提供了一組額外的服務,這是大多數實際應用程序所須要的。異步

    Cluster模塊解決的挑戰包括如下內容:分佈式

  • 如何維護一組能夠相互通訊並將彼此視爲集羣的一部分的actor系統(集羣)。
  • 如何安全地將新系統引入現有成員集。
  • 如何可靠地檢測暫時沒法訪問的系統。
  • 如何刪除失敗的主機/系統(或縮小系統),以便全部剩餘成員就羣集的剩餘子集達成一致。
  • 如何在當前成員集之間分配計算。
  • 如何將羣集成員指定爲某個角色,換句話說,提供某些服務而不是其餘服務。

Cluster Sharding

    分片有助於解決在Akka集羣成員之間分配一組Actor的問題。Sharding是一種主要與Persistence一塊兒使用的模式,用於平衡大量持久性實體(由actor支持)到集羣成員,並在成員崩潰或離開時將它們遷移到其餘節點。

    Sharding解決的挑戰包括:

  • 如何在一組系統上建模和擴展大量有狀態實體。
  • 如何確保羣集中的實體正確分佈,以便在計算機之間正確平衡負載。
  • 如何確保從崩潰的系統遷移實體而不會丟失狀態。
  • 如何確保實體不會同時存在於多個系統上,從而保持一致。

Cluster Singleton

    分佈式系統中常見的(實際上有點常見)用例是讓一個實體負責給定任務,該任務在集羣的其餘成員之間共享,並在主機系統出現故障時進行遷移。雖然這無能否認地引入了限制擴展的整個集羣的共同瓶頸,可是有些狀況下使用這種模式是不可避免的。羣集單例容許羣集選擇將託管特定actor的actor系統,而其餘系統始終能夠獨立於其所在位置訪問所述服務。

    Singleton模塊可用於解決這些挑戰:

  • 如何確保整個羣集中只運行一個服務實例。
  • 即便託管它的系統當前在縮小過程當中崩潰或關閉,如何確保服務已啓動。
  • 如何從羣集的任何成員到達此實例,假設它能夠隨時間遷移到其餘系統。

Cluster Publish-Subscribe

    對於系統之間的協調,一般須要將消息分發到羣集中的一組感興趣系統的全部或一個系統。這種模式一般稱爲發佈 - 訂閱,該模塊解決了這個問題。能夠向主題的全部訂戶廣播消息或者向表示感興趣的任意玩家發送消息。

    Cluster Publish-Subscribe旨在解決如下挑戰:

  • 如何向羣集中感興趣的一方廣播消息。
  • 如何從羣集中感興趣的一方向成員發送消息。
  • 如何訂閱和取消訂閱羣集中某個主題的事件。

Persistence

    就像OOP中的對象同樣,actor會將它們的狀態保存在易失性內存中。一旦系統關閉,正常或因爲崩潰,內存中的全部數據都將丟失。持久性提供模式以使Actor可以持續致使其當前狀態的事件。啓動時,能夠重播事件以恢復由actor主持的實體的狀態。能夠查詢事件流並將其輸入其餘處理管道(例如,外部大數據集羣)或備用視圖(如報告)。

    Persistence應對如下挑戰:

  • 如何在系統從新啓動或崩潰時恢復實體/ actor的狀態。
  • 如何實施CQRS系統。
  • 如何確保在網絡錯誤和系統崩潰時可靠地傳遞消息。
  • 如何檢測實體進入其當前狀態的域事件。
  • 如何利用應用程序中的事件源來支持在項目不斷髮展的同時支持長時間運行的流程。

Streams

    Actor是併發的基本模型,但有一些常見的模式,它們的使用要求用戶反覆實現相同的模式。很是常見的狀況是,Actor的鏈或圖須要處理潛在的大型或無限的順序事件流並正確協調資源使用,以便更快的處理階段不會壓倒鏈或圖中較慢的處理階段。Streams在actor之上提供了更高級別的抽象,簡化了編寫這樣的處理網絡,處理後臺全部精細細節並提供安全,類型化,可組合的編程模型。Streams也是Reactive Streams標準的實現,它能夠與該標準的全部第三方實現集成。

    Streams能夠解決如下的問題:

  • 如何處理具備高性能的事件流或大型數據集,利用併發性並保持資源使用緊張。
  • 如何將可重用的事件/數據處理組件組裝成靈活的管道。
  • 如何以靈活的方式將異步服務相互鏈接,並具備良好的性能。
  • 如何提供或使用符合Reactive Streams標準的接口與第三方庫進行交互。

Distributed Data

    在最終一致性可接受的狀況下,能夠在Akka羣集中的節點之間共享數據,而且即便面對羣集分區也能夠接受讀取和寫入。這可使用無衝突複製數據類型(CRDT)來實現,其中不一樣節點上的寫入能夠同時發生而且以後以可預測的方式合併。分佈式數據模塊提供了共享數據和許多有用數據類型的基礎結構。

    Distributed Data旨在解決如下挑戰:

  • 即便面對集羣分區,如何接受寫入。
  • 如何在共享數據的同時確保低延遲的本地讀寫訪問。

HTTP

    Akka HTTP是Akka的獨立模塊。

    遠程,內部或外部提供API的事實標準是HTTP。Akka提供了一個庫,用於構建或使用此類HTTP服務,方法是提供一組工具來建立HTTP服務(並提供服務)和一個可用於使用其餘服務的客戶端。這些工具特別適合經過利用Akka Streams的底層模型來流入和流出大量數據或實時事件。

    HTTP模塊解決的一些挑戰:

  • 如何經過HTTP API以高效的方式將系統或集羣的服務公開給外部世界。
  • 如何使用HTTP將大型數據集傳入和傳出系統。
  • 如何使用HTTP將實時事件傳入和傳出系統。

Example of module use

    Akka模塊無縫集成在一塊兒。例如,考慮網站用戶訪問的大量有狀態業務對象,例如文檔或購物車。若是使用分片和持久性將它們建模爲分片實體,它們將在羣集中平衡,您能夠按需擴展。它們將在來自廣告活動的峯值期間或在假期處理以前提供,即便某些系統崩潰也是如此。您還可使用持久性查詢獲取域事件的實時流,並使用Streams將它們傳輸到流式快速數據引擎。而後,將該引擎的輸出做爲Stream,使用Akka Streams運算符對其進行操做,並將其做爲由羣集託管的負載均衡的HTTP服務器集提供的Web套接字鏈接公開,以支持您的實時業務分析工具。

    咱們但願此文檔引發您的興趣!下一個主題介紹了咱們將在本指南的教程部分中構建的示例應用程序。

原文:https://doc.akka.io/docs/akka/current/guide/modules.html

有什麼討論的內容,能夠加我公衆號:

相關文章
相關標籤/搜索