溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Orleans怎么理解

發(fā)布時間:2022-01-05 17:07:50 來源:億速云 閱讀:162 作者:柒染 欄目:大數(shù)據(jù)

Orleans怎么理解,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、介紹

Orleans是一個框架,提供了一個直接的方法來構(gòu)建分布式高規(guī)模計算應(yīng)用程序

默認可擴展 -》 Orleans處理構(gòu)建分布式系統(tǒng)的復(fù)雜性,使您的應(yīng)用程序能夠擴展到數(shù)百臺服務(wù)器
低延遲 -》 Orleans允許你在內(nèi)存中保持你需要的狀態(tài),所以你的應(yīng)用程序可以快速響應(yīng)傳入的請求。
簡化的并發(fā)性 -》 Orleans允許你編寫簡單的單線程C#代碼,處理異步消息在對象(Grains)之間傳遞的并發(fā)性。

在Orleans,Grains是應(yīng)用程序代碼的基石。Grains是實現(xiàn)一致性接口的.net類的實例。接口的異步方法用于指示Grains可以執(zhí)行哪些操作

public interface IMyGrain : IGrainWithStringKey
{
    Task<string> SayHello(string name);
}

這個實現(xiàn)是在Orleans框架內(nèi)執(zhí)行的:

public class MyGrain : IMyGrain

{

    public Task<string> SayHello(string name)

    {

        return Task.FromResult($"Hello {name}");

    }

}

然后你可以通過獲取一個代理對象(一個Grains參考)來調(diào)用grain,然后調(diào)用這些方法:

var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1");await grain.SayHello("World");

二、背景

云應(yīng)用程序和服務(wù)本質(zhì)上是并行和分布式的。 他們也是互動和動態(tài)的; 通常需要近實時的云實體之間的直接交互。 這樣的應(yīng)用程序今天很難建立。 開發(fā)過程需要專家級程序員,并且隨著工作負載的增長,通常需要昂貴的設(shè)計和體系結(jié)構(gòu)迭代。

當(dāng)今大多數(shù)高規(guī)模的屬性都是作為無狀態(tài)n層服務(wù)的組合而構(gòu)建的,其中大部分應(yīng)用程序邏輯位于中間層。

Orleans怎么理解

雖然該模型允許通過向中間層添加更多服務(wù)器來擴展,但由于大多數(shù)來自前端Web服務(wù)器的中間層請求需要來自存儲的一個或多個讀取,所以受到存儲層的性能和可伸縮性的限制, 更新更加復(fù)雜,并且由于中間層服務(wù)器之間缺乏協(xié)調(diào)而容易發(fā)生并發(fā)問題和沖突。 通常需要無狀態(tài)層中的緩存來獲得可接受的性能,增加復(fù)雜性并引入緩存一致性問題。 無狀態(tài)n層模型的另一個問題是,它不支持中間層公開的各個應(yīng)用實體之間良好的水平通信,這使得難以實現(xiàn)復(fù)雜的業(yè)務(wù)邏輯,多個實體執(zhí)行單獨的操作,作為處理 請求。

二、Orleans 作為一個有狀態(tài)的中間層

Orleans提供了一種構(gòu)建有狀態(tài)中間層的直觀方式,其中各種業(yè)務(wù)邏輯實體顯示為分布在一組服務(wù)器中的不同應(yīng)用程序定義類型的獨立全局可尋址.NET對象(grains)。

Orleans怎么理解

grain類型是一個簡單的.NET類,它實現(xiàn)了一個或多個應(yīng)用程序定義的grain接口。單個grain是應(yīng)用程序定義的grain類的實例,它們是由Orleans運行時自動創(chuàng)建的,在服務(wù)器上根據(jù)需要處理這些grain的請求。grain自然映射到大多數(shù)應(yīng)用程序?qū)嶓w,例如用戶,設(shè)備,會話,庫存,訂單等等,這使得構(gòu)建面向?qū)ο蟮臉I(yè)務(wù)邏輯變得非常容易,而在一組服務(wù)器上透明地擴展。每個grain在由其應(yīng)用邏輯選擇的grain類型內(nèi)具有穩(wěn)定的邏輯身份(密鑰),例如,用戶電子郵件或設(shè)備ID或庫存SKU代碼。 Orleans保證每個單獨grain的單線程執(zhí)行,從而保護應(yīng)用程序邏輯免受并發(fā)和競爭的危險。在微服務(wù)領(lǐng)域,Orleans被用作實現(xiàn)微服務(wù)的框架,微服務(wù)可以由開發(fā)人員選擇的微服務(wù)部署/管理解決方案進行部署和管理。

三、Grain生命周期

grain可以在存儲或內(nèi)存狀態(tài)或兩者的組合中具有持續(xù)狀態(tài)。任何grain都可以通過任何其他grain或前端(客戶)通過使用目標(biāo)grain的邏輯身份來調(diào)用,而不需要創(chuàng)建或?qū)嵗繕?biāo)grain。Orleans的編程模型使grain看起來好像在整個內(nèi)存中。實際上,grain從整個生命周期開始,只是存儲持久狀態(tài),到在內(nèi)存中被實例化,到從內(nèi)存中移除

Orleans怎么理解

grain需要工作時,Orleans在后臺實例化(激活)grain,當(dāng)它們閑置太久時,將它們從內(nèi)存中移除(停用)以回收硬件資源。運行時的grain生命周期管理工作對應(yīng)用程序代碼是透明的,將其從分布式資源管理的復(fù)雜任務(wù)中解放出來。應(yīng)用程序邏輯可以用所有可用的“地址空間”來編寫,而無需使用硬件資源來將所有的grain同時存儲在內(nèi)存中,這在概念上類似于虛擬內(nèi)存在操作系統(tǒng)中的工作方式。此外,grain的虛擬屬性允許Orleans處理服務(wù)器故障,這主要是透明地處理應(yīng)用程序邏輯,因為在故障被檢測到的情況下,在故障服務(wù)器上執(zhí)行的grain會自動在集群中的其他服務(wù)器上重新實例化。

Orleans怎么理解

 四、虛擬Actors

Orleans的實施是基于20世紀(jì)70年代以來的Actor 模型。然而,與Erlang或Akka等傳統(tǒng)Actor 系統(tǒng)中的Actor 不同,Orleans grain是虛擬Actor 。最大的不同是,grain的物理實例被完全抽象出來,并由Orleans運行時自動管理。虛擬Actor 模型更適合于像云服務(wù)這樣的大規(guī)模動態(tài)工作負載,并且是Orleans的主要創(chuàng)新。

五、Orleans的起源

Orleans創(chuàng)建于微軟研究院,設(shè)計用于云計算。自2011年以來,它已被廣泛地應(yīng)用在云計算和前提由幾個微軟產(chǎn)品組,尤其是通過游戲工作室,如343產(chǎn)業(yè)和光環(huán)背后的聯(lián)盟作為云服務(wù)平臺和戰(zhàn)爭機器4 4/5,以及許多其他公司。

Orleans在2015年1月是開源的,吸引了許多開發(fā)人員,他們形成了一個最活躍的開源社區(qū)。凈生態(tài)系統(tǒng)。在開發(fā)人員社區(qū)和微軟的Orleans團隊之間的積極協(xié)作中,每天都會增加和改進特性。微軟的研究繼續(xù)與Orleans團隊合作,以帶來新的主要特征,如地理分布、索引和分布式事務(wù),這正在推動藝術(shù)的發(fā)展。對許多人來說,Orleans已經(jīng)成為構(gòu)建分布式系統(tǒng)和云服務(wù)的首選框架。網(wǎng)絡(luò)開發(fā)者。

六、優(yōu)點

Orleans的主要優(yōu)點是:開發(fā)人員的生產(chǎn)力,即使是非專業(yè)的程序員;在默認情況下,透明的可伸縮性(輕松實現(xiàn)伸縮)。我們將在下面擴展這些優(yōu)點。

1,開發(fā)人員生產(chǎn)力

Orleans編程模型通過提供以下關(guān)鍵抽象,保證和系統(tǒng)服務(wù),提高了專家和非專業(yè)程序員的工作效率。

  • 熟悉的面向?qū)ο缶幊?OOP)范式。 Actors是. net類,它使用異步方法實現(xiàn)聲明的. net actor接口。這樣,參與者就可以作為遠程對象出現(xiàn),而這些對象的方法可以直接調(diào)用。這為程序員提供了熟悉的OOP范式,方法是將方法調(diào)用轉(zhuǎn)換為消息,將它們路由到正確的端點,調(diào)用目標(biāo)參與者的方法,以完全透明的方式處理故障和角落情況。

  • 單線程執(zhí)行的Actors。運行時保證了一個參與者一次不會在多個線程上執(zhí)行。與其他參與者的隔離相結(jié)合,程序員從不在actor級別上面對并發(fā),因此永遠不需要使用鎖或其他同步機制來控制對共享數(shù)據(jù)的訪問。僅這一特性就使得分布式應(yīng)用程序的開發(fā)成為了非專家程序員的專利。

  • 透明激活。運行時激活一個Actor,只是在有消息要處理時才啟動。這將清晰地分離了創(chuàng)建引用到Actor的概念,它是由應(yīng)用程序代碼可見和控制的,并且在內(nèi)存中對Actor進行物理激活,這對應(yīng)用程序是透明的。它決定何時禁用或激活一個Actor;應(yīng)用程序可以不間斷地訪問邏輯創(chuàng)建的Actor的完整“內(nèi)存空間”,不管它們是否在特定時間點的物理內(nèi)存中。透明激活能夠通過在硬件資源池中放置和遷移Actor來實現(xiàn)動態(tài)的、自適應(yīng)的負載均衡。該特性是傳統(tǒng)Actor模型的一個顯著改進,在此模型中,Actor的生存期是應(yīng)用程序管理的。

  • 位置透明性。程序員用來調(diào)用Actor的方法或傳遞給其他組件的Actor引用(代理對象)只包含了Actor的邏輯標(biāo)識。將Actor的邏輯標(biāo)識翻譯到它的物理位置和相應(yīng)的消息路由是由Orleans 運行時完成的。應(yīng)用程序代碼與Actors進行通信,而忽略它們的物理位置,由于故障或資源管理,可能會隨著時間的推移而改變,或者因為在調(diào)用時,Actor會被禁用。

  • 與持久性存儲的透明集成。Orleans允許將Actors的內(nèi)存狀態(tài)的聲明映射到持久性存儲。它同步更新,透明地保證調(diào)用者只有在持久狀態(tài)成功更新后才會收到結(jié)果。擴展和/或自定義現(xiàn)有的持久存儲提供程序集是直接的。

  • 錯誤自動傳播。運行時通過異步和分布式的try / catch的語義自動將未處理的錯誤向上傳遞到調(diào)用鏈中。因此,錯誤不會在應(yīng)用程序中丟失。這允許程序員在適當(dāng)?shù)牡胤椒胖缅e誤處理邏輯,而不需要在每個層次上手工傳播錯誤。 

2,默認的透明可伸縮性

Orleans編程模型旨在指導(dǎo)程序員通過幾個數(shù)量級來擴展他們的應(yīng)用程序或服務(wù)。這是通過結(jié)合已被證明的最佳實踐和模式來完成的,并提供了較低級別系統(tǒng)功能的有效實現(xiàn)。下面是一些關(guān)鍵的因素,它們支持可伸縮性和性能。 

  • 應(yīng)用狀態(tài)的隱式grain分區(qū)。通過將Actors作為直接可尋址的實體,程序員將隱式地破壞其應(yīng)用程序的整體狀態(tài)。雖然Orleans編程模型沒有規(guī)定Actor的大小,在大多數(shù)情況下是有意義有一個相對大量的actors——百萬甚至更多——應(yīng)用程序的每個代表一個自然實體,如用戶帳戶,一個購買訂單,等。Actors是單獨可尋址和他們的物理位置抽象的運行時,Orleans在平衡負載和以透明和通用的方式處理熱點問題方面具有極大的靈活性,無需任何應(yīng)用程序開發(fā)人員的考慮。

  • 自適應(yīng)資源管理。與Actors作任何假設(shè)本地其他Actors他們相互作用,由于位置透明性,運行時可以管理和調(diào)整可用HW資源配置在一個非常動態(tài)的方式通過細grain決定位置/ Actors遷移反應(yīng)的計算集群負載和交流模式?jīng)]有失敗傳入的請求。通過創(chuàng)建特定actor的多個副本,運行時可以在必要時增加Actor的吞吐量,而無需對應(yīng)用程序代碼進行任何更改。

  • 多路復(fù)用通信。Orleans 的Actors 有邏輯端點,它們之間的消息傳遞是通過一組固定的全部物理連接(TCP套接字)進行復(fù)用的。這允許運行時在每個actor中承載一個非常大的(數(shù)百萬)可尋址的實體。此外,actor的激活/注銷不需要注冊/取消物理端點的注冊,例如TCP端口或HTTP URL,甚至關(guān)閉TCP連接。

  • 有效的調(diào)度。運行時調(diào)度大量單線程的Actors在一個自定義線程池中執(zhí)行,每個線程池都有一個物理處理器內(nèi)核。以非阻塞延續(xù)的方式編寫的Actor代碼(對Orleans 編程模型的需求)應(yīng)用程序代碼以非常高效的“協(xié)作”的多線程方式運行,并且沒有爭用。這使得系統(tǒng)能夠達到很高的吞吐量,并在非常高的CPU利用率(高達90%以上)的情況下運行,并具有很大的穩(wěn)定性。事實上,系統(tǒng)中Actors的數(shù)量增長和負載不會導(dǎo)致額外的線程或其他OS原語幫助單個節(jié)點和整個系統(tǒng)的可伸縮性。(在操作系統(tǒng)中叫原語,是執(zhí)行過程中不可被打斷的基本操作,你可以理解為一段代碼,這段代碼在執(zhí)行過程中不能被打斷)

  • 顯式異步。Orleans編程模型使分布式應(yīng)用程序的異步性質(zhì)更加明確,并指導(dǎo)程序員編寫非阻塞異步代碼。與異步消息傳遞和高效調(diào)度相結(jié)合,這使得在沒有顯式使用多線程的情況下實現(xiàn)了大量的分布式并行性和總體吞吐量。

關(guān)于Orleans怎么理解問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI