【翻譯】Orleans 3.0 發佈

image

這是Orleans團隊的帖子。Orleans是用於使用.NET構建分佈式應用程序的跨平臺框架。有關更多信息,請參見
這是Orleans團隊的帖子。Orleans是用於使用.NET構建分佈式應用程序的跨平臺框架。有關更多信息,請參見 https://github.com/dotnet/orleansgit

咱們很高興宣佈Orleans 3.0版本。自Orleans 2.0以來,進行了大量改進和修復,並提供了一些新功能。這些變化是由許多人在各類各樣的場景和環境中在生產中運行基於Orleans的應用程序的經驗所驅動的,也是由全球Orleans社區的聰明才智和熱情所致,他們一直致力於使代碼庫更好,更快,更多。靈活。很是感謝以各類方式爲該版本作出貢獻的全部人!github

自Orleans2.0以來的重大變化

Orleans2.0於18個月前發佈,此後Orleans取得了長足的進步。自2.0版以來的一些標題更改是:web

  • 分佈式ACID事務-不管狀態存儲在何處,多個顆粒均可以加入事務
  • 一個新的調度程序,僅在某些狀況下,其性能就提升了30%以上
  • 基於Roslyn代碼分析的新代碼生成器
  • 重寫集羣成員資格以提升恢復速度
  • (Co-hosting)支持

以及許多其餘許多改進和修復。安全

自開發Orleans 2.0以來,該團隊與.NET團隊密切協做,創建了一個實現或集成某些功能(例如通用主機,命名選項)的良性循環,而後才準備將這些功能歸入.NET。核心版本,「上游」提供反饋和改進,在更高版本中,切換到.NET版本附帶的最終實現。在Orleans 3.0的開發過程當中,這個週期一直持續着,直到Orleans 3.0.0-beta1最終將其做爲.NET 3.0的一部分使用以前,都使用了基岩代碼。一樣,在TCP套接字鏈接上對TLS的支持是做爲Orleans 3.0的一部分實現的,而且打算成爲.NET Core將來版本的一部分。咱們本着開放源源不斷的精神,將這種持續的合做視爲對更大的.NET生態系統的貢獻。服務器

使用用ASP.NET Bedrock替換網絡層

一段時間以來,不管是社區仍是內部合做夥伴,對使用TLS進行安全通訊的支持一直是一個主要問題。在3.0版本中,咱們引入了TLS支持,可經過Microsoft.Orleans.Connections.Security包得到該支持。有關更多信息,請參見TransportLayerSecurity示例。網絡

因爲如何實現Orleans早期版本中的網絡層,實現TLS支持是一項艱鉅的工做:沒法輕鬆地使用來支持SslStream,這是實現TLS的最多見方法。以TLS爲動力,咱們踏上了重寫Orleans網絡層的旅程。框架

Orleans3.0取代了整個網絡層,該層基於ASP.NET團隊的計劃Project Rock之上。Bedrock的目標是幫助開發人員構建快速,強大的網絡客戶端和服務器。asp.net

ASP.NET團隊和Orleans團隊一塊兒設計支持網絡客戶端和服務器,與傳輸無關的抽象,而且可使用中間件進行自定義。這些抽象使咱們可以經過配置更改網絡傳輸,而無需修改內部或特定於Orleans的聯網代碼。Orleans的TLS支持做爲基岩中間件實現,咱們的目的是使之通用,以即可以與.NET生態系統中的其餘人共享。異步

儘管這項工做的推進力是啓用TLS支持,但在咱們的夜間負載測試中,咱們平均看到吞吐量大約提升了30%。分佈式

網絡層的重寫還涉及依賴於替換咱們的自定義緩衝池,MemoryPool 而且在進行此更改時,序列化如今能夠利用的更多優點Span 。之前依賴於經過專用線程調用BlockingCollection 進行阻止的某些代碼路徑如今Channel 用於異步傳遞消息。這樣能夠減小專用線程的數量,從而將工做移至.NET線程池。

自最初發布以來,Orleans的核心線協議一直保持不變。在Orleans 3.0中,咱們增長了對經過協議協商逐步升級網絡協議的支持。Orleans 3.0中添加的協議協商支持可實現未來的加強功能,例如自定義核心序列化程序,同時保持向後兼容性。新網絡協議的一個好處是支持全雙工筒倉到筒倉的鏈接,而不是之前在筒倉之間創建的單工鏈接對。協議版本能夠經過進行配置ConnectionOptions.ProtocolVersion。

經過通用主機共同託管

如今,經過.NET Generic Host能夠比之前更輕鬆地在同一過程當中與其餘框架(如ASP.NET Core)共同託管Orleans 。

這是使用如下命令將Orleans和ASP.NET Core一塊兒添加到主機的示例UseOrleans:

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();

使用通用主機生成器,Orleans將與其餘託管服務共享服務提供商。這將使這些服務能夠訪問Orleans。例如,開發人員能夠將其插入IClusterClient或IGrainFactory插入ASP.NET Core MVC控制器中,並直接從其MVC應用程序調用粒度。

此功能可用於簡化部署拓撲或向現有應用程序添加其餘功能。一些團隊在內部使用聯合託管,經過ASP.NET Core Health Checks將Kubernetes的活躍性和就緒性探針添加到他們的Orleans silos。

可靠性提升

如今,得益於擴展了Gossip,羣集從故障中恢復的速度更快。在之前的Orleans版本中,silos 會向其餘silos 發送成員Gossip消息,指示他們更新成員信息。八卦消息如今包括集羣成員身份的版本化,不變的快照。這樣能夠縮短silos 加入或離開集羣后的收斂時間(例如,在升級,擴展或發生故障後),並減輕共享成員存儲上的爭用,從而加快集羣轉換的速度。故障檢測也獲得了改進,具備更多的診斷消息和改進功能以確保更快,更準確的檢測。故障檢測涉及羣集中的silos ,這些silos 相互協做監視,每一個向其餘silos的子集發送按期運行情況探測。

如今,能夠更一致地處理消息錯誤,從而將提示錯誤傳播回調用者。這有助於開發人員更快地發現錯誤。例如,當消息沒法徹底序列化或反序列化時,詳細的異常將傳播回原始調用方。

加強的可擴展性

Streams 能夠具備自定義數據適配器,從而容許它們以任何格式提取數據。這使開發人員能夠更好地控制Streamitems在存儲中的表示方式。它還使Stream提供者能夠控制如何寫入數據,從而容許Streams與老系統和Orleans服務集成。

Grain擴展容許經過本身的通訊接口附件新的組件,從而在運行時向Grain添加其餘行爲。例如,Orleans事務使用Grain擴展對用戶透明的向Grain中添加事務生命週期方法,如「準備」、「提交」和「停止」。Grain擴展示在也可用於Grain服務和系統目標。

如今,自定義事務狀態能夠聲明其在事務中可以扮演的角色。例如,將事務生命週期事件寫入服務總線隊列的事務狀態實現不能知足事務管理器的職責,由於它(該事務狀態的職責)是隻寫的。

預約義的放置策略如今能夠公開訪問,所以在配置期間能夠替換任何放置控制器。

共同努力

既然Orleans3.0已經發布,咱們就將注意力轉向將來的版本-咱們有一些使人興奮的計劃!快來加入咱們在GitHub和Gitter上熱情友好的社區,幫助咱們實現這些計劃。

Orleans團隊

概要

翻譯:https://devblogs.microsoft.com/dotnet/orleans-3-0/

相關文章
相關標籤/搜索