GFS是什么
GFS,顧名思義就是谷歌文件系統(tǒng),和Big Table,Map Reduce并稱谷歌三駕馬車。 大部分谷歌服務(wù)的基石(Search, Cloud Drive, Gmail etc.)
最底層是文件系統(tǒng),在之上是將數(shù)據(jù)模型抽象出來,便于很好的使用,這就是bigTable,在之上是算法, 算法除了訪問數(shù)據(jù)模型外,還能夠直接訪問文件系統(tǒng),最上面就是各類應(yīng)用了
gfs從哪里來
源頭是如何保存一個(gè)文件?保存文件需要兩部分:
metadata:包括文件信息和索引
file content:具體的文件內(nèi)容
此時(shí)索引信息會(huì)保存的粒度更粗,存的是chunk,每個(gè)chunk是64M
再進(jìn)一步,怎么保存超大文件確定啊很明顯:chunkServer的變化都需要將其告訴master
怎么進(jìn)行改進(jìn)?
將master保存每一塊在哪個(gè)服務(wù)器上,每個(gè)服務(wù)器的索引放到chunkServer中
GFS容錯(cuò)機(jī)制
- 怎么發(fā)現(xiàn)數(shù)據(jù)損壞
可以對每個(gè)block保存?zhèn)€checksum,對于1T的數(shù)據(jù),只有64M,完全可以放到內(nèi)存中
如果數(shù)據(jù)損壞的話呢,Chunk Server就找Master恢復(fù)數(shù)據(jù)為了防止數(shù)據(jù)的丟失,就做冗余存儲(chǔ),每個(gè)chunk存3份,在chunkServer的選擇上,盡可能放到不同的機(jī)房,然后同機(jī)房也放到不同的機(jī)架上
心跳的設(shè)計(jì):可能是由于master和server之間網(wǎng)絡(luò)不通,這個(gè)時(shí)候,master會(huì)求助其他的server,讓他們再去ping下失聯(lián)的server
當(dāng)發(fā)現(xiàn)副本數(shù)小于3個(gè),會(huì)啟動(dòng)修復(fù)進(jìn)程進(jìn)行修復(fù),修復(fù)的優(yōu)先級
怎么應(yīng)對熱點(diǎn)
負(fù)載均衡
核心讀寫操作
好了,我們構(gòu)建這么一個(gè)龐大的系統(tǒng)最后不就是要讀和寫嘛,現(xiàn)在我們看看GFS是如何讀寫的。讀數(shù)據(jù)時(shí)Client先向Master要到Chunk信息,然后去ChunkServer取數(shù)據(jù)
寫文件的時(shí)候呢,也是先找到Master Server要到信息,然后找到距離最近的Chunk Server。由其帶領(lǐng)其他ChunkServer一起寫數(shù)據(jù)。如果圖中有任何一步出現(xiàn)錯(cuò)誤則中止寫入,返回錯(cuò)誤
寫的時(shí)候是往最近的server寫,然后server再接收到數(shù)據(jù)后就往其他server發(fā)送,在寫入的時(shí)候呢,是先緩存下來,最后都緩存好了,再寫入到磁盤,好處是減少出錯(cuò)的概率,因?yàn)橐坏┚彺婧茫賹懗鲥e(cuò)的幾率就大大減少了。
第3步是cache,都cached后,由primary server負(fù)責(zé)協(xié)調(diào)開始寫入,都寫成功后,告訴客戶端
如果寫入出錯(cuò)了怎么辦?如果引入出錯(cuò)處理機(jī)制,會(huì)引入更多的問題,往往解決一個(gè)問題會(huì)帶來更多的問題,因此系統(tǒng)在設(shè)計(jì)過程中,盡可能只提供最簡單的功能,由客戶端來負(fù)責(zé)重試