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