日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Orleans 3.0 为我们带来了什么

發(fā)布時(shí)間:2023/12/4 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Orleans 3.0 为我们带来了什么 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文:https://devblogs.microsoft.com/dotnet/orleans-3-0/

作者:Reuben Bond,Orleans首席軟件開(kāi)發(fā)工程師

翻譯:艾心

這是一篇來(lái)自O(shè)rleans團(tuán)隊(duì)的客座文章,Orleans是一個(gè)使用.NET創(chuàng)建分布式應(yīng)用的跨平臺(tái)框架。獲取更多信息,請(qǐng)查看https://github.com/dotnet/orleans。

我們激動(dòng)的宣布Orleans3.0的發(fā)布。自O(shè)rleans2.0以來(lái),加入了大量的改進(jìn)與修復(fù),以及一些新特性。這些變化是由許多人在生產(chǎn)環(huán)境的大量場(chǎng)景中運(yùn)行基于Orleans應(yīng)用程序的經(jīng)驗(yàn),以及全球Orleans社區(qū)的智慧和熱情推動(dòng)的,他們致力于使代碼庫(kù)更好、更快、更靈活。非常感謝所有以各種方式為這個(gè)版本做出貢獻(xiàn)的人。

自O(shè)rleans 2.0以來(lái)的關(guān)鍵變化:


Orleans 2.0發(fā)布于18個(gè)多月前,從那時(shí)起Orleans便取得了巨大的進(jìn)步。以下是自O(shè)rleans 2.0以來(lái)的重大變化:

·???????分布式ACID事務(wù)-多個(gè)Grains加入到一個(gè)事務(wù)中,不管他們的狀態(tài)存儲(chǔ)在哪里

·???????一個(gè)新的調(diào)度器,在某些情況下,僅它就可以將性能提升30%以上

·???????一種基于Roslyn代碼分析的新的代碼生成器

·???????重寫(xiě)集群成員以提升恢復(fù)速度

·???????聯(lián)合(Co-hosting)支持

還有很多其他的提升以及修復(fù)。

自從致力于開(kāi)發(fā)Orleans2.0以來(lái),團(tuán)隊(duì)就建立了一套實(shí)現(xiàn)或者繼承某些功能的良性循環(huán),包括通用主機(jī)、命名選項(xiàng),在準(zhǔn)備將這些功能好成為.NETCore的一部分之前與.NET團(tuán)隊(duì)密切合作、提供反饋和改進(jìn)“upstream”,在以后的版本中會(huì)切換到.NET版本附帶的最終實(shí)現(xiàn)。在開(kāi)發(fā)Orleans 3.0期間,這個(gè)循環(huán)繼續(xù)著,在最終發(fā)布為.NET Core 3.0的一部分之前,Orleans 3.0.0-beta1使用了Bedrock代碼。類(lèi)似的,TCP套接字連接對(duì)TLS的支持是作為Orleans 3.0的一部分實(shí)現(xiàn)的,并計(jì)劃成為.NET Core未來(lái)版本的一部分。我們把這種持續(xù)的合作視為是我們對(duì)更大的.NET生態(tài)系統(tǒng)的貢獻(xiàn),這是真正的開(kāi)源精神。

使用ASP.NET Bedrock替換網(wǎng)絡(luò)層


一段時(shí)間以來(lái),社區(qū)和內(nèi)部合作伙伴一直要求支持與TLS的安全通信。在3.0版本中,我們引入了TLS支持,可以通過(guò)Microsoft.Orleans.Connections.Security包獲取。有關(guān)更多信息,請(qǐng)查看TransportLayerSecurity范例。實(shí)現(xiàn)TLS支持之所以是一個(gè)重大任務(wù)要?dú)w因于上一個(gè)版本中Orleans網(wǎng)絡(luò)層的實(shí)現(xiàn)方式:它并不容易適應(yīng)使用SslStream的方式,而SslStream又是實(shí)現(xiàn)TLS最常用的方法。在TLS的推動(dòng)下,我們著手重寫(xiě)Orleans的網(wǎng)絡(luò)層。

Orleans 3.0使用了一個(gè)來(lái)自ASP.NET團(tuán)隊(duì)倡議的基于Bedrock項(xiàng)目構(gòu)建的網(wǎng)絡(luò)層替換了自己的整個(gè)網(wǎng)絡(luò)層,Bedrock旨在幫助開(kāi)發(fā)者構(gòu)建快速的、健壯的網(wǎng)絡(luò)客戶(hù)端和服務(wù)器。

ASP.NET團(tuán)隊(duì)和Orleans團(tuán)隊(duì)一同合作設(shè)計(jì)了同時(shí)支持網(wǎng)絡(luò)客戶(hù)端和服務(wù)端的抽象,這些抽象與傳輸無(wú)關(guān),并且可以通過(guò)中間件實(shí)現(xiàn)定制化。這些抽象允許我們通過(guò)配置修改網(wǎng)絡(luò),而不用修改內(nèi)部的、特定于Orleans的網(wǎng)絡(luò)代碼。Orleans的TLS支持是作為Bedrock中間件實(shí)現(xiàn)的,我們的目的是使之通用,以便與.NET生態(tài)圈的其他人共享。

盡管這項(xiàng)工作是的動(dòng)力是啟用TLS支持,但是在夜間負(fù)載測(cè)試中,我們看到了平均吞吐量提升了大約30%。

網(wǎng)絡(luò)層重寫(xiě)還包括借助使用MemoryPool<byte>替換我們的自定義緩存池,在進(jìn)行這項(xiàng)修改時(shí),序列化更多的使用到了Span<T>。有一些代碼路徑之前是依靠調(diào)用BlockingCollection<T>的專(zhuān)有線(xiàn)程進(jìn)行阻塞,現(xiàn)在使用Channel<T>來(lái)異步傳輸消息。這將導(dǎo)致更少的專(zhuān)有線(xiàn)程占用,同時(shí)將工作移動(dòng)到了.NET線(xiàn)程池。

Orleans的核心連接協(xié)議自發(fā)布以來(lái)一直都是固定的。在Orleans3.0中,我們已經(jīng)增加了通過(guò)協(xié)議協(xié)商(negotiation)逐步更新網(wǎng)絡(luò)層的支持。Orleans 3.0中添加的協(xié)議協(xié)商支持未來(lái)的功能增強(qiáng),如定制核心序列化器,同時(shí)向后保持兼容性。新的網(wǎng)絡(luò)協(xié)議的一個(gè)優(yōu)點(diǎn)是支持全雙工Silo到Silo的連接,而不是以前在Silo之間建立的單工連接對(duì)。協(xié)議版本可以通過(guò)ConnectionOptions.ProtocolVersion進(jìn)行配置。

通過(guò)通用主機(jī)進(jìn)行聯(lián)合托管


Orleans與其他框架共同進(jìn)行聯(lián)合托管,如ASP.NETCore,得益于.NET通用主機(jī),相同的進(jìn)程中(使用聯(lián)合托管)現(xiàn)在要比以前容易多了。

下面是一個(gè)使用UseOrleans將Orleans和ASP.NETCore一起添加到主機(jī)的例子:

var host = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => { // Configure ASP.NET Core webBuilder.UseStartup<Startup>(); }) .UseOrleans(siloBuilder => { // Configure Orleans siloBuilder.UseLocalHostClustering(); }) .ConfigureLogging(logging => { /* Configure cross-cutting concerns such as logging */ }) .ConfigureServices(services => { /* Configure shared services */ }) .UseConsoleLifetime() .Build();
// Start the host and wait for it to stop.await host.RunAsync();

使用通過(guò)主機(jī)構(gòu)建器,Orleans將與其他托管程序共享同一個(gè)服務(wù)提供者。這使得這些服務(wù)可以訪(fǎng)問(wèn)Orleans。例如,一個(gè)開(kāi)發(fā)者可以注入IClusterClient或者IGrainFactory到ASP.NETCore MVC Controller中,然后從MVC應(yīng)用中直接調(diào)用Grains。

這個(gè)功能可以簡(jiǎn)化你的部署拓?fù)浠蛘呦颥F(xiàn)有程序中額外添加功能。一些團(tuán)隊(duì)內(nèi)部使用聯(lián)合托管,通過(guò)ASP.NET Core健康檢查將Kubernetes活躍性和就緒性探針添加到其Orleans Silo中。

可靠性提高


得益于擴(kuò)展了Gossip,集群現(xiàn)在可以更快的從失敗中恢復(fù)。在以前的Orleans版本中,Silo會(huì)向其他Silo發(fā)送成員Gossip信息,指示他們更新成員信息。現(xiàn)在Gossip消息包括集群成員的版本化、不可變快照。這樣可以縮短Silo加入或者離開(kāi)集群的收斂時(shí)間(例如在更新、擴(kuò)展或者失敗后),并減輕共享成員存儲(chǔ)上的爭(zhēng)用,從而加快集群轉(zhuǎn)換的速度。故障檢測(cè)也得到了改進(jìn),利用更多的診斷信息和改進(jìn)功能以確保更快、更準(zhǔn)確的檢測(cè)。故障檢測(cè)涉及集群中的Silo,他們相互監(jiān)控,每個(gè)Silo會(huì)定期向其他Silo的子集發(fā)送健康探測(cè)。Silo和客戶(hù)端現(xiàn)在還主動(dòng)與已聲明為已失效的Silo的連接斷開(kāi),它們將拒絕與此類(lèi)Silo的連接。

現(xiàn)在,消息錯(cuò)誤得到了更一致的處理,從而將錯(cuò)誤提示信息傳播回調(diào)用者。這有助于開(kāi)發(fā)者更快地發(fā)現(xiàn)錯(cuò)誤。例如,當(dāng)消息無(wú)法被完全序列化或者反序列化時(shí),詳細(xì)的異常信息將會(huì)被返回到原始調(diào)用方。

可擴(kuò)展性增強(qiáng)


現(xiàn)在,Streams可以有自定義的數(shù)據(jù)適配器,從而允許他們以任何格式提取數(shù)據(jù)。這使得開(kāi)發(fā)人員更好的控制Streamitems在存儲(chǔ)中的表示方式。他還使Stream提供者可以控制如何寫(xiě)入數(shù)據(jù),從而允許Streams與老的系統(tǒng)和Orleans服務(wù)集成。

Grain擴(kuò)展允許通過(guò)自己的通信接口附件新的組件,從而在運(yùn)行時(shí)向Grain添加其他行為。例如,Orleans事務(wù)使用Grain擴(kuò)展對(duì)用戶(hù)透明的向Grain中添加事務(wù)生命周期方法,如“準(zhǔn)備”、“提交”和“中止”。Grain擴(kuò)展現(xiàn)在也可用于Grain服務(wù)和系統(tǒng)目標(biāo)。

現(xiàn)在,自定義事務(wù)狀態(tài)可以聲明其在事務(wù)中能夠扮演的角色。例如,將事務(wù)生命周期事件寫(xiě)入服務(wù)總線(xiàn)隊(duì)列的事務(wù)狀態(tài)實(shí)現(xiàn)不能滿(mǎn)足事務(wù)管理器的職責(zé),因?yàn)樗?#xff08;該事務(wù)狀態(tài)的職責(zé))是只寫(xiě)的。

由于預(yù)定義的放置策略現(xiàn)在可以公開(kāi)訪(fǎng)問(wèn),因此在配置期間可以替換任何放置控制器。

共同努力


既然Orleans 3.0已經(jīng)發(fā)布,我們也就會(huì)將注意力轉(zhuǎn)向未來(lái)的版本-我們有一些令人興奮的計(jì)劃!快來(lái)加入我們?cè)贕itHub和Gitter上的社區(qū),幫助我們實(shí)現(xiàn)這些計(jì)劃。

總結(jié)

以上是生活随笔為你收集整理的Orleans 3.0 为我们带来了什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。