Microsoft Orleans

Orleans 是一種跨平台架構,用於建置健全且可調整的分散式應用程式。 分散式應用程式會定義為跨越多個程序的應用程式,通常超出使用點對點通訊的硬體界限。 Orleans 從單一內部部署伺服器調整為數百到數千個雲端中分散式、高可用性的應用程式。 Orleans 將熟悉的概念和 C# 慣用語延伸到多伺服器環境。 Orleans 的設計目的是彈性調整。 當主機加入叢集時,可以接受新的啟用。 當主機因為縮小或電腦失敗而離開叢集時,該主機上先前的啟用會視需要在其餘主機上重新啟用。 Orleans 叢集可以縮小為單一主機。 啟用彈性可擴縮性的相同屬性也會啟用容錯。 叢集會自動偵測並快速從失敗復原。

Orleans 的其中一個主要設計目標是藉由提供一組常見的模式和 API,簡化分散式應用程式開發的複雜度。 熟悉單一伺服器應用程式開發的開發人員可以輕鬆地轉換,以使用 Orleans 建置具復原性、可調整的雲端原生服務和其他分散式應用程式。 因此,Orleans 通常稱為「分散式 .NET」,而且是建置雲端原生應用程式時會選擇的架構。 Orleans 會在支援 .NET 的任何位置執行。 這包括裝載在 Linux、Windows 和 macOS 上。 Orleans 應用程式可以部署到 Kubernetes、虛擬機器和 PaaS 服務,例如 Azure App ServiceAzure 容器應用程式

「動作項目模型」

Orleans 是以「動作項目模型」為基礎。 動作項目模型源自 1970 年代早期,現在是 Orleans 的核心元件。 動作項目模型是一種程式設計模型,其中每個動作項目都是輕量型、並行、不可變的物件,可封裝狀態片段和對應的行為。 動作項目使用非同步訊息以獨佔模式彼此通訊。 Orleans 特別發明虛擬動作項目抽象概念,其中動作項目會永久存在。

注意

動作項目是幾乎一律存在的純粹邏輯實體。 無法明確建立或終結動作項目,而且其虛擬存在不受執行動作項目之伺服器的失敗影響。 因為動作項目一律存在,所以一律可以定址。

這是為雲端紀元建置新一代分散式應用程式的創新方法。 Orleans 程式設計模型會弭平高度平行分散式應用程式固有的複雜度,而不會限制功能或對開發人員強加條件約束。

如需詳細資訊,請透過 Microsoft Research 參閱 Orleans:虛擬動作項目。 虛擬動作項目會以 Orleans 精細度表示。

什麼是粒紋?

精細度是數個 Orleans 基本類型之一。 就動作項目模型而言,精細度是虛擬動作項目。 任何 Orleans 應用程式中的基本建置組塊都是精細度。 精細度是包含使用者定義身分識別、行為和狀態的實體。 請考慮下列精細度的視覺表示法:

精細度是由穩定的身分識別、行為和狀態組成。

精細度身分識別是使用者定義的索引鍵,可讓精細度永遠可用於叫用。 其他精細度或任意數目的外部用戶端都可以叫用精細度。 每個精細度是可實作下列一或多個介面的類別執行個體:

精細度可以有可儲存在任何儲存系統中的動態或持續性狀態資料。 因此,精細度會隱含分割應用程式狀態,啟用自動可擴縮性,並簡化從失敗的復原。 精細度狀態會保留在記憶體中,而精細度處於作用中狀態,導致資料存放區上的延遲較低且負載較少。

Orleans 精細度的受控生命週期。

精細度的具現化會由 Orleans 執行階段隨選自動執行。 一段時間未使用的精細度會自動從記憶體中移除,以釋出資源。 這是因為其穩定的身分識別所以可行,允許叫用精細度,不論是否已載入記憶體中。 這也允許從失敗進行透明復原,因為呼叫端不需要知道在任何時間點具現化精細度所在的伺服器。 精細度具有受控生命週期,Orleans 執行階段負責啟用/停用,並視需要放置/尋找精細度。 這可讓開發人員撰寫程式碼,就像所有精細度一律在記憶體中一樣。

什麼是定址接收器?

定址接收器是 Orleans 基本類型的另一個範例。 定址接收器會裝載一或多個精細度。 Orleans 執行階段是實作應用程式程式設計模型的項目。

一般而言,一組定址接收器會以叢集的形式執行,以獲得可擴縮性和容錯。 以叢集形式執行時,定址接收器會彼此協調以散發工作,偵測並且從失敗復原。 執行階段可讓裝載在叢集中的精細度彼此通訊,就像是在單一程序內一樣。 若要協助視覺化叢集、定址接收器和精細度之間的關聯性,請考慮下圖:

叢集有一或多個定址接收器,而定址接收器有一或多個精細度。

上圖顯示叢集、定址接收器和精細度之間的關聯性。 您可以有任意數目的叢集,每個叢集都有一或多個定址接收器,而每個定址接收器都有一或多個精細度。

除了核心程式設計模型之外,定址接收器還提供一組執行階段服務,例如計時器、提醒 (持續性計時器)、持續性、交易、資料流等等。 如需詳細資訊,請參閱我可以使用 Orleans 做什麼?

Web 應用程式和其他外部用戶端會使用用戶端程式庫呼叫叢集中的精細度,以自動管理網路通訊。 為求簡化,用戶端也可以共同裝載在與定址接收器相同的程序中。

我可以使用 Orleans 做什麼?

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

持續性

Orleans 提供簡單的持續性模型,可在處理要求之前確保狀態為可供使用,並維護其一致性。 精細度可以有多個具名的持續性資料物件。 例如,對於使用者的設定檔可能有一個稱為 "profile" 的物件,對於清查有一個稱為 "inventory" 的物件。 此狀態可以儲存在任何儲存體系統中。

當精細度執行時,狀態會保留在記憶體中,讓讀取要求可在不存取儲存體的情況下提供。 當精細度更新其狀態時,呼叫 IStorage.WriteStateAsync 可確保備份存放區已針對持久性和一致性更新。

如需詳細資訊,請參閱精細度持續性

計時器和提醒

提醒是精細度的持久排程機制。 即使目前尚未啟用精細度,也可以用來確保未來某個時間點完成某些動作。 計時器是提醒的非持久對應項目,可用於不需要可靠性的高頻率事件。

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

彈性精細度放置

在 Orleans 中啟動精細度時,執行階段會決定要啟動該精細度所在的伺服器 (定址接收器)。 這稱為精細度放置。

Orleans 中的放置程序完全可設定。 開發人員可以從一組現成的放置原則中選擇,例如隨機、偏好本機和以負載為基礎,會是可以設定的自訂邏輯。 這讓您在決定精細度的建立位置上有完全的彈性。 例如,精細度可以放在操作所需資源的伺服器上,或放在其他精細度的位置以利通訊。

如需詳細資訊,請參閱精細度放置

精細度版本設定和異質叢集

以安全地將變更納入考量的方式來升級生產系統會是一項挑戰,特別是在具狀態系統中。 若要考慮這個問題,Orleans 中的精細度介面可以進行版本設定。

叢集會維護哪些精細度實作可在叢集中哪些定址接收器上使用的對應,以及這些實作的版本。 執行階段會搭配放置策略使用此版本的資訊,以在路由精細度的呼叫時做出放置決策。 此外,為了安全地更新已設定版本的精細度,這也會啟用異質叢集,其中不同的定址接收器有不同的精細度實作集可供使用。

如需詳細資訊,請參閱精細度版本設定

無狀態背景工作角色

無狀態背景工作角色會特別標示沒有任何相關聯狀態的精細度,並可同時在多個定址接收器上啟用。 這可提高無狀態函式的平行處理原則。

如需詳細資訊,請參閱無狀態背景工作角色精細度

精細度呼叫篩選

精細度呼叫篩選是許多精細度通用的邏輯。 Orleans 支援傳入和傳出呼叫的篩選。 授權、記錄和遙測和錯誤處理的篩選全都視為通用。

要求內容

中繼資料和其他資訊可以使用要求內容來傳遞一系列要求。 要求內容可用來保存分散式追蹤資訊或任何其他使用者定義的值。

分散式 ACID 交易

除了上述的簡單持續性模型之外,精細度也可以具有交易狀態。 不論其狀態最終儲存於何處,多個精細度都可以一起參與 ACID 交易。 Orleans 中的交易是分散式和非集中式 (沒有中央交易管理員或交易協調器),並且具有可序列化的隔離

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

資料流

串流可協助開發人員近乎即時地處理一系列的資料項目。 Orleans 串流是受控的;在精細度或用戶端發佈或訂閱串流之前,不需要建立或註冊串流。 這可讓串流產生者和取用者彼此與基礎結構分離。

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

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

任意數目的串流可以多工處理到較小數量的佇列,而且處理這些佇列的責任會在平均分散到叢集之間。

Orleans 影片簡介

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

下一步