共用方式為


Microsoft Orleans

Orleans:

  • 這是一個跨平台架構,用於建置健全且可調整的分散式應用程式。 分散式應用程式會定義為跨越多個單一程式的應用程式,通常超出使用點對點通訊的硬體界限。
  • 從單一內部部署伺服器調整為雲端中數千個分散式高可用性應用程式。
  • 將熟悉的概念和 C# 慣用語延伸至多伺服器環境。
  • 是設計來彈性調整。 當主機加入叢集時,它可以接受新的激活。 當主機離開叢集時,該主機上的先前啟用會根據需要在其餘主機上重新啟用。 主機可能會因為縮減規模或機器故障而離開叢集。 Orleans 叢集可以縮減為一台主機。 具有彈性延展性的相同特性也使系統具備容錯能力。 叢集會自動偵測並快速從失敗中復原。
  • 藉由提供一組常見的模式和 API,簡化分散式應用程式開發的複雜性。
  • 可讓熟悉單一伺服器應用程式開發的開發人員轉換,以建置彈性、可調整的雲端原生服務和分散式應用程式。
  • 有時稱為「分散式 .NET」。
  • 這是建置雲端原生應用程式時所選擇的架構。
  • 在支援 .NET 的任何位置執行。 這包括在Linux、Windows和macOS上裝載。
  • 應用程式可以部署至 Kubernetes、虛擬機和 PaaS 服務,例如 Azure App ServiceAzure Container Apps

演員模型

Orleans 是以「演員模型」為基礎。 演員模型起源於 20 世紀 70 年代初,現在是 Orleans的核心組成部分。 動作專案模型是一種程序設計模型,其中每個 動作專案 都是一個輕量型、並行、不可變的物件,可封裝一段狀態和對應的行為。 演員專門使用異步訊息互相溝通。 Orleans 特別發明了 虛擬演員 抽象,其中演員永久存在。

注意

動作專案純粹是邏輯實體,幾乎 一律 存在。 無法明確地建立或銷毀一個角色,而且其虛擬存在不會受執行該角色的伺服器失敗影響。 由於參與者始終存在,因此始終可以被尋址。

這是為雲端時代建置新一代分散式應用程式的新方法。 Orleans 程式設計模型會讓高度平行分散式應用程式 固有的複雜性,而不需要 限制功能或對開發人員施加限制。

如需詳細資訊,請透過 Microsoft Research 參閱 Orleans:虛擬角色。 虛擬演員會以 Orleans 粒子表示。

什麼是穀物?

粒度是數個 Orleans 基本元素之一。 就 Actor 模型而言,微粒是虛擬角色。 任何 Orleans 應用程式中的基本構建單元是 。 穀物是包含使用者定義的身分識別、行為和狀態的實體。 請考慮下列粒紋的視覺表示法:

穀粒是由穩定的身份、行為和狀態所組成。

粒紋身分識別是使用者定義的密鑰,可讓粒紋永遠可供調用使用。 其他穀物或任意數量的外部用戶端都可以調用穀物。 每個 grain 都是實作下列一個或多個介面的類別實例:

粒紋可以有可儲存在任何儲存系統中的揮發性或持續性狀態數據。 因此,穀粒會隱式分區應用程式狀態,實現自動擴展並簡化從失敗中的復原。 穀粒的狀態在其活躍時會保留在記憶體中,從而降低延遲並減少數據存放區的負載。

Orleans 粒紋的管理生命週期。

Orleans 執行環境會根據需求自動進行粒度的具現化。 一段時間不使用的穀物會自動從記憶體中移除,以釋放資源。 這是可能的,因為它們的身分識別穩定,這允許調用資料顆粒,不論它們是否已被載入記憶體。 這也允許透明地從失敗中復原,因為呼叫端不需要知道伺服器在任一時間點上具現化微粒的位置。 穀粒的生命週期是受控的,Orleans 執行時負責根據需要啟動/停用,並放置/定位穀粒。 這可讓開發人員撰寫程序代碼,就像所有粒紋一律在記憶體中一樣。

什麼是資訊孤島?

筒倉是 Orleans 基本類型的另一個範例。 筒倉儲存一種或多種穀物。 Orleans 執行環境是實作應用程式程式設計模型的機制。

一般而言,一組資料筒倉會以叢集的形式執行,以提升可擴展性和容錯能力。 當以叢集模式運行時,Silos 會互相協調以分配工作,並偵測及復原故障。 執行時期讓裝載在叢集中的微粒能夠互相通信,如同在單一程序中一樣。 若要幫助理解叢集、筒倉和穀粒之間的關係,請考慮下圖:

叢集有一或多個儲存單元,而儲存單元有一或多個粒子。

上圖顯示叢集、倉儲和細粒之間的關聯性。 您可以擁有任意數量的叢集,每個叢集都有一個或多個獨立區塊,而每個獨立區塊都包含一個或多個微粒。

除了核心程式設計模型之外,silos 還提供穀物一組運行時服務,例如計時器、提醒(持久計時器)、持久性、交易、流等。 如需詳細資訊,請參閱 如何使用 Orleans?

Web 應用程式和其他外部用戶端會使用用戶端連結庫呼叫叢集中的粒紋,以自動管理網路通訊。 為了簡單起見,客戶端也可以與孤島模式共同託管在同一個進程中。

我可以使用 Orleans做什麼?

Orleans 是建置雲端原生應用程式的架構,每當您建置最終需要調整的 .NET 應用程式時,都應該加以考慮。 使用 Orleans的方式似乎無休止,但以下是一些最常見的方式:遊戲、銀行、聊天應用程式、GPS 追蹤、股票交易、購物車、投票應用程式等等。 Orleans 可供 Azure、Xbox、Skype、Halo、PlayFab、Gears of War 和其他許多內部服務中的Microsoft使用。 Orleans 有許多功能,可讓您輕鬆地用於各種應用程式。

堅持

Orleans 提供簡單的持續性模型,可確保在處理要求之前提供狀態,並維護其一致性。 粒紋可以有多個具名持續性數據物件。 例如,可能有一個稱為「配置檔」的用戶設定檔,和一個稱為「庫存」的清單。 此狀態可以儲存在任何記憶體系統中。

當 grain 正在運行時,狀態會保留在記憶體中,以便在不存取儲存設備的情況下提供讀取要求。 當粒紋更新其狀態時,呼叫 IStorage.WriteStateAsync 可確保備份存放區會更新為持久性和一致性。

如需詳細資訊,請參閱 粒紋持續性

定時器和提醒

提醒是穀物的持久排程機制。 它們可以用來確保在未來某個時間點完成某些動作,即使當時未啟動該功能也沒關係。 定時器是不具持久性的提醒對應項目,可用於不要求高可靠性且頻率高的事件。

如需詳細資訊,請參閱 定時器和提醒

彈性粒紋放置

在 Orleans中啟動微粒時,運行時會決定在伺服器(silo)上啟動該微粒。 這稱為紋理排列。

Orleans 中的放置過程是完全可設定的。 開發人員可以從一組現成可用的放置原則中選擇,例如隨機、偏好本機和負載型,或可設定自定義邏輯。 這可讓您在決定建立粒紋的位置時具有完整的彈性。 例如,可以將粒子放置在接近其所需資源的伺服器上,或與其進行通訊的其他粒子相近的伺服器上。

如需更多資訊,請參閱 紋理佈局

粒紋版本設定和異質叢集

以安全考慮變更的方式升級生產系統可能會很困難,特別是在具狀態系統中。 若要考慮這一點,Orleans 中的粒紋介面可以建立版本。

叢集會維護叢集中每個筒倉上的穀物實作對應關係,以及這些實作的版本。 執行時期會使用此版本的資訊配合配置策略,以在路由呼叫至 Grains 時做出配置決策。 此外,為了安全地更新具版本管理的 Grain,這也支援異質叢集,其中不同的孤島具備不同的 Grain 實作集可供使用。

如需詳細資訊,請參閱 Grain Versioning

無國籍工作者

無狀態工人是特別標記的工作單元,沒有任何相關聯的狀態,而且可以同時在多個資料筒倉上啟用。 這使無狀態函式能夠達到更高的平行度。

如需詳細資訊,請參閱 無狀態工作單元

粒度呼叫過濾器

粒紋呼叫篩選 是許多粒紋常見的邏輯。 Orleans 支援傳入和傳出通話的篩選條件。 授權、記錄和遙測的篩選,以及錯誤處理全都視為常見。

請求上下文

元數據和其他資訊可以藉由使用 請求上下文傳遞的一系列請求。 要求內容可用來存放分散式追蹤資訊或任何其他用戶定義值。

分散式 ACID 交易

除了上述的簡單持續性模型之外,穀粒還可以具有 交易型狀態。 無論其狀態最終儲存在哪裡,多個分粒都可以一起參與 ACID 交易。 Orleans 中的交易是分散的(沒有中央交易管理員或交易協調器),並具有 可串行化的隔離

如需交易的詳細資訊,請參閱 異動

溪流

串流可協助開發人員近乎即時地處理一系列數據項。 Orleans 數據流是 受控的;因此,數據流在粒子或用戶端發佈或訂閱數據流之前,無需建立或註冊。 這可讓串流產生者和取用者更好地與彼此之間以及與基礎結構解耦。

串流處理可靠:實體可以儲存檢查點(數據指標),並在啟用或任何後續時間將狀態重設為儲存的檢查點。 串流支援將訊息批次傳遞給取用者,以改善效率和復原效能。

資料流是由佇列服務支援的,例如 Azure 事件中樞、Amazon Kinesis 和其他服務。

任意數量的數據流可以多工處理到較少的佇列,而這些佇列的處理責任會平均分配在整個叢集中。

Orleans 影片簡介

如果您對 Orleans的影片簡介感興趣,請參閱下列影片:

後續步驟