《關(guān)于分布式存儲(chǔ),這是你應(yīng)該知道的》要點(diǎn):
本文介紹了關(guān)于分布式存儲(chǔ),這是你應(yīng)該知道的,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
顧炯
中國(guó)電信浙江公司中國(guó)電信云計(jì)算實(shí)驗(yàn)室、SDx聯(lián)合技術(shù)開(kāi)放實(shí)驗(yàn)室專(zhuān)家委員.作為第一完成人,多個(gè)項(xiàng)目獲得省部級(jí)和集團(tuán)級(jí)科技進(jìn)步獎(jiǎng).
分布式存儲(chǔ)存在的風(fēng)險(xiǎn),其實(shí)就是因?yàn)椤肮蚕怼薄ⅰ按髷?shù)據(jù)量”、“高性能”和X86服務(wù)器+廉價(jià)的磁盤(pán)為載體之間的矛盾所產(chǎn)生的,不是有些讀者說(shuō)的“數(shù)據(jù)架構(gòu)”的問(wèn)題.其實(shí)任何存儲(chǔ)都存在這個(gè)問(wèn)題,只是分布式存儲(chǔ)更嚴(yán)重.
本文其實(shí)是從主機(jī)的網(wǎng)絡(luò)、磁盤(pán)的吞吐角度分析存在的風(fēng)險(xiǎn),所以和用那個(gè)廠家的存儲(chǔ)無(wú)關(guān).
還有人說(shuō)你是危言聳聽(tīng),如果按照你說(shuō)的,這么多人用了分布式存儲(chǔ)有這樣的地雷豈不是要炸飛?軟件定義的東西其實(shí)有很多BUG,重要的是能發(fā)現(xiàn)問(wèn)題,事先做好彌補(bǔ)或方案.
還有人說(shuō),分布式存儲(chǔ)用到現(xiàn)在也不超過(guò)2年,發(fā)生你說(shuō)的問(wèn)題還早.但是我們已經(jīng)發(fā)現(xiàn)問(wèn)題了,不能擱置不管.釣魚(yú)島問(wèn)題擱置了,現(xiàn)在還不是造成麻煩了嗎?
很多人包括存儲(chǔ)專(zhuān)家都會(huì)認(rèn)為是存儲(chǔ)的性能指標(biāo),比如IOPS和吞吐量.但是我認(rèn)為存儲(chǔ)最重要的是數(shù)據(jù)的安全性.
一個(gè)跑的飛快的存儲(chǔ),突然數(shù)據(jù)丟失了,后果會(huì)怎么樣?數(shù)據(jù)的丟失,對(duì)于任何系統(tǒng)來(lái)說(shuō),都是滅頂之災(zāi).
所以,不管什么樣的存儲(chǔ),數(shù)據(jù)的安全可靠都是第一位的.
原來(lái)傳統(tǒng)的存儲(chǔ)使用了專(zhuān)用硬件,從可靠性上有比較高的保證,所以大家首先會(huì)關(guān)注性能指標(biāo).但是用X86為基礎(chǔ)的SRVSAN的可靠性就不容樂(lè)觀.
除了專(zhuān)用設(shè)備外,還有應(yīng)用場(chǎng)景和數(shù)據(jù)量不同等原因.在傳統(tǒng)行業(yè)如電信、銀行原來(lái)的系統(tǒng)建設(shè)是煙囪模式.不但網(wǎng)絡(luò)是獨(dú)立一套,存儲(chǔ)也是.
往往是數(shù)據(jù)庫(kù)服務(wù)和日志記錄,用2臺(tái)服務(wù)器和8個(gè)端口的小光交相連,小光交下只掛一個(gè)存儲(chǔ).數(shù)據(jù)量也沒(méi)有這樣大,存儲(chǔ)的容量也在5T以下.這樣存儲(chǔ)的數(shù)據(jù)遷移是很容易和快速的,方法也很多.
由于是專(zhuān)用存儲(chǔ),所以完全可以采用“非在線”的手段,數(shù)據(jù)量也不大,可以在夜深人靜的時(shí)候停機(jī)完成.
進(jìn)入云計(jì)算時(shí)代,存儲(chǔ)是共享的,數(shù)據(jù)是應(yīng)用可靠,提供者不可控,數(shù)據(jù)量海量增加……傳統(tǒng)的方法失靈了.(可見(jiàn)顧炯的云世界的“資源池內(nèi)存儲(chǔ)特點(diǎn)”的文章)
我們?cè)?014年下半年,開(kāi)始搭建以X86為載體的分布式塊存儲(chǔ),經(jīng)過(guò)嚴(yán)格的測(cè)試,在同年底投入商用,是業(yè)界首個(gè)商用的軟件定義的分布式存儲(chǔ),當(dāng)時(shí)各種媒體都爭(zhēng)相報(bào)道.
到現(xiàn)在為止已經(jīng)商用了近2年,存儲(chǔ)運(yùn)行穩(wěn)定,表現(xiàn)優(yōu)良.并從原來(lái)2P裸容量擴(kuò)容到4.5P.
但是近段時(shí)間我卻越來(lái)越擔(dān)心,因?yàn)镾RVSAN與生俱來(lái)的數(shù)據(jù)安全隱患,一直被人忽視了,而且主流廠家也沒(méi)有意識(shí)到這個(gè)問(wèn)題.如果這個(gè)隱患在若干年以后爆發(fā),會(huì)發(fā)生重大性系統(tǒng)故障.
其實(shí)我在寫(xiě)這篇文章前2個(gè)月,我已經(jīng)將這個(gè)擔(dān)憂和想法告訴了現(xiàn)有分布式塊存儲(chǔ)的產(chǎn)品線總經(jīng)理,得到他的重視,已經(jīng)在彌補(bǔ)了.很多軟件定義的東西,就怕想不到,突然發(fā)生了,想到了就會(huì)有相應(yīng)的解決方案.
存儲(chǔ)這個(gè)東西,大部分讀者并不是太了解,從比較基礎(chǔ)知識(shí)開(kāi)始寫(xiě),并引出問(wèn)題和大家一起討論解決的辦法.盤(pán)算了一下大致分為七個(gè)部分,由于篇幅限制,在本篇將先介紹前三部分:
一、存儲(chǔ)類(lèi)型
二、文件系統(tǒng)
三、存儲(chǔ)介質(zhì)
四、Raid和副本
五、SRVSAN的架構(gòu)
六、SRVSAN的安全隱患
七、解決的方法
一般情況下,我們將存儲(chǔ)分成了4種類(lèi)型,基于本機(jī)的DAS和網(wǎng)絡(luò)的NAS存儲(chǔ)、SAN存儲(chǔ)、對(duì)象存儲(chǔ).對(duì)象存儲(chǔ)是SAN存儲(chǔ)和NAS存儲(chǔ)結(jié)合后的產(chǎn)物,汲取了SAN存儲(chǔ)和NAS存儲(chǔ)的優(yōu)點(diǎn).
圖1
我們來(lái)了解一下應(yīng)用是怎么樣獲取它想要的存在存儲(chǔ)里的某個(gè)文件信息,并用大家熟悉的Windows來(lái)舉例,如圖1.
文件系統(tǒng)先查詢緩存中有沒(méi)有數(shù)據(jù),如果有直接返回?cái)?shù)據(jù);沒(méi)有,文件系統(tǒng)通過(guò)內(nèi)存通信傳遞到下一環(huán)節(jié)命令“讀取起始位置LBA1000,長(zhǎng)度1024的信息”.
如果磁盤(pán)扇區(qū)大小是4K,實(shí)際一次I/O讀取的數(shù)據(jù)是4K,磁頭讀取的4K數(shù)據(jù)到達(dá)服務(wù)器上的內(nèi)容后,有文件系統(tǒng)截取前1K的數(shù)據(jù)傳遞給應(yīng)用,如果下次應(yīng)用再發(fā)起同樣的請(qǐng)求,文件系統(tǒng)就可以從服務(wù)器的內(nèi)存中直接讀取.
不管是DAS、NAS還是SAN,數(shù)據(jù)訪問(wèn)的流程都是差不多的.DAS將計(jì)算、存儲(chǔ)能力一把抓,封裝在一個(gè)服務(wù)器里.大家日常用的電腦,就是一個(gè)DAS系統(tǒng),如圖1.
圖2
如果將計(jì)算和存儲(chǔ)分離了,存儲(chǔ)成為一個(gè)獨(dú)立的設(shè)備,并且存儲(chǔ)有自己的文件系統(tǒng),可以自己管理數(shù)據(jù),就是NAS,如圖2.
計(jì)算和存儲(chǔ)間一般采用以太網(wǎng)絡(luò)連接,走的是CIFS或NFS協(xié)議.服務(wù)器們可以共享一個(gè)文件系統(tǒng),也就是說(shuō),不管服務(wù)器講的是上海話還是杭州話,通過(guò)網(wǎng)絡(luò)到達(dá)NAS的文件系統(tǒng),都被翻譯成為普通話.
所以NAS存儲(chǔ)可以被不同的主機(jī)共享.服務(wù)器只要提需求,不需要進(jìn)行大量的計(jì)算,將很多工作交給了存儲(chǔ)完成,省下的CPU資源可以干更多服務(wù)器想干的事情,即計(jì)算密集型適合使用NAS.
圖3
計(jì)算和存儲(chǔ)分離了,存儲(chǔ)成為一個(gè)獨(dú)立的設(shè)備,存儲(chǔ)只是接受命令不再做復(fù)雜的計(jì)算,只干讀取或者寫(xiě)入文件2件事情,叫SAN,如圖3.
因?yàn)椴粠募到y(tǒng),所以也叫“裸存儲(chǔ)”,有些應(yīng)用就需要裸設(shè)備,如數(shù)據(jù)庫(kù).存儲(chǔ)只接受簡(jiǎn)單明了的命令,其他復(fù)雜的事情,有服務(wù)器端干了.再配合FC網(wǎng)絡(luò),這種存儲(chǔ)數(shù)據(jù)讀取/寫(xiě)入的速度很高.
但是每個(gè)服務(wù)器都有自己的文件系統(tǒng)進(jìn)行管理,對(duì)于存儲(chǔ)來(lái)說(shuō)是不挑食的只要來(lái)數(shù)據(jù)我就存,不需要知道來(lái)的是什么,不管是英語(yǔ)還是法語(yǔ),都忠實(shí)記錄下來(lái)的.
但是只有懂英語(yǔ)的才能看懂英語(yǔ)的數(shù)據(jù),懂法語(yǔ)的看懂法語(yǔ)的數(shù)據(jù).所以,一般服務(wù)器和SAN存儲(chǔ)區(qū)域是一夫一妻制的,SAN的共享性不好.當(dāng)然,有些裝了集群文件系統(tǒng)的主機(jī)是可以共享同一個(gè)存儲(chǔ)區(qū)域的.
從上面分析,我們知道,決定存儲(chǔ)的快慢是由網(wǎng)絡(luò)和命令的復(fù)雜程度決定的.
網(wǎng)絡(luò)通信中還有FC網(wǎng)絡(luò)和以太網(wǎng)絡(luò).FC網(wǎng)絡(luò)目前可以實(shí)現(xiàn)8Gb/s,但以太網(wǎng)絡(luò)通過(guò)光纖介質(zhì)已經(jīng)普及10Gb/s,40Gb/s的網(wǎng)卡也在使用了.也就是說(shuō)傳統(tǒng)以太網(wǎng)絡(luò)已經(jīng)不是存儲(chǔ)的瓶頸了.除了FCSAN,IPSAN也是SAN存儲(chǔ)的重要成員.
對(duì)存儲(chǔ)的操作,除了熟悉的讀/寫(xiě)以外,其實(shí)還有創(chuàng)建、打開(kāi)、獲取屬性、設(shè)置屬性、查找等等.
對(duì)于有大腦的SAN存儲(chǔ)來(lái)說(shuō),除了讀/寫(xiě)以外的命令,都可以在本地內(nèi)存中完成,速度極快.
而NAS存儲(chǔ)缺乏大腦,每次向存儲(chǔ)傳遞命令,都需要IP封裝并通過(guò)以太網(wǎng)絡(luò)傳遞到NAS服務(wù)器上,這個(gè)速度就遠(yuǎn)遠(yuǎn)低于內(nèi)存通信了.
總體上來(lái)講,對(duì)象存儲(chǔ)同兼具SAN高速直接訪問(wèn)磁盤(pán)特點(diǎn)及NAS的分布式共享特點(diǎn).
NAS存儲(chǔ)的基本單位是文件,SAN存儲(chǔ)的基本單位是數(shù)據(jù)塊,而對(duì)象存儲(chǔ)的基本單位是對(duì)象,對(duì)象可以認(rèn)為是文件的數(shù)據(jù)+一組屬性信息的組合,這些屬性信息可以定義基于文件的RAID參數(shù)、數(shù)據(jù)分布和服務(wù)質(zhì)量等.
采取的是“控制信息”和“數(shù)據(jù)存儲(chǔ)”分離的模式,客戶端用對(duì)象ID+偏移量作為讀寫(xiě)的依據(jù),客戶端先從“控制信息”獲取數(shù)據(jù)存儲(chǔ)的真實(shí)地址,再直接從“數(shù)據(jù)存儲(chǔ)”中訪問(wèn).
對(duì)象存儲(chǔ)大量使用在互聯(lián)網(wǎng)上,大家使用的網(wǎng)盤(pán)就是典型的對(duì)象存儲(chǔ).對(duì)象存儲(chǔ)有很好的擴(kuò)展性,可以線性擴(kuò)容.并可以通過(guò)接口封裝,還可以提供NAS存儲(chǔ)服務(wù)和SAN存儲(chǔ)服務(wù).
VMware的vSAN本質(zhì)就是一個(gè)對(duì)象存儲(chǔ).分布式對(duì)象存儲(chǔ)就是SRVSAN的一種,也存在安全隱患.因?yàn)檫@個(gè)隱患是X86服務(wù)器帶來(lái)的.
計(jì)算機(jī)的文件系統(tǒng)是管理文件的“賬房先生”.
如果沒(méi)有這個(gè)“賬房先生”,讓每個(gè)“伙計(jì)”自由的出入倉(cāng)庫(kù),就會(huì)導(dǎo)致倉(cāng)庫(kù)雜亂無(wú)章、貨物遺失.
就像那年輕紡城機(jī)房剛啟用的時(shí)候,大家的貨物都堆在機(jī)房里,沒(méi)有人統(tǒng)一管理,設(shè)備需要上架的時(shí)候,到一大堆貨物中自行尋找,安裝后的垃圾也沒(méi)有人打掃,最后連堆積的地方都找不到,有時(shí)自己的貨物找不到了,找到別人的就使用了…….
大家都怨聲載道,后來(lái)建立了一個(gè)倉(cāng)庫(kù),請(qǐng)來(lái)了倉(cāng)庫(kù)管理員,用一本本子記錄了貨物的歸宿和存儲(chǔ)的位置,建立貨物的出入庫(kù)制度,問(wèn)題都解決了,這就是文件系統(tǒng)要做的事情.
文件系統(tǒng)管理存取文件的接口、文件的存儲(chǔ)組織和分配、文件屬性的管理(比如文件的歸屬、權(quán)限、創(chuàng)建事件等).
每個(gè)操作系統(tǒng)都有自己的文件系統(tǒng).比如windows就有常用的FAT、FAT32、NTFS等,Linux用ext1-4的等.
存儲(chǔ)文件的倉(cāng)庫(kù)有很多中形式,現(xiàn)在主要用的是(機(jī)械)磁盤(pán)、SSD、光盤(pán)、磁帶等等.
拿到這些介質(zhì)后,首先需要的是“格式化”,格式化就是建立文件存儲(chǔ)組織架構(gòu)和“賬本”的過(guò)程.比如將U盤(pán)用FAT32格式化,我們可以看到是這樣架構(gòu)和賬本(如圖4):
圖4
主引導(dǎo)區(qū):記錄了這個(gè)存儲(chǔ)設(shè)備的總體信息和基本信息.比如扇區(qū)的大小,每簇的大小、磁頭數(shù)、磁盤(pán)扇區(qū)總數(shù)、FAT表份數(shù)、分區(qū)引導(dǎo)代碼等等信息.
分區(qū)表:,即此存儲(chǔ)的賬本,如果分區(qū)表丟失了,就意味著數(shù)據(jù)的丟失,所以一般就保留2份,即FAT1和FAT2.分區(qū)表主要記錄每簇使用情況,當(dāng)這位置的簇是空的,就代表還沒(méi)有使用,有特殊標(biāo)記的代表是壞簇,位置上有數(shù)據(jù)的,是指示文件塊的下一個(gè)位置.
目錄區(qū):目錄和記錄文件所在的位置信息.
數(shù)據(jù)區(qū):記錄文件具體信息的區(qū)域.
通過(guò)以下的例子來(lái)幫助理解什么是FAT文件系統(tǒng).
假設(shè)每簇8個(gè)扇區(qū)組成一個(gè)簇,大小是512*8=4K.根目錄下的readme.txt文件大小是10K,如圖5:
圖5
在這個(gè)例子中,我們看到在FAT文件系統(tǒng),是通過(guò)查詢FAT表和目錄項(xiàng)來(lái)確定文件的存儲(chǔ)位置,文件分布是以簇為單位的數(shù)據(jù)塊,通過(guò)“鏈條”的方式來(lái)指示文件數(shù)據(jù)保存的文字.
當(dāng)要讀取文件時(shí),必須從文件頭開(kāi)始讀取.這樣的方式,讀取的效率不高.
不同的Linux文件系統(tǒng)大同小異,一般都采取ext文件系統(tǒng),如圖6.
圖6
啟動(dòng)塊內(nèi)是服務(wù)器開(kāi)機(jī)啟動(dòng)使用的,即使這個(gè)分區(qū)不是啟動(dòng)分區(qū),也保留.
超級(jí)塊存儲(chǔ)了文件系統(tǒng)的相關(guān)信息,包括文件系統(tǒng)的類(lèi)型,inode的數(shù)目,數(shù)據(jù)塊的數(shù)目
Inodes塊是存儲(chǔ)文件的inode信息,每個(gè)文件對(duì)應(yīng)一個(gè)inode.包含文件的元信息,具體來(lái)說(shuō)有以下內(nèi)容:
文件的字節(jié)數(shù)
文件擁有者的User ID
文件的Group ID
文件的讀、寫(xiě)、執(zhí)行權(quán)限
文件的時(shí)間戳,共有三個(gè):ctime指inode上一次變動(dòng)的時(shí)間,mtime指文件內(nèi)容上一次變動(dòng)的時(shí)間,atime指文件上一次打開(kāi)的時(shí)間.
鏈接數(shù),即有多少文件名指向這個(gè)inode
文件數(shù)據(jù)block的位置
當(dāng)查看某個(gè)目錄或文件時(shí),會(huì)先從inode table中查出文件屬性及數(shù)據(jù)存放點(diǎn),再?gòu)臄?shù)據(jù)塊中讀取數(shù)據(jù).
通過(guò)讀取\var\readme.txt文件流程,來(lái)理解ext文件系統(tǒng),如圖7.
圖7
硬盤(pán)格式化的時(shí)候,操作系統(tǒng)自動(dòng)將硬盤(pán)分成兩個(gè)區(qū)域.
當(dāng)inode資源消耗完了,盡管數(shù)據(jù)區(qū)域還有空余空間,都不能再寫(xiě)入新文件.
總結(jié):Windows的文件系統(tǒng)往往是“串行”的,而linux的文件系統(tǒng)是“并行”的.
再來(lái)看分布式的文件系統(tǒng).
如果提供持久化層的存儲(chǔ)空間不是一臺(tái)設(shè)備,而是多臺(tái),每臺(tái)之間通過(guò)網(wǎng)絡(luò)連接,數(shù)據(jù)是打散保存在多臺(tái)存儲(chǔ)設(shè)備上.也就是說(shuō)元數(shù)據(jù)記錄的不僅僅記錄在哪塊數(shù)據(jù)塊的編號(hào),還要記錄是哪個(gè)數(shù)據(jù)節(jié)點(diǎn)的.
這樣,元數(shù)據(jù)需要保存在每個(gè)數(shù)據(jù)節(jié)點(diǎn)上,而且必須實(shí)時(shí)同步.做到這一點(diǎn)其實(shí)很困難.如果把元數(shù)據(jù)服務(wù)器獨(dú)立出來(lái),做成“主從”架構(gòu),就不需要在每個(gè)數(shù)據(jù)節(jié)點(diǎn)維護(hù)元數(shù)據(jù)表,簡(jiǎn)化了數(shù)據(jù)維護(hù)的難度,提高了效率.
Hadoop的文件系統(tǒng)HDFS就是一個(gè)典型的分布式文件系統(tǒng).
圖8
Block1: host11,host22,host31
Block2: host11,host21,host32
流式寫(xiě)入過(guò)程:
1)將64M的block1按64k的package劃分;
2)然后將第一個(gè)package發(fā)送給host11;
3)host11接收完后,將第一個(gè)package發(fā)送給host22,同時(shí)client想host11發(fā)送第二個(gè)package;
4)host22接收完第一個(gè)package后,發(fā)送給host31,同時(shí)接收host11發(fā)來(lái)的第二個(gè)package.
5)以此類(lèi)推,如圖黑色虛線3所示,直到將block1發(fā)送完畢.
6)host11,host22,host31向NameNode和 Client發(fā)送通知,說(shuō)“消息發(fā)送完了”.
7)client收到發(fā)來(lái)的消息后,向namenode發(fā)送消息,說(shuō)我寫(xiě)完了.這樣就真完成了.
8)發(fā)送完block1后,再向host11,host21,host32發(fā)送block2,如圖藍(lán)色虛線4所示.
……….
HDFS是分布式存儲(chǔ)的雛形,分布式存儲(chǔ)將在以后詳細(xì)介紹.
倉(cāng)庫(kù)有很多種存儲(chǔ)的介質(zhì),現(xiàn)在最常用的是磁盤(pán)和SSD盤(pán),還有光盤(pán)、磁帶等等.磁盤(pán)一直以性價(jià)比的優(yōu)勢(shì)占據(jù)了霸主的地位.
圓形的磁性盤(pán)片裝在一個(gè)方的密封盒子里,運(yùn)行起來(lái)吱吱的響,這就是我們常見(jiàn)的磁盤(pán).磁片是真正存放數(shù)據(jù)的介質(zhì),每個(gè)磁片正面和背面上都“懸浮”著磁頭.
磁盤(pán)上分割為很多個(gè)同心圓,每個(gè)同心圓叫做磁道,每個(gè)磁道又被分割成為一個(gè)個(gè)小扇區(qū),每個(gè)扇區(qū)可以存儲(chǔ)512B的數(shù)據(jù).當(dāng)磁頭在磁片上高速轉(zhuǎn)動(dòng)和不停換道,來(lái)讀取或者寫(xiě)入數(shù)據(jù).
其實(shí)磁片負(fù)責(zé)高速轉(zhuǎn)動(dòng),而磁頭只負(fù)責(zé)在磁片上橫向移動(dòng).決定磁盤(pán)性能的主要是磁片的轉(zhuǎn)速、磁頭的換道、磁盤(pán)、每片磁片的容量和接口速度決定的.轉(zhuǎn)速越高、換道時(shí)間越短、單片容量越高,磁盤(pán)性能就越好.
圖9
圖10
圖11
衡量磁盤(pán)性能主要參考 IOPS 和吞吐量?jī)蓚€(gè)參數(shù).
IOPS就是一秒鐘內(nèi)磁盤(pán)進(jìn)行了多少次的讀寫(xiě).
吞吐量就是讀出了多少數(shù)據(jù).
其實(shí)這些指標(biāo)應(yīng)該有前提,即是大包(塊)還是小包(塊),是讀還是寫(xiě),是隨機(jī)的還是連續(xù)的.一般我們看到廠家給的磁盤(pán)IOPS性能一般是指小包、順序讀下的測(cè)試指標(biāo).這個(gè)指標(biāo)一般就是最大值.
目前在X86服務(wù)器上我們常使用的 SATA、SAS磁盤(pán)性能:
圖12
實(shí)際生產(chǎn)中估算,SATA 7200轉(zhuǎn)的磁盤(pán),提供的IOPS為60次左右,吞吐量在70MB/s.
我們2014年首次使用的裸容量2P的SRVSAN存儲(chǔ)的數(shù)據(jù)持久化層采用57臺(tái)X86服務(wù)器,內(nèi)置12塊SATA7200 3TB硬盤(pán).共684塊磁盤(pán),大約只提供41040次IOPS和47.88GB/s.
這些指標(biāo)顯然是不能滿足存儲(chǔ)需要的,需要想辦法“加速”.
機(jī)械磁盤(pán)其實(shí)也做了很多優(yōu)化,比如扇區(qū)地址的編號(hào)不是連續(xù)的.
因?yàn)榇牌D(zhuǎn)的夠快(7200轉(zhuǎn)/分鐘即1秒鐘轉(zhuǎn)120轉(zhuǎn),轉(zhuǎn)一圈是8.3毫秒,也就是在讀寫(xiě)同一個(gè)磁道最大時(shí)延是8.3秒),防止磁頭的讀寫(xiě)取錯(cuò)過(guò)了,所以扇區(qū)的地址并不是連續(xù)的,而是跳躍編號(hào)的,比如2:1的交叉因子(1、10、2、11、3、12…..).
同時(shí)磁盤(pán)也有緩存,具有隊(duì)列,并不是來(lái)一個(gè)I/O就讀寫(xiě)一個(gè),而是積累到一定I/O,根據(jù)磁頭的位置和算法完成的.I/O并不是一定是“先到先處理”,而是遵守效率.
加速最好的辦法就是使用SSD盤(pán).磁盤(pán)的控制部分是由機(jī)械部分+控制電路來(lái)構(gòu)成,機(jī)械部分的速度限制,使磁盤(pán)的性能不可能有大的突破.而SSD采用了全電子控制可以獲得很好的性能.
SSD是以閃存作為存儲(chǔ)介質(zhì)再配合適當(dāng)?shù)目刂菩酒M成的存儲(chǔ)設(shè)備.目前用來(lái)生產(chǎn)固態(tài)硬盤(pán)的NAND Flash有三種:
單層式存儲(chǔ)(SLC,存儲(chǔ)1bit數(shù)據(jù))
二層式存儲(chǔ)(MLC,存儲(chǔ)4bit數(shù)據(jù))
三層式存儲(chǔ)(TLC,存儲(chǔ)8bit數(shù)據(jù))
SLC成本最高、壽命最長(zhǎng)、但訪問(wèn)速度最快,TLC成本最低、壽命最短但訪問(wèn)速度最慢.為了降低成本,用于服務(wù)器的企業(yè)級(jí)SSD都用了MLC,TLC可以用來(lái)做U盤(pán).
圖13
SSD普及起來(lái)還有一點(diǎn)的障礙,比如成本較高、寫(xiě)入次數(shù)限制、損壞時(shí)的不可挽救性及當(dāng)隨著寫(xiě)入次數(shù)增加或接近寫(xiě)滿時(shí)候速度會(huì)下降等缺點(diǎn).
對(duì)應(yīng)磁盤(pán)的最小IO單位扇區(qū),page是SSD的最小單位.
比如每個(gè)page存儲(chǔ)512B的數(shù)據(jù)和218b的糾錯(cuò)碼,128個(gè)page組成一個(gè)塊(64KB),2048個(gè)塊,組成一個(gè)區(qū)域,一個(gè)閃存芯片有2個(gè)區(qū)域組成.Page的尺寸越大,這個(gè)閃訊芯片的容量就越大.
但是SSD有一個(gè)壞習(xí)慣,就是在修改某1個(gè)page的數(shù)據(jù),會(huì)波及到整塊.需要將這個(gè)page所在的整塊數(shù)據(jù)讀到緩存中,然后再將這個(gè)塊初始化為1,再?gòu)木彺嬷凶x取數(shù)據(jù)寫(xiě)入.
對(duì)于SSD來(lái)說(shuō),速度可能不是問(wèn)題,但是寫(xiě)的次數(shù)是有限制的,所以塊也不是越大越好.當(dāng)然對(duì)于機(jī)械磁盤(pán)來(lái)說(shuō)也存在類(lèi)似問(wèn)題,塊越大,讀寫(xiě)的速度就越快,但浪費(fèi)也越嚴(yán)重,因?yàn)閷?xiě)不滿一塊也要占一塊的位置.
不同型號(hào)不同廠家的SSD性能差異很大,下面是我們的分布式塊存儲(chǔ)作為緩存使用的SSD參數(shù):
采用PCIe 2.0接口,容量是1.2T,綜合讀寫(xiě)IOPS(4k小包)是260000次,讀吞吐量1.55GB/s,寫(xiě)吞吐量1GB/s.
在1臺(tái)SRVSAN的服務(wù)器配置了一塊SSD作為緩存和12塊7200轉(zhuǎn) 3T SATA盤(pán),磁盤(pán)只提供1200次、1200M的吞出量.
遠(yuǎn)遠(yuǎn)小于緩存SSD提供的能力,所以直接訪問(wèn)緩存可以提供很高的存儲(chǔ)性能,SRVSAN的關(guān)鍵是計(jì)算出熱點(diǎn)數(shù)據(jù)的算法,提高熱點(diǎn)數(shù)據(jù)的命中率.
用高成本的SSD做為緩存,用廉價(jià)的SATA磁盤(pán)作為容量層.
(未完待續(xù))
文章出處:高效運(yùn)維
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4459.html