1. 程式人生 > >Orleans 2.0官方文件(閆輝的個人翻譯)——1.1 優點

Orleans 2.0官方文件(閆輝的個人翻譯)——1.1 優點

優點

Orleans的主要優點是:開發人員的工作效率,即使對於非專業程式設計師也是如此,預設情況下透明的可擴充套件性,而無需程式設計師的特別努力。我們在下面展開詳述這兩個優勢。

開發人員生產力

Orleans程式設計模型通過提供以下關鍵抽象,保證和系統服務來提高專家和非專家程式設計師的工作效率。

  • 熟悉的面向物件程式設計(OOP)正規化

Grains是.NET類,它使用非同步方法實現宣告的.NET grain介面。因此,grain對程式設計師來說似乎是可以直接呼叫其方法的遠端物件。這為程式設計師提供了熟悉的OOP正規化,方法是將方法呼叫轉換為訊息,將它們路由到正確的端點,呼叫目標grain的方法,以完全透明的方式處理故障和極端情況。

  • 單執行緒執行grain

執行時保證grain一次不會在多個執行緒上執行。結合與其他grain的隔離,程式設計師永遠不會在grain級別面臨併發性,並且永遠不需要使用鎖或其他同步機制來控制對共享資料的訪問。僅此功能使得分散式應用程式的開發易於為非專業程式設計師開發。

  • 透明啟用

只有在有訊息要處理時,執行時才會啟用grain。這清楚地區分了建立對應用程式程式碼可見和受其控制的grain的引用以及記憶體中grain的物理啟用的概念,這對應用程式是透明的。在許多方面,這類似於虛擬記憶體,因為它決定何時“翻頁”(停用)或“頁面輸入”(啟用)grain; 應用程式可以不間斷地訪問邏輯建立的grain的完整“記憶體空間”,無論它們是否在任何特定時間點都在實體記憶體中。透明啟用通過在硬體資源池中放置和遷移grain來實現動態的自適應負載平衡。這個功能是對傳統Actor模型的重大改進,

  • 位置透明度

程式設計師用來呼叫grain方法或傳遞給其他元件的grain引用(代理物件)只包含grain的邏輯標識。Orleans執行時透明地完成了grain的邏輯身份到其物理位置的轉換以及相應的訊息路由。應用程式程式碼與grain通訊,同時保持對其物理位置的遺忘,這可能由於故障或資源管理而導致隨著時間的推移而變化,或者因為grain在被呼叫時被停用。

  • 與持久儲存透明整合

Orleans允許將grain的記憶體狀態宣告性對映到永續性儲存。它可以同步更新,透明地保證呼叫者只有在成功更新持久狀態後才能收到結果。擴充套件和/或定製可用的現有持久儲存提供程式集是直截了當的。

  • 自動傳播錯誤

執行時使用非同步和分散式try / catch的語義自動在呼叫鏈上傳播未處理的錯誤。因此,錯誤不會在應用程式中丟失。

這允許程式設計師將錯誤處理邏輯放在適當的位置,而無需在每個級別手動傳播錯誤的繁瑣工作。

預設情況下透明可伸縮性

Orleans程式設計模型旨在載入程式員沿著一條可能成功地將應用程式或服務擴充套件到幾個數量級的路徑前進。這是通過合併經驗證的最佳實踐和模式,以及提供較低級別系統功能的有效實現來實現的。以下是支援可伸縮性和效能的一些關鍵因素:

  • 應用狀態的隱式細粒度劃分

通過使用grain作為可直接定址的實體,程式設計師隱式地打破了應用程式的整體狀態。雖然Orleans程式設計模型沒有規定grain應該有多大或多小,但在大多數情況下,有相對大量的grain- 數百萬或更多 - 是有意義的,每個grain代表應用程式的自然實體,例如使用者帳戶或採購訂單。由於grain是可單獨定址的,並且它們的物理位置被執行時抽象掉,Orleans在平衡負載和以透明和通用方式處理熱點方面具有極大的靈活性,而無需應用程式開發人員的任何考慮。

  • 自適應資源管理

grain與其他grain相互作用時,對它們的位置沒有任何假設。由於位置透明,執行時可以以動態方式管理和調整可用硬體資源的分配。執行時通過對跨計算叢集的grain放置和遷移做出細粒度的決定來實現這一點,以響應負載和通訊模式——而不會使傳入的請求失敗。通過建立特定grain的多個副本,執行時可以在不更改應用程式程式碼的情況下增加grain的吞吐量。

  • 多路通訊

Orleans的grain具有邏輯端點,並且它們之間的訊息傳遞在一組固定的所有物理連線(TCP套接字)上進行多路複用。這允許執行時託管數百萬個可定址實體,並且每個grain的作業系統開銷很低。此外,啟用和停用grain不會產生註冊/取消註冊物理端點(例如TCP埠或HTTP URL)或甚至關閉TCP連線的成本。

  • 高效排程

執行時在一個定製的執行緒池中排程大量單執行緒grain的執行,每個物理處理器核心有一個執行緒。使用以非阻塞、基於連續的方式(Orleans程式設計模型的一個要求)編寫的grain程式碼,應用程式程式碼以非常有效的“協作”多執行緒方式執行而沒有爭用。這使得系統能夠達到高吞吐量,並以非常高的CPU利用率(高達90%+)執行,同時具有極大的穩定性。系統中grain數量的增長和負載的增加不會導致額外的執行緒或其他OS原語,這有助於單個節點和整個系統的可伸縮性。

  • 顯式非同步

Orleans程式設計模型使分散式應用程式的非同步特性明確,並指導程式設計師編寫非阻塞非同步程式碼。結合非同步訊息傳遞和高效的排程,無需顯式使用多執行緒,即可實現大規模的分散式並行性和總體吞吐量。