綜述
互聯網推動着商業社會的快速變革,對于美團等超大型互聯網服務提供商而言,其數據庫系統需要對仍在飛速增長的海量業務數據進行快速處理。這些核心數據庫往往屬于典型的性能密集型應用,内存的容量與性能在很大程度上影響着上層業務的處理效率以及可用性。此外,龐大的部署規模也使得内存的總體擁有成本 (TCO) 變得相當敏感。
為了應對億級用戶給數據庫系統帶來的性能壓力,支撐業務創新,為用戶提供高速穩定的互聯網服務,美團将 Cellar 存儲系統服務器中的處理器替換為第二代英特爾至強可擴展處理器,同時結合美團面向 Cellar 存儲系統進行的軟件優化,最終将數據庫性能提升 20%,幫助美團進一步優化了數據庫系統,可有效支撐未來業務的增長需求。
挑戰:如何解決 Cellar 存儲面臨的 PAUSE 指令問題
作為中國的生活服務電子商務平台,美團服務涵蓋餐飲、外賣、打車、共享單車、酒店旅遊、電影、休閑娛樂等 200 多個品類,業務量實現了快速發展。2019年,美團年度交易用戶總數達 4.5 億,平台活躍商戶總數達 620 萬,用戶平均交易筆數達到 27.4 筆。近年來,美團一直使用分布式 KV 存儲系統 Cellar 作為最重要的在線存儲服務之一,承載其海量的互聯網業務。
Cellar 是一個在 Tair 基礎上研發的 NoSQL 存儲,在底層支持 Leverldb 、rockdb、mdb和 rdb 等引擎,各節點直接通過 raft 進行複制。Cellar 支持異地容災、無損數據遷移,元信息存在單獨節點,并且通過添加observer的形式實現路由查詢能力擴展、客戶與中間節點分離。目前,Cellar 已經承載了美團在線服務每天萬億級的請求量,并保持着高達 99.999% 的服務可用性。
圖1:美團 Cellar 存儲架構
互聯網服務的典型特征是流量大,美團發現,在業務高峰期的時候,Cellar 存儲系統常常會遇到異常的性能降低問題。研究之後發現,其原因在于英特爾處理器中使用的 PAUSE 指令:不同架構的英特爾至強處理器有着不同的 PAUSE 指令時長。其中,第二代英特爾至強可擴展處理器(CascadeLake 架構)的指令時長為 44 cycle,而上一代的英特爾至強可擴展處理器(Skylake 架構) PAUSE 指令時長為 144 cycle。業務應用程序設計一般基于Broadwell架構,頻繁調用該指令的應用程序運行在 Skylake上時,就會出現負載相對過高的現象。
這是因為,這些程序的内部自旋,就是通過固定次數的 PAUSE 循環實現,PAUSE 指令周期增加時,執行自旋的時間也會增加,對于系統整體的吞吐量會造成影響。如果程序中使用固定次數的 PAUSE 循環來實現一段時間的延遲,以此阻塞程序執行,可能引發非預期的延遲,這突出體現在對于 Spinlock 的影響。
Spinlock又稱自旋鎖,是為實現保護共享資源而提出的一種鎖機制。當執行spin-wait循環的時候,處理器會因為在退出循環的時候檢測到内存訪問順序沖突而導緻嚴重的性能損失,而 PAUSE 指令主要用于提示處理器目前處于spin-wait中。如上所述,這些程序的内部自旋,是通過固定次數的PAUSE 循環實現,在 PAUSE 指令時長增加之後,可能會帶來執行自旋的時間延長。
此外,普通 Spinlock 在處理器多核心的情況下,同一時間隻能有一個 CPU 線程獲取變量并自旋,而緩存一緻性協議為了保證數據的正确,會對所有 CPU 線程的狀态和數據進行同步、失效等操作,導緻性能下降。
除了 Spinlock 之外,PAUSE 指令還會對于内存分配帶來影響。在内存分配過程中,鎖會造成線程等待,對性能影響巨大。
在 Cellar 的業務實踐中,美團發現,當負載較高時,與 Broadwell 架構的英特爾立處理器相比,Skylake 的英特爾處理器負載高 15% 左右。通過 vTune 分析和源碼分析,原因随之浮現:Cellar 服務在高負載時會大量調用 Spinlock,PAUSE指令周期的增加導緻了CPU負載的增高。
雖然通過軟件優化的方式有助于解決 PAUSE 指令所帶來的性能下降問題,但是如果在新部署的存儲服務器中直接選擇了針對此指令進行優化的新型處理器,則不僅能夠降低問題影響,還有助于充分發揮新型号處理器在性能、創新功能等方面的優勢。在此背景下,美團與英特爾密切合作,對于的硬件産品與技術進行測試、驗證、部署,并充分優化存儲軟件,以化發揮硬件性能。
解決方案:基于第二代英特爾至強可擴展處理器的 Cellar 存儲優化
為了在提升 Cellar 存儲系統性能的同時控制 TCO 的增長,美團與英特爾展開了深度合作,将服務器中的處理器替換為二代英特爾至強處理器 5218,并在性能驗證中将 Cellar 存儲系統的工作負載遷移到使用該處理器構建的平台上。
針對PAUSE指令對 Cellar 造成的影響,美團采用了兩種方法:在軟件層面,美團動态調整 Cellar 對 Spinlock 的調用次數,在應用中将循環次數降低,從而控制 PAUSE 指令執行的時長。
此外,美團還将替換 libc 的内存分配為 Jemalloc,以減少鎖的使用,優化 Cellar 存儲系統實際業務。JeMalloc 是一款内存分配器,與其它内存分配器相比,它的優勢在于多線程情況下的高性能以及内存碎片的減少。為避免線程競争鎖的發生,JeMalloc 使用了線程變量,内存分配将在線程自帶的内存管理器中完成,無需和其它線程進行競争。此外,JeMalloc 中的每個線程都通過線程号的映射對應到一個數組元素中,可降低多個線程競争一個元素的機率。由于競争鎖發生機率的降低,PAUSE 指令時長的增長對于内存管理的影響也能得到相應的控制。因此,通過将應用中的内存分配器更改為 JeMalloc,有助于緩解 PAUSE 指令周期增加所帶來的吞吐量降低的問題。
在硬件層面,美團将部分存儲服務器中的處理器升級為采用了 Cascade Lake架構的二代英特爾至強可擴展處理器,二代英特爾至強可擴展處理器将PAUSE 指令時長從 144 cycle 降低為 44 cycle,從而徹底消除了PAUSE指令變化帶來的影響。
此外,二代英特爾至強可擴展處理器還帶來了額外的性能提升。該處理器專為數據中心現代化革新而設計,能夠提高各種基礎設施、企業應用及技術計算應用的運行效率,進而改善總體擁有成本(TCO),提升用戶生産力。它擁有更高的每核性能,能夠在計算、存儲和網絡應用中,為計算密集型工作負載提供高性能和可擴展性。得益于英特爾超級通道互聯(英特爾® UPI)、英特爾Infrastructure Management 技術(英特爾IMT)、英特爾矢量擴展指令集512(英特爾® AVX-512)等功能,它可滿足嚴苛的 I/O 密集型工作負載的需求,能夠幫助企業打造出性能更強的敏捷服務和突破性功能。
效果:Cellar 存儲系統性能提升20%
為了驗證在處理器更換為二代英特爾至強可擴展處理器之後,Cellar 存儲系統的性能提升,美團通過測試進行了驗證(測試配置如表2所示)
表2
數據顯示,與基于英特爾至強 E 系列處理器的 Cellar 存儲系統相比,基于二代英特爾至強可擴展處理器的 Cellar 存儲系統提升了 20% 左右。
從成本效益來看,二代英特爾至強可擴展處理器的應用通過顯著的性能提升,節約了在存儲節點方面的投入,總體擁有成本能夠得到更好的控制,也更具面向未來工作負載的擴展性。
合作夥伴表示:“無論是卓越的硬件特性,還是在 PAUSE 指令等方面的優化,二代英特爾至強可擴展處理器都對 Cellar 存儲系統性能的提升起到了至關重要的作用。通過雙方的密切合作,我們不僅驗證了二代英特爾至強可擴展處理器在存儲系統性能優化過程中的關鍵作用,也為之後的進一步優化奠定了堅實基礎。”
圖3:性能優化對比
展望:美團與英特爾加速互聯網基礎設施創新
在發展過程中,美團正緻力于去探索 Cellar 等具備突破性的存儲解決方案,并實踐新的運維方式,以滿足業務的快速增長需求。美團計還将繼續攜手英特爾,充分利用軟硬件技術的發展成果,打造高性能數據庫解決方案,為内外部用戶提供更高效、更可靠的服務。
除了數據庫之外,美團與英特爾還在廣泛的領域進行了合作,利用二代英特爾至強可擴展處理器等産品所帶來的革命性技術能力,構建高性能的基礎設施,在不斷增長的核心互聯網業務場景以及關鍵應用和服務中發揮越來越重要的作用,這也有助于美團為用戶提供更高效、更多元化的應用體驗。
免責聲明:本文僅代表作者個人觀點,與每日科技網無關。其原創性以及文中陳述文字和内容未經本站證實,對本文以及其中全部或者部分内容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關内容。
本網站有部分内容均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責,若因作品内容、知識産權、版權和其他問題,請及時提供相關證明等材料并與我們聯系,本網站将在規定時間内給予删除等相關處理.

