本文來自微信公眾號(hào)“twt企業(yè)IT社區(qū)”,作者/趙海,某金融系統(tǒng)高級(jí)主管。
縱觀存儲(chǔ)的發(fā)展,從最原始的DAS架構(gòu)發(fā)展到NAS和SAN并存的架構(gòu),從NAS&SAN并存的架構(gòu)發(fā)展到基于互聯(lián)網(wǎng)基因和云計(jì)算基因的云平臺(tái)存儲(chǔ)架構(gòu),其架構(gòu)變得越來越復(fù)雜。這必然帶來性能上的損耗,這與我們大部分?jǐn)?shù)據(jù)業(yè)務(wù)場(chǎng)景追求性能的目標(biāo)是相悖的,那么如何解決這個(gè)矛盾呢?
一、企業(yè)存儲(chǔ)優(yōu)化思路總結(jié)
企業(yè)存儲(chǔ)主要包括集中式架構(gòu)的SAN存儲(chǔ)和NAS存儲(chǔ)。企業(yè)經(jīng)歷集中式存儲(chǔ)的時(shí)間相對(duì)而言比較長(zhǎng),那么在面臨性能優(yōu)化的問題也有一套相對(duì)比較完善的思路,總結(jié)來看主要從以下幾個(gè)方面實(shí)現(xiàn):
1.規(guī)劃時(shí)的優(yōu)化配置
大部分的性能優(yōu)化問題都?xì)w根于規(guī)劃設(shè)計(jì)不夠精細(xì)準(zhǔn)確,所以解決性能的非常關(guān)鍵的因素就在于規(guī)劃,存儲(chǔ)卷的數(shù)量、分布、分區(qū)(Zone)映射等相關(guān)配置。如果DBA對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)文件使用的存儲(chǔ)卷規(guī)劃不夠均衡準(zhǔn)確,必然造成某些卷的高熱點(diǎn)IO訪問,如果這個(gè)卷所依附的分區(qū)映射又不是非常合理均衡,那么這個(gè)問題就會(huì)無限放大。因此傳統(tǒng)存儲(chǔ)實(shí)踐前的規(guī)劃,需要架構(gòu)師在上層應(yīng)用的存儲(chǔ)使用容量、數(shù)目、負(fù)載等各方面進(jìn)行梳理和分析,本著均衡分布的原則將卷的使用映射到存儲(chǔ)資源上,這樣才能最大限度減少后續(xù)性能優(yōu)化問題。
2.存儲(chǔ)引擎硬件配置
主要通過觀察存儲(chǔ)運(yùn)行過程當(dāng)中關(guān)鍵指標(biāo)(CPU、Cache)的峰值以及平均值的情況,來衡量當(dāng)前控制器內(nèi)的硬件配置是否已經(jīng)成為系統(tǒng)性能的瓶頸,通常傳統(tǒng)集中式存儲(chǔ)支持單獨(dú)升級(jí)CPU、Cache硬件的場(chǎng)景較少,一般都是通過增加Cache卡或者控制器擴(kuò)展的方式來解決。當(dāng)然,在具體分析的時(shí)候需要根據(jù)其他指標(biāo)的評(píng)估來判斷是否因?yàn)槠渌厥鉅顩r引起的資源占用問題,這種情況并非需要增加硬件資源。
3.存儲(chǔ)引擎端口資源
主要通過觀察存儲(chǔ)運(yùn)行過程當(dāng)中每一個(gè)前端端口和后端端口的使用情況(使用率、均衡性、吞吐量)等相關(guān)指標(biāo)在一定周期內(nèi)的平均數(shù)值,來評(píng)估板卡端口容量以及配置是否有性能問題。如果端口數(shù)量容量沒有問題,只是出現(xiàn)了負(fù)載不均衡的狀況,那么就需要手動(dòng)調(diào)整Zone映射的配置來調(diào)整其平衡性。
4.存儲(chǔ)軟件參數(shù)策略
所謂與性能問題息息相關(guān)的存儲(chǔ)軟件策略,主要是指存儲(chǔ)產(chǎn)品開放出來的一系列軟件參數(shù)以及分層策略。通常是通過觀察存儲(chǔ)運(yùn)行過程當(dāng)中的系列關(guān)鍵指標(biāo)(IOPS、Latency、Throughout等),來判斷軟件層面的隊(duì)列參數(shù)、存儲(chǔ)單元參數(shù)、讀寫控制參數(shù)、緩存控制參數(shù)等來實(shí)現(xiàn)一部分優(yōu)化。如果是針對(duì)個(gè)別存儲(chǔ)卷的問題,可能需要將數(shù)據(jù)反饋到系統(tǒng)管理員和DBA層面進(jìn)行操作系統(tǒng)及數(shù)據(jù)層面的優(yōu)化。所謂分層策略是指存儲(chǔ)資源池當(dāng)中有SSD、SAS、SATA等多種磁盤的資源池的自動(dòng)平衡策略,一般通過觀察預(yù)留資源池容量大小、分層時(shí)間窗口策略、分層容量閾值策略、SSD磁盤數(shù)量增加等手段實(shí)現(xiàn)分層的優(yōu)化。
二、分布式存儲(chǔ)性能優(yōu)化思路
對(duì)于分布式存儲(chǔ)來講,它的架構(gòu)復(fù)雜度要高于傳統(tǒng)的集中式存儲(chǔ),從前期的架構(gòu)配置規(guī)劃到后期的運(yùn)維監(jiān)控優(yōu)化都要比傳統(tǒng)的集中式存儲(chǔ)付出更多的精力和工作。首先,我們從整個(gè)的讀寫流程來看。
圖1:兩種存儲(chǔ)讀寫流程圖
如圖1所示,上半部分是傳統(tǒng)SAN存儲(chǔ)的落盤路徑,下半部分是分布式存儲(chǔ)的落盤路徑,相對(duì)于SAN存儲(chǔ)的落盤路徑,分布式存儲(chǔ)的這個(gè)鏈路就復(fù)雜了。應(yīng)用發(fā)出的IO請(qǐng)求會(huì)經(jīng)過以太網(wǎng)絡(luò)到達(dá)云平臺(tái)存儲(chǔ)的路由節(jié)點(diǎn)、接口服務(wù)層;接口服務(wù)層又會(huì)將應(yīng)用特定的服務(wù)接口數(shù)據(jù)格式,轉(zhuǎn)換為底層分布式存儲(chǔ)平臺(tái)接受的文件或者對(duì)象格式;在具體寫入的時(shí)候又會(huì)訪問元數(shù)據(jù),通過元數(shù)據(jù)的映射表再找到數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)空間,然后完成冗余性復(fù)制,才能完成一個(gè)真正的IO。也就是說在存儲(chǔ)數(shù)據(jù)服務(wù)接口到底層分布式存儲(chǔ)平臺(tái)這個(gè)環(huán)節(jié)會(huì)有延時(shí)(Latency),從分布式存儲(chǔ)平臺(tái)接受請(qǐng)求、到數(shù)據(jù)落盤、到數(shù)據(jù)節(jié)點(diǎn)并完成冗余復(fù)制這個(gè)過程也會(huì)有延時(shí)。因此分布式存儲(chǔ)的性能問題相對(duì)更復(fù)雜,更需要有系統(tǒng)的思路去執(zhí)行。
1.業(yè)務(wù)區(qū)分
存儲(chǔ)資源是為數(shù)據(jù)業(yè)務(wù)服務(wù)的,數(shù)據(jù)業(yè)務(wù)表現(xiàn)在IOPS、吞吐帶寬、容量方面的需求和寬容度是不一樣的。因此我們?cè)卺槍?duì)不同數(shù)據(jù)業(yè)務(wù)場(chǎng)景進(jìn)行分布式存儲(chǔ)項(xiàng)目實(shí)踐的時(shí)候,從軟件層面到硬件層面的配置都應(yīng)該有針對(duì)性的標(biāo)準(zhǔn)。例如我們可以按照以下的標(biāo)準(zhǔn)(表1)進(jìn)行業(yè)務(wù)的區(qū)分:
表1:存儲(chǔ)指標(biāo)與業(yè)務(wù)場(chǎng)景映射表
經(jīng)過對(duì)業(yè)務(wù)場(chǎng)景的精細(xì)化梳理分析之后,可以將存儲(chǔ)空間的分配對(duì)應(yīng)到按照不同的業(yè)務(wù)需求劃分設(shè)計(jì)的存儲(chǔ)資源池當(dāng)中,然后再根據(jù)資源池的技術(shù)指標(biāo)(IOPS、Throughout、Capacity)去規(guī)劃資源池對(duì)應(yīng)的軟硬件配置。
2.數(shù)據(jù)管理
通常的分布式存儲(chǔ)系統(tǒng),會(huì)把數(shù)據(jù)分散在大量的存儲(chǔ)服務(wù)器上,而存儲(chǔ)服務(wù)器本身都會(huì)安裝Linux操作系統(tǒng),并且有自己的本地文件系統(tǒng)。例如HDFS、Luster、Ceph等分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)都會(huì)使用POSIX接口的本地文件系統(tǒng)EXT、BTRFS、XFS等來存儲(chǔ)數(shù)據(jù)。本地文件系統(tǒng)不能很好地適配對(duì)象存儲(chǔ)需求的擴(kuò)展性要求:
1)數(shù)據(jù)和元數(shù)據(jù)分離不徹底,目錄樹結(jié)構(gòu)的元數(shù)據(jù)管理方式等導(dǎo)致大規(guī)模的對(duì)象數(shù)據(jù)尋址非常慢。
2)為了支持事務(wù)特性的日志重復(fù)寫問題,也就是分布式文件系統(tǒng)日志和本地文件系統(tǒng)日志重復(fù)寫的問題。
3)本地文件系統(tǒng)日志的事務(wù)性寫導(dǎo)致了寫的放大。
那么在存儲(chǔ)節(jié)點(diǎn)本地文件系統(tǒng)的選型設(shè)計(jì)上,如果我們能選擇優(yōu)化的而非默認(rèn)的配置,那么就會(huì)解決掉存儲(chǔ)節(jié)點(diǎn)本身帶來的IO深度和復(fù)雜度延時(shí)的問題,從而提高整個(gè)分布式存儲(chǔ)的讀寫性能。當(dāng)然,這個(gè)是需要在每一種分布式存儲(chǔ)數(shù)據(jù)節(jié)點(diǎn)支持的文件系統(tǒng)或者文件管理方式范圍內(nèi)去平衡和決策。
3.容錯(cuò)設(shè)計(jì)
存儲(chǔ)介質(zhì)故障發(fā)生的頻率無論是在傳統(tǒng)存儲(chǔ)當(dāng)中還是在分布式存儲(chǔ)系統(tǒng)當(dāng)中都非常高。而解決這個(gè)問題的方式基本上有兩種:多副本和糾刪碼。多副本采用的是多份數(shù)據(jù)鏡像的方式來保護(hù),數(shù)據(jù)糾刪碼采用的是校驗(yàn)計(jì)算的方式來保護(hù)數(shù)據(jù)。前者使用空間成本換容錯(cuò),后者使用計(jì)算成本換容錯(cuò)。通常傳統(tǒng)集中式存儲(chǔ)采用的是后者,而分布式存儲(chǔ)采用的是前者。但是很多分布式存儲(chǔ)也支持糾刪碼。因此在容錯(cuò)設(shè)計(jì)的時(shí)候需要考慮數(shù)據(jù)業(yè)務(wù)場(chǎng)景對(duì)IOPS、Throughout、Capacity的需求,然后設(shè)計(jì)合乎性能和成本要求的容錯(cuò)策略,同時(shí)在副本策略當(dāng)中也要選擇合適的副本數(shù)目、分布策略。
4.網(wǎng)絡(luò)通訊
分布式存儲(chǔ)系統(tǒng)中,節(jié)點(diǎn)間需要通過網(wǎng)絡(luò)通信來交換節(jié)點(diǎn)及集群狀態(tài)信息和具體的數(shù)據(jù)文件,整體的數(shù)據(jù)通訊量級(jí)是非常大的。因此,在網(wǎng)絡(luò)通訊的配置方面也需要關(guān)注幾個(gè)重點(diǎn)問題。
1)通訊網(wǎng)絡(luò)隔離:通常我們需要將管理網(wǎng)絡(luò)、數(shù)據(jù)網(wǎng)絡(luò)、服務(wù)網(wǎng)絡(luò)進(jìn)行隔離。管理網(wǎng)絡(luò)通常用來傳遞控制信息,數(shù)據(jù)量小但是比較重要;數(shù)據(jù)網(wǎng)絡(luò)通常是存儲(chǔ)節(jié)點(diǎn)之間進(jìn)行交互的網(wǎng)絡(luò),其通訊量大而且重要;服務(wù)網(wǎng)絡(luò)通常是向上層提供存儲(chǔ)服務(wù)的網(wǎng)絡(luò),是數(shù)據(jù)服務(wù)業(yè)務(wù)通道。這幾個(gè)網(wǎng)絡(luò)不僅僅要隔離,而且還要根據(jù)數(shù)據(jù)業(yè)務(wù)評(píng)估設(shè)計(jì)合適帶寬。
2)通訊模式的選擇:以Ceph為例,三種類型的通信模式分別是Simple、Async、XIO。Simple線程模式對(duì)每個(gè)網(wǎng)絡(luò)連接都創(chuàng)建了兩個(gè)線程分別用于接收和發(fā)送。隨著集群規(guī)模的增長(zhǎng),創(chuàng)建的連接數(shù)和線程數(shù)會(huì)呈指數(shù)級(jí)增長(zhǎng),而且需要消耗更多的CPU和內(nèi)存資源。所以應(yīng)對(duì)不同規(guī)模或者未來擴(kuò)展規(guī)模的分布式存儲(chǔ)集群,要選擇合適的通信模式。
3)網(wǎng)絡(luò)類型的選擇:關(guān)于網(wǎng)絡(luò)類型的選擇要考慮到未來擴(kuò)展性需求以及網(wǎng)絡(luò)通訊質(zhì)量的需求。比如VXLAN和VLAN的選擇要考慮到VLAN諸多的數(shù)量和功能限制。比如高速網(wǎng)絡(luò)的選擇要考慮到網(wǎng)絡(luò)通訊質(zhì)量的需求。
5.數(shù)據(jù)分布
數(shù)據(jù)分布主要是針對(duì)無中心架構(gòu)的分布式存儲(chǔ)而言,這類系統(tǒng)主要是通過哈希算法來實(shí)現(xiàn)數(shù)據(jù)分布和檢索。雖然系統(tǒng)本身的分布算法已經(jīng)確定,但是數(shù)據(jù)分布算法所需要的計(jì)算因子是需要我們?cè)趯?shí)踐配置的時(shí)候輸入的。比如說Ceph的數(shù)據(jù)桶的組織結(jié)構(gòu)類型有四種:Uniform、List、Tree、Straw。每一種類型針對(duì)數(shù)據(jù)檢索、節(jié)點(diǎn)變化導(dǎo)致的數(shù)據(jù)變化等方面都有不同的表現(xiàn)(如表2):
表2:數(shù)據(jù)桶結(jié)構(gòu)性能對(duì)比
通常來講,Straw在各個(gè)維度都比較均衡的類型,也更適合大規(guī)模的分布式存儲(chǔ)系統(tǒng),因此通常都會(huì)采用Straw來作為Bucket的數(shù)據(jù)結(jié)構(gòu)類型來使用。但是如果存儲(chǔ)節(jié)點(diǎn)在容量、計(jì)算能力、網(wǎng)絡(luò)硬件上面配置有特殊的地方,那么就要根據(jù)具體策略適用的場(chǎng)景來評(píng)估了,不一定Straw就是最優(yōu)的選擇。
分布式存儲(chǔ)系統(tǒng)當(dāng)中在哈希計(jì)算的時(shí)候之所以能保持集群的相對(duì)穩(wěn)定性,就是因?yàn)樘摂M對(duì)象(如Ceph的PG、Pool,如Swift的Container)設(shè)計(jì),同樣這些虛擬對(duì)象數(shù)量、管理方式、映射關(guān)系等方面的配置也是決定數(shù)據(jù)分布式算法計(jì)算因子是否優(yōu)秀的重要方面,同樣需要精細(xì)化設(shè)計(jì)。
6.配置參數(shù)
分布式存儲(chǔ)系統(tǒng)的配置參數(shù)調(diào)優(yōu)所涉及的對(duì)象比較多,從物理對(duì)象上來看有客戶端、管理節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn),這三類節(jié)點(diǎn)都會(huì)有相應(yīng)的軟件配置及對(duì)應(yīng)的進(jìn)程服務(wù),每個(gè)層面都會(huì)有相應(yīng)的參數(shù)可以調(diào)整優(yōu)化分布式存儲(chǔ)的各方面性能表現(xiàn)。另外從組成分布式存儲(chǔ)的外圍對(duì)象上來看,數(shù)據(jù)節(jié)點(diǎn)上的操作系統(tǒng)參數(shù)(內(nèi)核控制參數(shù))也是重要的配置對(duì)象。每一種分布式存儲(chǔ)都會(huì)有數(shù)百甚至數(shù)千的參數(shù)開放出來,提供給使用者針對(duì)具體場(chǎng)景進(jìn)行系統(tǒng)調(diào)優(yōu)。以Ceph為例:
1)操作系統(tǒng)層:磁盤預(yù)讀緩存、系統(tǒng)進(jìn)程數(shù)量、CPU模式、網(wǎng)絡(luò)參數(shù)...
2)Ceph集群層:FileStore、Jornal、OSD、MON...
針對(duì)不同分布式存儲(chǔ),需要根據(jù)其指導(dǎo)手冊(cè)查詢具體的參數(shù)及相應(yīng)的取值類型和范圍。
7.硬件配置
對(duì)于分布式存儲(chǔ)系統(tǒng)硬件配置的優(yōu)化,其實(shí)最主要的就三個(gè)方面:
1)管理節(jié)點(diǎn)計(jì)算能力(CPU、內(nèi)存、磁盤)的提高,主要用來完成對(duì)數(shù)據(jù)尋址過程的快速響應(yīng)。
2)數(shù)據(jù)節(jié)點(diǎn)SSD的使用,主要用來減少數(shù)據(jù)在存儲(chǔ)節(jié)點(diǎn)上落盤時(shí)間的延時(shí)消耗上以及日志寫的性能優(yōu)化上。
3)高速硬件網(wǎng)絡(luò)技術(shù)的使用,主要用來減少副本復(fù)制及數(shù)據(jù)傳輸方面的性能消耗。
三、結(jié)語
總而言之,性能問題是貫穿于存儲(chǔ)實(shí)踐整個(gè)過程的關(guān)鍵問題,傳統(tǒng)存儲(chǔ)架構(gòu)無法避免,分布式存儲(chǔ)架構(gòu)也無法避免。企業(yè)實(shí)現(xiàn)私有云之后,云上的存儲(chǔ)資源會(huì)是多元化的架構(gòu)模式,基于上述提綱,在實(shí)踐的過程當(dāng)中實(shí)現(xiàn)更精細(xì)化的梳理、更準(zhǔn)確客觀的分析、更實(shí)事求是的態(tài)度,才能解決好云平臺(tái)上存儲(chǔ)架構(gòu)性能與擴(kuò)展性的平衡問題。