這里有一個數據,這是10%的增量,這是按照15%的增量,都到了萬億級別,所以我們當時在考慮解決這個問題的時候,可能跟你們在考慮解決你們問題的時候類似。這是其中一類的數據量,另外還有的數據量,就是到網上大量爬一些數據,跟某些特定用戶關系的一些數據爬回來,還有大量的報表等等,它是一個金融機構,也要爬回來,所以這樣的話就意味著,我們當時面對這些數據的類型跟你們今天面對的數據類型非常接近,這是為什么拿這個例子來講的原因。
這是我們當時用來處理設計的目標,這里面有幾個點想提醒一下。
一、數據規(guī)模。未來整個數據庫最終會有多大規(guī)模。這個規(guī)模設計的目標是到幾十萬億條規(guī)模設計的。100以上的PB,我們心目中的目標是按照EB這個級別來設計的,可以設想一下,如果一個節(jié)點10個硬盤,1個硬盤按照在2TB,可以看到這里要有多少個節(jié)點,如果再乘以3,或者再乘以1.75,就可以算出來。這是每一個物理的節(jié)點上面會有多少個數據,這是每一個系統(tǒng)里面對這些數據進行索引有多少個元數據。
二、帶寬規(guī)模。在峰值的時候需要多大的帶寬。
三、性能。每秒鐘100K,10萬到100多萬的級別,同時它的響應必須在10個毫秒以內。這個地方是說,支撐的共識用戶數幾百萬人,現在像騰訊都是幾十個Million,已經是非常高的人數了。
四、高可用、彈性擴展、長期存儲。一個數據能夠在底下存多久,所以這個是我們當時對剛才那個需求的一個總結。
五、容錯。這個系統(tǒng)必須是容錯的。性價比要足夠的低,如果成本太高了是沒人用的。
剛才談到,如果用低端的機器降低了成本,但錯誤率提升,錯誤可能發(fā)生在硬盤、機器、網絡、機器和機器的交互上面。容錯是必須面對的一個重要方面。用低成本的設備必須是容錯的,無論是使用現存的云服務還是自己做,這一點都逃不掉。
No SPOF,講容錯是說一個數據進來,不管哪個環(huán)節(jié)出了問題,系統(tǒng)都能夠自動地恢復,恢復是有度的,如果我存了三份,分別把三份存在不同的盤、不同的機器節(jié)點上面,在三個不同的機器分布在不同盤上面,同時出錯的概率是非常低的,這里面很重要的節(jié)點,當我這個系統(tǒng),如果我把一個提交給你在系統(tǒng)的每一個層次里面任何一層上面都不能只有一個單點來應對,在第一版的Hadoop上面就是一個單點,它的NameNode就是一個單點,二版的把它改變了Active/Passive,也會有一些問題,這個是說我這個節(jié)點死了,馬上再啟動另外一個節(jié)點,這中間對于規(guī)模比較大的,頻度比較高的應用,這個中間啟動切換的1秒鐘或者0.5秒鐘就有大量的數據傳上來,就可能丟失了。
Facebook曾經做過一個,把HBase做成Active/Active,它專門有一支團隊做這個事情,兩邊同時在寫,對底下的存儲層來說必須要處理,這兩邊同時寫和原來系統(tǒng)里面寫是什么關系,是不是需要注意到分布式過程中間的數據是不是能保持一致?這個是非常復雜的。
這幾個數據大家一定要看。一次尋盤要10個毫秒,換句話說,如果數據在盤上,當你的請求是要來查這個數據的時候,假如一次讀盤能把這個數據找到至少需要10個毫秒,這是什么意思呢?10毫秒×100就是1秒,假如這個盤上有你要的數據,每秒鐘能夠支撐的尋盤就只有100個,假如你的共識的并發(fā)是在每秒鐘10萬的話,數據分布在N個盤里面才能支持每秒鐘10萬。設想一下,在這種情形下,如果所有的東西都在盤里面是不是很困難,或者目前的盤是不是做不到。這個10毫秒還是說這個盤是空的,隨著盤的數據存的越來越多,每次到盤上去讀的,找到數據的可能性就越低。換句話說,有的時候高達10次讀盤找不到你的數據,可能要多15次、20次,為什么呢?現在數據量都是幾個T的,管理這個數據的文件系統(tǒng)會把其中一部分緩存起來,不會全部緩存起來,沒有緩存起來就到盤上讀,讀的是傾向于某個地方存這個數據的地方,相關的質證是在10個地方,才能找到數據。這些基本的東西在你們考慮的時候一定要考慮進去。
考慮數據從備份到M/S、MM、2PC、Paxos,是說數據的一致性。也是谷歌的例子,這是經驗性別東西在里面。一致性交易。這個一致性在Backups就是Weak,在Backups里面沒有交易,比如你要做M/S里面,你只能做到Eventual Consistency,這是什么意思呢?最終一致性。最初的問題來源是同時往三個地方寫了三份數據,這個三份數據之間是不是一致的我們不知道,需要通過一些特殊的方式來保證。往往這種情況下,構建新的數據時,傳統(tǒng)要等三個一致的時候才能回過去說數據完整的寫好了。現在可以是兩個一致,或者是一個寫進去,就可以知道數據寫進去不會丟了,等到那兩個再返還回來時再確定它是一致的。還有若干的細節(jié),包括分布式的討論。