Bing.com 已採用 Windows Server 2012 進行運作!

一直以來 Microsoft 都在網際網路上運作多樣服務,但是就在幾年前情況發生轉變,也是我們 CEO Steve Ballmer 的至理名言“公司目前正在孤注一擲。雲端運算! 我們需要來一同來面對。”我們應該要同舟共濟,朝著同一個方向努力,並透過互相學習的方式來傳遞最佳的雲端產品。我們正從目前 Windows Azure 雲端服務中總結相關管理經驗,並且將其融入到我們的產品當中進行改進。在我們規劃及研發 Windows Server 2012 期間,我們在雲端服務上花費了大量的時間,以瞭解雲端服務中的相關的優點及缺點為何。當您以我們的規模運作服務時,任何一個小問題都將會被無限放大,因此每一次的改進都有著極大的效益。我們將這些經驗轉變成您目前看到的許多功能,這些功能包括自動化機制、支援資料中心拓撲架構、高可用性、最小化平均故障檢測時間 (MTTD)/平均故障復原時間 (MTTR)…等。在今天的部落格文章當中,Bing 團隊的軟體開發工程師 Mukul Sabharwal,將會討論 Windows Server 2012 的一些功能以及對 Bing 服務的影響,同時說明為何 Bing 正在以最快的速度進行應用和部署 Windows Server 2012。正如您所看到的,Windows Server 2012 是真正針對雲端環境所優化的作業系統。  
Cheers !

Jeffrey

在公佈最新 Windows Server 2012 RC版本時,Bing.com 團隊同時也考慮要如何才能應用並受惠於該作業系統的相關新功能。Bing.com為遍及全球各地資料中心,並且運作在成千上萬台電腦主機上的雲端服務。效能對於 Bing 雲端服務來說非常關鍵。Bing 每秒鐘要為數千個使用者查詢請求提供服務,而使用者則要求查詢結果的準確性和回應速度。  
我們在部署 Windows Server 2012 時利用四種關鍵的新功能,包括:

  • 內建於 Windows Server 2012 中的 Microsoft .NET Framework 4.5,包括 後台垃圾回收機制和相關延遲時間改善功能
  • 改善並加快啟動時的效能反應 (在 .NET 4.5 中啟用多核心 JIT 功能)
  • 針對由 .NET 即時編譯的 64 位元應用程式收集及堆疊功能
  • 評估 Hyper-V 3.0(Window Server 2012 中 Hyper-V 版本)

預先安裝 .NET Framework 4.5
我們的 Rendering Tier 完全透過代管程式碼 (Managed Code) 進行運作,其依賴於 .NET Framework 和 Web 框架 ASP.NET 以及 ASP.NET MVC 的功能。我們撰寫代管程式碼的主要原因之一在於 CLR 可以提高開發人員的工作效率並且保障運作時的安全性。但是這些功能也會產生效能上的成本,例如 垃圾收集 GC (Garbage Collection)

伺服器後台垃圾回收
.NET 4.5 導入了 伺服器應用程式後台垃圾回收機制。後台垃圾回收機制在 .NET 4 中發佈,該功能主要為用戶端應用程式,並且曾經風靡一時也正因如此,我們對於 Windows Server 2012 能夠將其導入到伺服器中而感到興奮不已。當然,看到這種結果我們也十分高興!   
下列 InternalRequestLatency 圖表中顯示,我們的應用程式在執行非 I/O 任務時所花費的時間。(如您所知,我們的設定目標為讓第 99 th 變得更快。)

clip_image001

在下列的圖表當中,請注意大部分效益都源至於減少處理所建立代管記憶體 (Managed Memory) 的時間,而這是為了建立 垃圾收集 GC (Garbage Collection) 請求服務的重要項目。(請注意! 日期與本部落格文章中的所有圖表都已經進行了相關處理。)

clip_image002

另一種最佳效能計算方式及 ASP.NET 應用程式伺服器健康狀況的指標,就是在 ASP.NET 中佇列的請求數量 (如下圖所示)。請注意 5 月 25 日時曲線的急速下滑!

clip_image003

升級至 Windows Server 2012 將為您的代管應用程式 (Managed Application) 帶來同樣的影響。縮短垃圾收集時間之後,表示將有更多的時間為使用者請求提供服務。因此將有效縮短延遲時間並且改善服務的處理能力。

採用多核心 JIT 進行編譯
在 Windows Server 2012 中透過 .NET 4.5 實作出的另一重要功能,便是使用多核心進行 JIT 編譯的動作。該功能為一種依照組態設定進行優化的方法,也就是在 後台執行緒 (Background Thread) 編譯執行動作中執行緒可能請求的方法,在理想情況下應用程式會在需要運作時早已經完成 JIT 編譯的動作。   
ASP.NET 應用程式預設便已經啟用此功能,因此只需讓您的 ASP.NET 應用程式自動獲得多核心 JIT 編譯機制,便可以立即提升整體運作效能。   
您可能會納悶: 為什麼啟動時間對於伺服器端的應用程式來說非常重要? 因為使用者希望的是,在必要時才需要重新啟動服務,並且希望可以自行選擇時間 (避開尖峰時間) 來完成此一動作。但是,如果您的應用程式不幸發生當機的情況時該怎麼辦?   
因此啟動時間的長短對於服務的高可用性來說非常重要。當服務發生中斷的情況後進行快速復原時,此時您便可以體驗到啟動時間長短的差異性有多重要了。那麼您可能會接著問,啟動時間是否真正縮短了?從下列圖表中可以看到啟動時間整整縮短了 50%,並且在服務中斷時重新復原的速度也提高了將近一倍!

clip_image004

針對營運伺服器上的應用程式進行採樣分析

Windows Server 2012 中另一項新增功能,便是透過 JIT 編譯 64 位元 .NET 應用程式收集及堆疊功能。

我們將效能計數器作為我們的主要監控機制,同時也是傳送給管理人員通知中的第一行內容。它們不僅涉及到我們在本文中所討論的問題(垃圾收集時間和 ASP.NET 佇列請求),而且還會涉及其他重要問題,例如 CPU 佔用時間百分比和異常數量。  
效能計數器對於檢測效能發生下降時極為重要,因為它會將深入檢查操作任務的健康狀況。但是,它們通常不足以診斷效能問題的“根本原因”。因此我們假設效能計數器數值飆升。例如 CPU 佔用時間百分比增加一倍進而對延遲時間產生影響。接下來我們該怎麼做? 就 Windows Server 2012 來說,我們的下一步便是啟用低資源消耗的採樣分析機制 (Sample-Based Profiling)。   
Windows Server 2012 當中透過 JIT 編譯 64 位元 .NET 應用程式收集及堆疊功能,.Net 應用程式透過 Windows 事件追蹤 (ETW,Event Tracing for Windows) 系統來完成。如果您熟悉事件追蹤系統,便會瞭解這是一種系統範圍內的服務,不會要求需要重新開機; 因此它不具入侵性(也就是說不會附加到某個執行程序)、根據您所訂閱的事件、低資源消耗:在採樣分析機制運作時僅產生約 10% 的 CPU 資源成本。

clip_image005

CPU 佔用時間百分比的上升趨勢僅由 80% 上升至 90%。這將轉變為幾乎等同於百分比的延遲效能降低,如下圖所示。

clip_image006

當診斷效能問題的“根本發生原因”變得非常重要時,10% 的效能降低是可以接受的。  
我們已經在本文當中討論了採樣分析機制,但是此功能還能擴充至其他類型的事件追蹤系統,包括 Context Switch 事件和 ReadyThread 事件。例如 您不僅可以分析佔用大量 CPU 使用率的問題,而且可以嘗試解決由 I/O 或 Thread-Scheduling 所產生的問題。(請注意! 啟用 Context Switch 分析機制的資源消耗成本將高於採樣分析機制,在我們的應用程式當中對 CPU 產生約 30% 的效能影響。)   
有時,僅會出現在正式環境中才會重複出現的問題,而這些問題可以在大規模範圍內產生影響。能夠採用低資源消耗的日誌分析工具是種非常巨大的優勢,就 Windows Server 2012 來說,代管的應用程式現在可以獲得與本機應用程式相同的原生支援。   
(請注意! 當 Windows Server 2008 導入可在採樣分析設定檔 ETW 事件中獲得堆疊功能時,對於已經由 JIT 編譯器編譯過的 64 位元應用程式是無效的。)

Hyper-V 3 和支援 Guest NUMA 機制
在 Windows Server 2012 推出之前,採用虛擬化技術就表示會有額外的資源成本,即使考慮到它所帶來的全部效益情況依然如此。整體來說,虛擬化之後所產生的間接軟體成本讓人無法接受。此外,在我們的綜合實驗室測試中虛擬 CPU 的數量限制 (最多 4 個)也成為了 VM 虛擬主機運算能力的瓶頸。   
但是在 Windows Server 2012 中的 Hyper-V 3.0 功能,具備大幅度的“擴充 (Scale)”能力。其中我們對於支援 Guest NUMA 機制感到格外興奮。感知 NUMA 拓撲功能對於記憶體智慧分配機制來說非常重要,最小化跨節點的記憶體存取往往是加速應用程式的關鍵環節。   
籍由全新 Windows Server 2012 所整合的 Guest OS 支援 NUMA 機制,我們正在對使用 Hyper-V 3.0 進行重新評估。我們預計 Hyper-V 將能夠滿足我們對於效能的要求,同時又能節省大量的成本。

雲端業務和雲端優化作業系統
Bing.com 已經透過使用公開的 RC 版本切換到 Windows Server 2012 中得到了明顯的改善。我們基本上可以將 CPU 佔用時間百分比降低一半,以為代管應用程式(包括垃圾收集)和減少重新啟動服務時的啟動時間提供關鍵服務。透過簡化過程監控並將其內建於作業系統中,並且我們已經在效能方面得到明顯的提升。我們還在探索如何將 NUMA 效率與 Hyper-V 3.0 互相結合,以虛擬化技術增強我們的服務。Bing.com 是公認成功的大型規模企業雲端服務,這充分說明我們如何將 Windows Server 2012 建構成一種真正的雲端優化作業系統。   
Bing.com 是雲端服務。該雲端服務十分快速,它運作於成千上萬台電腦上,跨越全球範圍內大量的資料中心。目前,該雲端服務已經透過 Windows Server 2012 得到優化。

總結
全新的 Windows Server 2012 功能使 Bing.com 團隊在考慮遷移到最新作業系統時,對 Windows Server 2012 作業系統興趣十足。從初期快速遷移影響性的評估到真正的全面部署,這樣的發展過程為 .NET 4.5 功能、多核心 JIT 功能提供了巨大的效益,並且效能大幅改進的 Hyper-V 3.0 功能同樣獲得極大的效益。   
現在您已經瞭解這些 Bing.com的內部優化運作機制,最後請不要忘記以下內容: 全球範圍內所有 Bing.com 搜索結果現在都由 Windows Server 2012 提供服務!

  • 內建的 .NET 4.5(包含於 Windows Server 2012 當中),包括後台垃圾回收和延遲改善功能。
  • 透過 .NET 4.5 的多核心 JIT 功能啟用,達成啟動效能的改進。
  • 針對由 .NET 即時編譯的 64 位元應用程式收集調用堆疊功能。
  • Hyper-V 3.0 在未來上的部署應用。