原文:[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 數據中心中,每天服務於約 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%),如圖二。
(圖一)
(圖二)
未來
移植到 .NET Core 后,我們的服務吞吐量增加了一倍,這是一個偉大的決定,並且我們的 .NET Core 之旅不會停止。對於未來,我們正在考慮:
- 升級到 .NET 5.0 以進一步提高性能。
- 移植到 Kestrel,以便我們能夠在 TLS 層攔截連接,以獲得更好的彈性。
- 在我們自己的反向代理中使用 YARP 的組件和最佳實踐,同時也做出回饋。