您好,登錄后才能下訂單哦!
Orleans怎么理解,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、介紹
Orleans是一個框架,提供了一個直接的方法來構建分布式高規模計算應用程序
默認可擴展 -》 Orleans處理構建分布式系統的復雜性,使您的應用程序能夠擴展到數百臺服務器。
低延遲 -》 Orleans允許你在內存中保持你需要的狀態,所以你的應用程序可以快速響應傳入的請求。
簡化的并發性 -》 Orleans允許你編寫簡單的單線程C#代碼,處理異步消息在對象(Grains)之間傳遞的并發性。
在Orleans,Grains是應用程序代碼的基石。Grains是實現一致性接口的.net類的實例。接口的異步方法用于指示Grains可以執行哪些操作
public interface IMyGrain : IGrainWithStringKey { Task<string> SayHello(string name); }
這個實現是在Orleans框架內執行的:
public class MyGrain : IMyGrain
{
public Task<string> SayHello(string name)
{
return Task.FromResult($"Hello {name}");
}
}
然后你可以通過獲取一個代理對象(一個Grains參考)來調用grain,然后調用這些方法:
var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1");await grain.SayHello("World");
二、背景
云應用程序和服務本質上是并行和分布式的。 他們也是互動和動態的; 通常需要近實時的云實體之間的直接交互。 這樣的應用程序今天很難建立。 開發過程需要專家級程序員,并且隨著工作負載的增長,通常需要昂貴的設計和體系結構迭代。
當今大多數高規模的屬性都是作為無狀態n層服務的組合而構建的,其中大部分應用程序邏輯位于中間層。
雖然該模型允許通過向中間層添加更多服務器來擴展,但由于大多數來自前端Web服務器的中間層請求需要來自存儲的一個或多個讀取,所以受到存儲層的性能和可伸縮性的限制, 更新更加復雜,并且由于中間層服務器之間缺乏協調而容易發生并發問題和沖突。 通常需要無狀態層中的緩存來獲得可接受的性能,增加復雜性并引入緩存一致性問題。 無狀態n層模型的另一個問題是,它不支持中間層公開的各個應用實體之間良好的水平通信,這使得難以實現復雜的業務邏輯,多個實體執行單獨的操作,作為處理 請求。
二、Orleans 作為一個有狀態的中間層
Orleans提供了一種構建有狀態中間層的直觀方式,其中各種業務邏輯實體顯示為分布在一組服務器中的不同應用程序定義類型的獨立全局可尋址.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從整個生命周期開始,只是存儲持久狀態,到在內存中被實例化,到從內存中移除
grain需要工作時,Orleans在后臺實例化(激活)grain,當它們閑置太久時,將它們從內存中移除(停用)以回收硬件資源。運行時的grain生命周期管理工作對應用程序代碼是透明的,將其從分布式資源管理的復雜任務中解放出來。應用程序邏輯可以用所有可用的“地址空間”來編寫,而無需使用硬件資源來將所有的grain同時存儲在內存中,這在概念上類似于虛擬內存在操作系統中的工作方式。此外,grain的虛擬屬性允許Orleans處理服務器故障,這主要是透明地處理應用程序邏輯,因為在故障被檢測到的情況下,在故障服務器上執行的grain會自動在集群中的其他服務器上重新實例化。
四、虛擬Actors
Orleans的實施是基于20世紀70年代以來的Actor 模型。然而,與Erlang或Akka等傳統Actor 系統中的Actor 不同,Orleans grain是虛擬Actor 。最大的不同是,grain的物理實例被完全抽象出來,并由Orleans運行時自動管理。虛擬Actor 模型更適合于像云服務這樣的大規模動態工作負載,并且是Orleans的主要創新。
五、Orleans的起源
Orleans創建于微軟研究院,設計用于云計算。自2011年以來,它已被廣泛地應用在云計算和前提由幾個微軟產品組,尤其是通過游戲工作室,如343產業和光環背后的聯盟作為云服務平臺和戰爭機器4 4/5,以及許多其他公司。
Orleans在2015年1月是開源的,吸引了許多開發人員,他們形成了一個最活躍的開源社區。凈生態系統。在開發人員社區和微軟的Orleans團隊之間的積極協作中,每天都會增加和改進特性。微軟的研究繼續與Orleans團隊合作,以帶來新的主要特征,如地理分布、索引和分布式事務,這正在推動藝術的發展。對許多人來說,Orleans已經成為構建分布式系統和云服務的首選框架。網絡開發者。
六、優點
Orleans的主要優點是:開發人員的生產力,即使是非專業的程序員;在默認情況下,透明的可伸縮性(輕松實現伸縮)。我們將在下面擴展這些優點。
1,開發人員生產力
Orleans編程模型通過提供以下關鍵抽象,保證和系統服務,提高了專家和非專業程序員的工作效率。
熟悉的面向對象編程(OOP)范式。 Actors是. net類,它使用異步方法實現聲明的. net actor接口。這樣,參與者就可以作為遠程對象出現,而這些對象的方法可以直接調用。這為程序員提供了熟悉的OOP范式,方法是將方法調用轉換為消息,將它們路由到正確的端點,調用目標參與者的方法,以完全透明的方式處理故障和角落情況。
單線程執行的Actors。運行時保證了一個參與者一次不會在多個線程上執行。與其他參與者的隔離相結合,程序員從不在actor級別上面對并發,因此永遠不需要使用鎖或其他同步機制來控制對共享數據的訪問。僅這一特性就使得分布式應用程序的開發成為了非專家程序員的專利。
透明激活。運行時激活一個Actor,只是在有消息要處理時才啟動。這將清晰地分離了創建引用到Actor的概念,它是由應用程序代碼可見和控制的,并且在內存中對Actor進行物理激活,這對應用程序是透明的。它決定何時禁用或激活一個Actor;應用程序可以不間斷地訪問邏輯創建的Actor的完整“內存空間”,不管它們是否在特定時間點的物理內存中。透明激活能夠通過在硬件資源池中放置和遷移Actor來實現動態的、自適應的負載均衡。該特性是傳統Actor模型的一個顯著改進,在此模型中,Actor的生存期是應用程序管理的。
位置透明性。程序員用來調用Actor的方法或傳遞給其他組件的Actor引用(代理對象)只包含了Actor的邏輯標識。將Actor的邏輯標識翻譯到它的物理位置和相應的消息路由是由Orleans 運行時完成的。應用程序代碼與Actors進行通信,而忽略它們的物理位置,由于故障或資源管理,可能會隨著時間的推移而改變,或者因為在調用時,Actor會被禁用。
與持久性存儲的透明集成。Orleans允許將Actors的內存狀態的聲明映射到持久性存儲。它同步更新,透明地保證調用者只有在持久狀態成功更新后才會收到結果。擴展和/或自定義現有的持久存儲提供程序集是直接的。
錯誤自動傳播。運行時通過異步和分布式的try / catch的語義自動將未處理的錯誤向上傳遞到調用鏈中。因此,錯誤不會在應用程序中丟失。這允許程序員在適當的地方放置錯誤處理邏輯,而不需要在每個層次上手工傳播錯誤。
2,默認的透明可伸縮性
Orleans編程模型旨在指導程序員通過幾個數量級來擴展他們的應用程序或服務。這是通過結合已被證明的最佳實踐和模式來完成的,并提供了較低級別系統功能的有效實現。下面是一些關鍵的因素,它們支持可伸縮性和性能。
應用狀態的隱式grain分區。通過將Actors作為直接可尋址的實體,程序員將隱式地破壞其應用程序的整體狀態。雖然Orleans編程模型沒有規定Actor的大小,在大多數情況下是有意義有一個相對大量的actors——百萬甚至更多——應用程序的每個代表一個自然實體,如用戶帳戶,一個購買訂單,等。Actors是單獨可尋址和他們的物理位置抽象的運行時,Orleans在平衡負載和以透明和通用的方式處理熱點問題方面具有極大的靈活性,無需任何應用程序開發人員的考慮。
自適應資源管理。與Actors作任何假設本地其他Actors他們相互作用,由于位置透明性,運行時可以管理和調整可用HW資源配置在一個非常動態的方式通過細grain決定位置/ Actors遷移反應的計算集群負載和交流模式沒有失敗傳入的請求。通過創建特定actor的多個副本,運行時可以在必要時增加Actor的吞吐量,而無需對應用程序代碼進行任何更改。
多路復用通信。Orleans 的Actors 有邏輯端點,它們之間的消息傳遞是通過一組固定的全部物理連接(TCP套接字)進行復用的。這允許運行時在每個actor中承載一個非常大的(數百萬)可尋址的實體。此外,actor的激活/注銷不需要注冊/取消物理端點的注冊,例如TCP端口或HTTP URL,甚至關閉TCP連接。
有效的調度。運行時調度大量單線程的Actors在一個自定義線程池中執行,每個線程池都有一個物理處理器內核。以非阻塞延續的方式編寫的Actor代碼(對Orleans 編程模型的需求)應用程序代碼以非常高效的“協作”的多線程方式運行,并且沒有爭用。這使得系統能夠達到很高的吞吐量,并在非常高的CPU利用率(高達90%以上)的情況下運行,并具有很大的穩定性。事實上,系統中Actors的數量增長和負載不會導致額外的線程或其他OS原語幫助單個節點和整個系統的可伸縮性。(在操作系統中叫原語,是執行過程中不可被打斷的基本操作,你可以理解為一段代碼,這段代碼在執行過程中不能被打斷)
顯式異步。Orleans編程模型使分布式應用程序的異步性質更加明確,并指導程序員編寫非阻塞異步代碼。與異步消息傳遞和高效調度相結合,這使得在沒有顯式使用多線程的情況下實現了大量的分布式并行性和總體吞吐量。
關于Orleans怎么理解問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。