天天看點

揭秘紅包場景下的高性能本地存儲架構設計

前言:紅包是最近興起的全民參與的活動,2017年新春紅包在參與人數和業務峰值上都到達了曆史新高,其中紅包除夕開獎峰值達到90w/s。近日,阿裡雲系統和塊存儲負責人、資深專家馬濤從高性能本地存儲架構設計、高性能本地存儲要點分享、高性能本地存儲性能資料等方面分享了高性能本地存儲的實戰經驗。

以下内容根據現場分享和幻燈片整理而成。

紅包業務特點

揭秘紅包場景下的高性能本地存儲架構設計

支付寶紅包的大緻業務架構包括單元化部署、統一接入、網關、dao、資料庫以及線上離線資料處理,整體流程很長。其中資料庫在整理的交易鍊路中起到承上啟下的作用。在紅包業務中,資料庫具有三大特點:

(1)峰值壓力大。除夕夜開獎峰值達到90w/s,但這僅僅是從業務層面考慮,由于業務對資料庫不僅僅是一次事務的壓力,是以開獎峰值時資料庫面臨的壓力可達百萬之多。

(2)延遲要求苛刻。資料庫機關時間内能承受的事務是有嚴格要求的,資料庫延遲降低後,會大幅降低對資料庫數目的需求,進而降低所需實體機配置,對整體的業務壓力也會大幅度降低。

(3)自帶容災。對于大型網際網路公司,他們的資料庫業務實際上是有非常完善的容災機制,資料庫具備主從複制;業務層也會有本身的容災機制。從存儲來看,上層的容災業務做得很全面。

針對紅包業務,資料庫的需求可以概括為兩點:一是延遲要非常低,延遲要低于100us;二是iops一定要高,需要達到20w以上。

現有塊存儲産品

揭秘紅包場景下的高性能本地存儲架構設計

目前阿裡提供了三種不同的塊存儲産品,分别是ssd雲盤、高效雲盤和普通雲盤。三者詳細的對比如上圖所示,可以看到:三種塊存儲的産品都具有高可靠的優點,它們的資料可靠性都達到了99.9999999%;它們的缺點也非常明顯,iops和延遲不達标,iops最高的ssd雲盤也隻有20000,延遲最低的ssd雲盤也有500us之久,距離20w iops和100us延遲的要求還存在很大的差距,這就需要設計一款新的存儲産品來滿足雙十一以及紅包業務的要求。

是以,高性能本地存儲應運而生。

高性能本地存儲

高性能本地存儲的設計目标是為了滿足高性能資料庫的要求,設計要點一是超高的iops;另一點是超低延遲。

揭秘紅包場景下的高性能本地存儲架構設計

通用的雲本地存儲正常架構如上圖所示。以mysql資料庫為例,它通過posix api與雲主機核心互動,雲主機核心包括一個标準檔案系統和标準的塊裝置接口;雲主機核心下面是雲實體機核心,它自上而下由标準檔案系統、标準塊裝置接口、硬體驅動和硬體組成。當資料庫發起io通路時,要經過7個子產品才能到達硬體;請求完成後,再經過7個子產品才能傳回給應用層,路徑相當之長。雲主機核心和雲實體機核心中都包括标準檔案系統和塊裝置層,也就是說同樣的子產品可能在雲主機内跑了一遍,還需要在雲實體機上再運作一遍,功能上重疊,實作方式上也基本類似;重疊的子產品導緻請求通路時的路徑很長,對于業務和資料庫性能造成的的直覺影響是延遲高、性能差。

是以,采用通用的雲本地存儲正常架構是無法解決紅包業務的需求,也不能設計出高性能的存儲産品。那該如何将雲本地存儲的性能發揮到極緻呢?我們的切入點是高性能存儲架構。

揭秘紅包場景下的高性能本地存儲架構設計

上圖是高性能存儲架構,圖中左側是标準實體機情況下存儲性能達到極緻的架構:它的層次比較少,資料庫經過posix api直接就到标準檔案系統、塊裝置層、硬體驅動、硬體,請求所經過的子產品比上文提到的雲本地存儲正常架構少2-3個,性能也相對有所提升。

那麼如何在雲主機的環境下搭建一個類似實體機的環境呢?首先雲主機的必要子產品是必須保留的,應該盡可能精簡雲實體機核心中的子產品,進而達到性能的最佳值。如上圖右側所示,首先必須保留雲主機内的标準檔案系統和塊裝置層,因為它們和業務資料庫是息息相關的,标準檔案系統提供了标準的open、creat、write之類的接口,如果省去該子產品,業務是無法适配這種修改的。

對使用者而言,雲實體機内所有的修改都是透明的,是以在雲實體機上隻保留硬體驅動,進而達到最佳性能。

高性能本地存儲關鍵元件

揭秘紅包場景下的高性能本地存儲架構設計

在雲主機内,标準檔案系統是不能變化的,因為它是存儲與資料庫、業務互動的地方。是以,想要進行性能優化,隻能考慮在塊裝置層、硬體驅動、硬體三個子產品入手加速本地存儲的性能。

經過一系列的調研與研發測試,最終在塊裝置層使用了标準virtio blk驅動;硬體驅動使用了spdk工具集;硬體使用了nvme ssd。下面對這三個子產品進行詳細的解讀與分析。

virtio-blk

揭秘紅包場景下的高性能本地存儲架構設計

利用virtio blk可以實作雲主機和雲實體機之間的高性能資料互動。virtio提供了半虛拟化的接口,所謂半虛拟化就是在虛拟機和實體機之間通過某種方式(修改了虛拟機某些接口),進而使得虛拟機和實體機之間實作高速傳輸,性能比傳統的全虛拟化有所提高。

virtio blk是标準塊裝置接口,通過塊裝置接口可以對塊裝置進行格式化、分區、建立檔案系統等标準操作,對使用者完全透明,資料庫無需任何更改。virtio blk另一個優點是采用了virtio協定,通過共享環交換資料。在上圖中,藍色部分是虛拟機,紅色部分是實體機。虛拟機通過virtio front end将資料通過virtio ring傳遞到後端的virtio back end;virtio back end将這些資料處理後再回傳給virtio front end,完成了一次資料的互動。

spdk

除了virtio blk之外,spdk是另一個重要的元件。spdk全稱是storage performance development kit,它是一組用來編寫高性能、高擴充性的使用者态存儲應用的工具集。

揭秘紅包場景下的高性能本地存儲架構設計

相比于spdk,dpdk可能更為人知,它主要是為了解決網絡方面的問題。spdk在很多子產品上是與dpdk共用的,它的核心觀點是通過使用者态協定加無鎖設計加輪詢機制達到高性能:

(1)使用者态協定是指spdk實作了使用者nvme協定,讓使用者可以在旁路核心的情況下去通路裝置;其缺點是不支援posix api、不支援标準的檔案系統,也沒有标準的裝置支援,應用性較差。

(2)無鎖設計,對于高性能程式設計而言,無鎖設計都是核心的思想,此次不再展開。

(3)輪詢機制,spdk提供了polling mode ,它摒棄了核心中常用的中斷這類的機制,消除了中斷的影響,提高了整體性能。

nvme ssd

揭秘紅包場景下的高性能本地存儲架構設計

nvme ssd有兩個核心點:首先ssd是pci-e的ssd,本身的通路速度是非常快的;采用nvme之後,速度會更快,nvme是用來代替scsi的新協定,它具有高帶寬、低延遲的特點,比scsi協定更簡單高效,提高了系統整體的性能。

資料鍊路

揭秘紅包場景下的高性能本地存儲架構設計

高性能本地雲儲存的資料鍊路如上圖所示,在雲主機中,核心資料庫、posix api和标準檔案系統保持不變。雲資料庫通過标準的posix api 通路标準檔案系統;标準檔案系統通過virtio-blk和spdk使用者态驅動直接互動,在spdk使用者态驅動中再與nvme ssd互動,減少了資料鍊路的長度,同時提高了io性能。

延遲分布

揭秘紅包場景下的高性能本地存儲架構設計

高性能本地雲儲存搭建之後,我們使用了fio磁盤測試工具在centos7上對通用虛拟化架構本地盤和阿裡雲高性能本地存儲的随機io平均延遲進行了對比測試。測試時塊裝置io排程器均設定為noop,測試參數為--direct=1--bs=4k--iodepth=1--numjobs=1。

從上圖可以看出,在随機讀兩方面,阿裡雲高io本地盤延遲隻有70us左右,而通用虛拟化架構本地盤延遲在130us左右;随機寫方面,阿裡雲高io本地盤的延遲隻有30us左右;通用虛拟化架構本地盤延遲在60us左右。

資料庫性能對比

揭秘紅包場景下的高性能本地存儲架構設計

上圖是新舊資料庫index-update性能對比,可以看到:在舊資料庫執行個體的情況下,tps隻有14242.65、rt為8.21ms;新資料庫執行個體下,tps可以達到26969.81、rt為1.7ms,整體性能大幅度提升。

釋放紅包技術福利,即将在公有雲上線

通過延遲分布和資料庫性能的對比,可以看出高本地雲存儲對性能提升起到了很大的作用,在紅包活動中發揮了很大的作用。在完成雙十一及紅包活動之後,阿裡雲希望将高性能本地雲存儲技術推廣給其他使用者使用。是以,在今年2月底,高性能本地雲存儲在公共雲上線,它的技術架構與支撐支付寶紅包的技術架構相同:采用nvme ssd+spdk技術,也是全球首家采用該技術的高性能本地盤。

揭秘紅包場景下的高性能本地存儲架構設計

本地盤2.0性能非常好,容量為3tb、iops為50萬、延遲為50us、帶寬為4gb。具體參數如下表所示:

揭秘紅包場景下的高性能本地存儲架構設計

可以看出,最優産品讀寫iops單盤可達24000;讀帶寬達2gbps;寫帶寬為1.2gbps。

高io本地存儲執行個體

揭秘紅包場景下的高性能本地存儲架構設計

有了本地盤作為基礎,如果想要實作高性能本地存儲執行個體,還需要在計算性能、存儲io性能、網絡性能上進行相應地提升:

(1)為了保證計算性能穩定,采用了intel xeon e5-2682 v4(broadwell)處理器,主頻為2.5ghz,ddr4記憶體。

(2)為了保證存儲io性能穩定,采用了基于nvme ssd和spdk技術,提供高達數十萬随機io讀寫能力的同時,保持在us級别的時延水準。

(3)網絡性能方面,執行個體網絡性能與計算規格相對應(執行個體計算規格越大則網絡性能越強)。

綜上所述,将spdk與nvme ssd技術結合起來,能夠讓本地盤接近或類似實體機的性能,在雙十一以及新春紅包這類峰值壓力很大的場景下,性能依舊很好。

<a href="https://mp.weixin.qq.com/s/n9eha8lsy0n7pexqxogqaa">原文連結</a>