Orleans 2.0官方文件(閆輝的個人翻譯)——1 介紹
介紹
Orleans是一個框架,它提供了一種簡單的方法來構建分散式高規模計算應用程式,而無需學習和應用複雜的併發或其他擴充套件模式。
背景
雲應用程式和服務本質上是並行和分散式的。它們也具有互動性和動態性; 通常需要在雲實體之間,近乎實時地直接互動。構建這樣的應用程式,在今日已異常艱難。不僅開發過程需要專家級程式設計師,並且隨著工作負載的增長,通常需要昂貴的設計和體系結構的迭代。
今天大多數高規模應用程式,都是作為無狀態n層服務的組合而構建的,大多數應用程式邏輯都位於中間層。
雖然該模型允許通過向中間層新增更多伺服器來擴充套件,但它受到儲存層的效能和可擴充套件性的限制,因為從前端Web伺服器進入中間層的大多數請求需要從儲存中讀取一次或多次。由於中間層伺服器之間缺乏協調,更新變得更加複雜,並且容易出現併發問題和衝突。它通常需要在無狀態層中進行快取以獲得可接受的效能,既增加了複雜性,又引入了快取一致性問題。無狀態n層模型的另一個問題是,它不能很好地支援中間層暴露的各個應用程式實體之間的橫向通訊。
Orleans作為有狀態的中間層
Orleans提供了一種構建有狀態中間層的直觀方式,中間層就像一個海洋,有各種業務邏輯實體,它們是分佈在伺服器叢集(silos)中的、不同應用程式定義型別的、隔離的、全域性可定址.NET物件(grains)。
grain型別是一個簡單的.NET類,它實現了一個或多個應用程式定義的grain介面。單個grain是應用程式定義的Grain類的例項,它們可以根據需要由伺服器上的Orleans執行時自動建立,以處理對這些grain的請求。grain本質上對映到大多數應用程式實體,例如使用者,裝置,會話,庫存和訂單。這使得構建面向物件的業務邏輯變得非常容易,而又能在伺服器叢集中透明地擴充套件。每個grain在其應用邏輯選擇的grain型別內具有穩定的邏輯標識(金鑰),例如,使用者電子郵件或裝置ID或庫存SKU程式碼。Orleans保證每個單獨grain的單執行緒執行,從而保護應用程式邏輯免受併發和競爭的危險。在微服務領域,Orleans被用作實現微服務的框架,微服務可以由開發人員選擇的微服務部署/管理解決方案進行部署和管理。
grain的生命週期
grain在儲存,記憶體狀態或兩者中都可以具有持久狀態。通過使用目標grain的邏輯身份,任何其他grain或前端(客戶端)都可以呼叫任何grain,而無需建立或例項化目標grain。Orleans的程式設計模型使得grain看起來就好像它們一直存在於記憶體中。實際上,grain在整個生命週期中僅經歷,從儲存中的持久狀態,到記憶體中例項化,以及從記憶體中移除。
在幕後,Orleans執行時會在他們有工作負載的時候例項化(啟用)grain,並在grain空閒時間過長時將其從記憶體中移除(停用)以回收硬體資源。執行時對grain的生命週期管理工作,於應用程式程式碼是透明的,並將其從分散式資源管理的複雜任務中解放出來。應用程式邏輯可以用它可用的整個“地址空間”來編寫,而不需要硬體資源來同時將所有的粒度儲存在記憶體中,概念上類似於虛擬記憶體在作業系統中的工作方式。此外,grains的虛擬性質允許Orleans以對應用程式邏輯最透明的方式處理伺服器故障,這是因為一旦檢測到故障,在發生故障的伺服器上執行的grains 將自動在叢集中的其他伺服器上重新例項化。
虛擬Actor
Orleans的實現基於自20世紀70年代以來一直存在的Actor模型。然而,與Erlang或Akka等更傳統的Actor系統中的Actor不同,Orleans grain是虛擬Actor。最大的區別在於,grain的物理例項完全被抽象出來,並由Orleans執行時自動管理。虛擬角色模型更適合雲服務等大規模動態工作負載,這是Orleans的主要創新。您可以在奧爾良技術報告中閱讀更多詳細資訊。
Orleans的起源
Orleans是在Microsoft Research建立的,專為在雲中使用而設計。自2011年以來,它已被多個微軟產品組廣泛應用於雲端和內部,最著名的是遊戲工作室,如343 Industries和The Coalition,作為Halo 4和5背後的雲服務平臺,以及戰爭機器4 ,以及其他一些公司。
Orleans於2015年1月開源,吸引了許多開發人員,他們構成了.NET生態系統中最具活力的開源社群之一。在開發人員社群與Microsoft奧爾良團隊之間的積極協作中,每天都會新增和改進功能。微軟研究院繼續與Orleans團隊合作,推出新的主要功能,如地理分佈,索引和分散式交易,這些都推動了最先進的技術發展。奧爾良已經成為許多.NET開發人員構建分散式系統和雲服務的首選框架。