[翻譯]Azure 網關遷移至 .NET Core 3.1 性能提升一倍

原文:[Azure Active Directory』s gateway is on .NET Core 3.1!]

Azure Active Directory 的網關服務是一個反向代理,它為構成 Azure AD 的數百個服務提供前置服務。如果你使用過 office.com、outlook.com、azure.com 或 xbox.live.com 等服務,那麼你已經使用了 Azure AD 的網關。網關為 Azure AD 中的服務提供了 TLS 終止、自動故障切換/重試、地理位置臨近度路由、節流和 tarpitting 等功能。該網關存在於全球超過 53 個 Azure 數據中心中,每天服務於約 115 億次請求。一直以來,Azure AD 的網關都運行在 .NET Framework 4.6.2 上,直到2020年9月,我們把它遷移到了.NET Core 3.1上。

移植到 .NET Core 的動機

網關的執行規模導致計算資源的大量消耗,而計算資源的消耗又要花費大量的金錢。尋找降低服務執行成本的方法一直是我們團隊的一個關鍵目標。而 .NET Core 對性能的大量改進引起了我們的注意,尤其是 TechEmpower 將ASP.NET Core 列為全球最快的 Web 框架之一。我們在 .NET Core 上的對網關原型運行了基準測試,測試結果讓人很容易做出決定:我們必須移植到 .NET Core 上。

.NET Core 的性能改進能否轉化為現實中的成本節約?

絕對是的。在 Azure AD 網關這個案例中,我們能夠削減 50% 的 CPU 成本。
這個網關曾經在 IIS 上運行並採用 .NET Framework 4.6.2。如今,它運行在 .NET Core 3.1 的 IIS 上。
下圖顯示,與 .NET Framework 4.6.2 相比,我們在 .NET Core 3.1 上的 CPU 使用量減少了一半(有效地將我們的吞吐量提高了一倍)。
由於吞吐量的提升,使得我們能夠將集群規模從 4 萬個核心減少到約 2 萬個核心(減少50%),如圖二。

(圖一)

(圖二)

未來

移植到 .NET Core 後,我們的服務吞吐量增加了一倍,這是一個偉大的決定,並且我們的 .NET Core 之旅不會停止。對於未來,我們正在考慮:

  • 升級到 .NET 5.0 以進一步提高性能。
  • 移植到 Kestrel,以便我們能夠在 TLS 層攔截連接,以獲得更好的彈性。
  • 在我們自己的反向代理中使用 YARP 的組件和最佳實踐,同時也做出回饋。