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