1. 程式人生 > ># [翻譯]Azure 閘道器遷移至 .NET Core 3.1 效能提升一倍

# [翻譯]Azure 閘道器遷移至 .NET Core 3.1 效能提升一倍

原文:[[Azure Active Directory’s gateway is on .NET Core 3.1!](https://devblogs.microsoft.com/dotnet/azure-active-directorys-gateway-service-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 資料中心中,每天服務於約 1150 億次請求。一直以來,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%),如圖二。 (圖一) ![](https://img2020.cnblogs.com/blog/23440/202101/23440-20210119083535462-719604208.png) (圖二) ![](https://img2020.cnblogs.com/blog/23440/202101/23440-20210119083636343-333875553.png) ### 未來 移植到 .NET Core 後,我們的服務吞吐量增加了一倍,這是一個偉大的決定,並且我們的 .NET Core 之旅不會停止。對於未來,我們正在考慮: - 升級到 .NET 5.0 以進一步提高效能。 - 移植到 Kestrel,以便我們能夠在 TLS 層攔截連線,以獲得更好的彈性。 - 在我們自己的反向代理中使用 [YARP](https://microsoft.github.io/reverse-proxy/) 的元件和最佳實踐,同時也做出回饋。