塊存儲設備
互聯網越來越發達,網速越來越快(管制也越來越嚴),很多事情都可以通過聯網解決。很多存儲行業商家也get到了這個點。下圖是個極簡的模型,商家存儲設備(黑盒子),用戶一個筆記本電腦,通過TCP/IP承載的iSCSI協議,對于Linux用戶,可以看到一個塊設備/dev/sdax,就像使用本地硬盤(如/dev/sda)一樣,可以對其進行分區,格式化為文件系統,亦或直接裸設備讀寫。
圖9 塊存儲設備
對于用戶,這就夠了,著實方便,付錢就行。
對于一個有追求的碼農,我們是有必要看看這個黑盒子里面是什么。下圖是黑盒子里面的東西,再次強調,包括本文之前或之后的插圖及描述,都是十分宏觀的。篇幅有限不能說的太細,符合本文主旨;另外,說的太細就會和具體商家產品很像,咱不能那么干。
拋開硬件、驅動、OS等,直接看軟件邏輯,首先將系統上的硬盤組成多個RAID,如何組,組成哪種RAID,哪幾塊盤組成RAID等等,這些都是可以通過管理員配置。有人問了(對,還是前面問問題的那個人):“就一個RAID行不行?”
可以,但是有風險,如果一個盤出現故障,RAID就暫時不能提供服務了,整個系統所有用戶會受到影響。如果組成多個RAID,那么,僅僅有故障盤的RAID暫時無法服務,其它RAID是可以繼續工作,不至于影響所有用戶。套用某相聲表演藝人的話說,用戶就是衣食父母。
繼續看圖,軟件對下要管理RAID,對上要為用戶提供服務,它給用戶提供的是LUN(全稱是Logical Unit Number,也就是邏輯單元號),當然啦,用戶(人)不必去理解什么是LUN,就如上面所說,頂多是一個/dev/sdax,LUN是軟件、協議層面的東西。怎么理解呢?每個LUN關聯了一組物理存儲資源,你擁有了這個LUN,就擁有了這組物理存儲資源,凡是使用物理存儲資源,需要提供你的LUN ID。有過編程經驗的人很容易理解,十分類似一個文件或socket句柄。客戶端(這里不使用用戶這個詞,這里偏只程序)對LUN的讀寫,至少需要提供”LUN ID+R/W+Offset+Length[+data]”這些信息。
為什么需要LUN,而不是把RAID直接“丟給”用戶?
圖10 塊存儲設備內部
因為每個用戶的需求是不一樣。
碼農李二狗,全部身家800G代碼,做開發的時候谷歌一下然后復制粘貼來的。某宅男,擁有海量高清大片,4TB+不在話下。按照圖10,我們可以給李二狗分配LUN 1,給某宅男分配LUN 2。軟件邏輯層負責做映射,事實上,一個LUN可以映射到多個RAID,多個LUN也可以映射到一個RAID上(不常用,因為RAID故障影響多個用戶),用戶數據都會準確的保存到屬于該LUN的物理存儲資源中,不會出現張冠李戴的情況。當用戶需求改變的時候,如李二狗也開始收集高清大片了,需要的空間就大了,那么可以將LUN1資源進行擴充,十分靈活。最后,LUN的大小和該LUN所映射的物理存儲資源大小以及用戶查看/dev/sdax的大小是一致的。
帶文件系統的存儲設備
其實在大多數場景,用戶都是將設備格式化成某個文件系統使用。那么設備廠商就對用戶說:“我有一個辦法,你們可以不用自己格式化,我直接提供一個文件系統,直接mount就行了,NFS,簡單吧。”
“好啊!好啊!”
“不過,得加錢。”
“……”
商業上的事我們先不管,看下圖。用戶交好錢,被告知一個地址,直接mount到本地,確實方便。
圖11 帶文件系統的存儲設備
這回,黑盒子里面又是什么東西呢?
圖12 帶文件系統的存儲設備
看圖之后,是不是和我一樣的感覺?MMP奸商。 就多了一個文件系統層,內部格式化LUN,然后就多收了不少錢。
如果你以為只有這些就錯了!
我們假設,你付費買了1TB的空間,服務商是沒有真的給你預留1TB物理存儲資源的,當你用的時候,再去申請物理存儲資源。你很憤憤,就存滿1TB,此時你以為真的消耗服務商1TB物理存儲資源了?不見得!有可能只消耗了0.8TB甚至更少。
拋開商業成見,但從技術角度來看,這里有兩個技術需要提到壓縮 和 去重,這在文件系統層面很容易做到。
壓縮(Compress)
您可能知道,文件系統在進行IO時候是以一定大小數據塊(block)為單位進行的,以4KB為例。壓縮也是以這個數據塊為單位,在寫入磁盤之前進行壓縮,原本4KB的數據,壓縮之后可能就變成2KB,多個壓縮之后的數據塊再次拼成4KB,然后保存到物理磁盤。這個操作,節省了物理資源。用戶讀數據的時候,如果是壓縮的,需要首先解壓縮,然后返回給用戶。壓縮、解壓縮操作是純算法的,主要消耗CPU資源,因此在系統負載很高的時候,不建議啟用壓縮機制。另外,數據是否壓縮,需要額外的元數據(metadata)記錄,這增加了系統復雜度。有的設備會將壓縮、解壓縮操作交給硬件去完成,減少CPU的消耗。
去重(Deduplicate)
上傳一個大的高清影片到網盤,秒傳,遇到過吧?這說明服務商存儲系統存在了一個和你一模一樣的文件,你遇到了一個志同道合的宅友。為了節省空間,系統就僅僅給你做個標記(或類似一個軟鏈接),然后增加文件的引用計數,免得別人刪除了影響到你。這個還是從文件層面的去重,也十分容易理解。我們做個極端假設,如果兩個1G大小的文件,僅僅有一個字節不同,按照上面方式是不能做到去重的,還是得上傳。文件的一部分一樣就不能進行去重了嗎?
答案是有。數據塊(block)級別的去重。
圖13 數據塊級別去重
我們看圖13說話。最初,硬盤神馬都沒有,文件1數據全部寫入硬盤,這沒什么好說的。然后,文件2,其中BEF三個塊,硬盤已經存在,不必寫入了,剩下的塊需要寫入。最后再看文件3,前面3個塊,XYZ不存在于硬盤中,需要寫。后面的XY就不必寫了,最后的E也是不必寫。
去重技術確實節約物理存儲資源,但也存在一些問題。
比如:如何確定當前要寫的塊硬盤中已經存在?
不可能去硬盤中逐一比較!
一個做法是將早期寫入的塊進行HASH計算,將HASH值以及塊信息保存到內存中,作為Cache,新預寫的塊計算HASH值,如果HASH值在Cache中存在,則取出Cache中塊信息,做去重操作,記錄信息。內存有限,Cache不能足夠大到保存所有硬盤中的塊信息,因此去重是有限度的,另外Cache的更新也是一個技術要點,何種Cache更新算法能夠得到好的去重效率是一個值得深入研究的話題。
好了,以上簡要介紹了兩種存儲設備。接下來……
有人問了(對,依舊是前面問問題的那個人):
“我替碼農李二狗他父親王老爺子問個問題,是軟件就有BUG,如果你這軟件崩潰了,是不是所有用戶都不能正常訪問了?”
“沒錯!”
“弱爆了吧?”
在前面RAID的描述中,可以體會到一個詞“冗余”,冗余起到保險、保護作用。既然說軟件存在缺陷,可能掛,那么就放兩份在那,兩個物理獨立的設備運行同樣的軟件,互為主備。主用設備工作時備用設備待命,主備共享系統中RAID、LUN等配置及狀態,主用設備掛了,備用設備上。用戶無感知。這類方案在很多領域(如通信設備)也是常見的。
圖14 主備備份
“看起來有用,你這主備設備都放在哪里?”
“服務商機房或數據中心。”
“如果數據中心著火了或其它情況,這些設備就不能提供服務了吧?”
“沒錯!”
“弱爆了吧?”
數據中心可是個有網、有電、有空調,有外賣宅男向往的好地方,是具備基本的防火、防盜(防師兄?)等防災害的地方,但凡事預則立不預則廢,萬一出現差錯可就是大事了。
其實數據中心也有“備份”。一般在同城的其它地方,也會有一個數據中心,用于備份當前數據中心的數據,同城較近拉光纖,備份效率杠杠的,甚至是實時備份。
圖15 數據中心
“如果城市發生較大地震,兩個數據中心都損毀了,數據就丟了吧?”
“沒錯!”
“弱爆了吧?”
兩地三中心。即生產數據中心、同城災備中心、異地災備中心建設方案。兩個城市的三個數據中心互聯,如果一個數據中心發生故障或災難,其他數據中心可以正常運行并對核心業務或全部業務實現接管。
圖16 兩地三中心
“那如果兩個城市都……”
“你稍等,我打個電話。”
喂,代罵公司嗎?這是我的個人資產證明,幫我罵個人,罵道我破產。
……
天下無不散宴席。本次分享就到此結束了,還是那句話,能力有限水平一般,蜻蜓點水的啰嗦了這些,萬一有那么一句半句勾起了您的興趣,我就十分欣慰。
注:我們尊重對知識刨根問底的精神,以上代罵公司有關說辭純屬扯淡。
尾聲
“你可嚇壞我了,在看Linuxer公眾號的文章呢,向大牛們學習學習,我一直覺得技術沒啥長進,內心挺虛的。”
“看你體格應該不只是心虛吧?確實,這些文章質量都很高,值得學習,除了那篇《大話存儲》有點打醬油。在說,學習沒必要偷偷摸摸的吧?”
“習慣了,沒辦法,看感興趣的東西就這樣。”
“我只能呵呵了。我關注的主播要上線了,先走了,這個移動硬盤放這借你用用。”
“里面是什么?”
“當然也是你感興趣的東西——你懂的”。
-
RAID
+關注
關注
0文章
279瀏覽量
35140 -
存儲設備
+關注
關注
0文章
164瀏覽量
18644
原文標題:EMC潘國林: 大話存儲系列之月光寶盒(塊存儲)
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論