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