另外還要支持secondary index,還有要支持認證。最后一定要支持重平衡,隨著時間運轉(zhuǎn)系統(tǒng)內(nèi)勢必不均衡,有的節(jié)點弱,有的節(jié)點冷,有的磁盤占用空間比較滿,有的磁盤占用空間比較空,勢必要有一個重新平衡,重新利用機器的過程,這個特性也是我們一定需要的。我們來看一下KVDB的架構(gòu)圖,其實這個架構(gòu)推有點像,大體上有點像GLS,Client在發(fā)起一個繪畫的時候,都會從Meta上取一個東西,我影射到哪個,拿到一個信息之后,就會根據(jù)Meta Server進行讀寫操作,數(shù)據(jù)流傳輸跟后端存儲節(jié)點去進行,有主有從可以進行同步。
Meta Server并不是一個,而是一組機器。那么Meta Server如何保持影射之間的一致性?我們采用的方式就是變種的一致性,當某一個Meta Server出現(xiàn)一定時間,他自己肯定知道出現(xiàn)一段時間沒有跟后端進行同步成功,這時候會發(fā)起一個操作,把自己下線,就是把自己服務(wù)端口給封掉。這里有一個風(fēng)險,后端掛掉是不是會導(dǎo)致所有的Meta Server都掛掉了全部下線,這樣導(dǎo)致服務(wù)不可用的。我們在這塊假如協(xié)議,我能不能自己把自己給宕了,如果能就宕了,如果不能就繼續(xù)提供服務(wù),這樣保證即使出現(xiàn)故障的時候,仍然保持有二分之一的機器能夠服務(wù)。當一個系統(tǒng)里面,我們主要處理兩個緯度。
這種邏輯很簡單,缺乏一個很有理論高度平衡,SAE怎么來做這個事,基于一個數(shù)學(xué)理論,實際上就兩個概念,第一個概念叫數(shù)學(xué)期望,第二就軍方差。我們以磁盤利用率為例子,比如現(xiàn)在所有系統(tǒng)里面磁盤利用率,數(shù)學(xué)期望是50%的話,這個時候表示什么呢?就表示我們所有系統(tǒng)里面磁盤大概利用率,基本上都是屬于一半。軍方差表什么意思?是所有系統(tǒng)磁盤里面有效率,或者說利用率,離50%的偏差程度。換句話說,我們怎么來判斷重平衡,如果我這個系統(tǒng)里邊,不管你以什么指標為準,如果軍方差很小,數(shù)學(xué)期望很高,這時候做的不是平衡而是擴容。反過來如果系統(tǒng)里面數(shù)學(xué)期望很小,軍方差很高,就表示你所有點離中心離散度已經(jīng)非常高了,這時候做的不是擴容,而是重平衡。
所以,我們以這個為方式就設(shè)立一個SAE上用來重平衡的概念,當然我們這個公式不是這么簡單,因為時間關(guān)系不多說了。重平衡如果做無縫遷移?我們從客戶端來寫,從A遷到B,以寫B(tài)端成功為主。從A去讀,也人覺得你寫到A,再寫到B,如果A沒有成功,會不會讀不出來,這可能會發(fā)生這就是我們一個他想保證一個最終一致性,這個暫時可能讀不出來,但是一定會讀出來。
這是KVDB使用的一些問題,不多說了,還有一個服務(wù)。下面介紹一下Rank,排行榜,這個排行榜服務(wù)應(yīng)用場景就是有這種,比如游戲網(wǎng)站,游戲下載周排行,月排行都會用到。Rank,第一個需求是top rank,我往里面放一些東西,我希望是最大的,比如top100 top1000,還有一個all rank,我要知道在里面每一個排行,我玩游戲想知道分數(shù)最高100個用戶是誰,這叫top rank,還有我給你一個用戶,告訴我在FaceBook用戶里面用戶排名是多少,這就是all rank,這塊今天不討論了。
目前主要解決是top rank的問題,all rank也在開發(fā)。實際上這個Rank服務(wù)還是比較簡單,到后端主從,實際上一個Rank配一個ERBT,他一部分是key到一個value,還有如何從rank而去查value,關(guān)鍵如何從value去查Rank,這塊也可以通過擴展,不僅僅包括服務(wù)節(jié)點,紅黑部分,還包括所有子節(jié)點數(shù),通過這個信息我們就可以通過topn來得到,就像我這個表里所說到,PPT可以下載,大家回去看。
那么Rank可靠性如何來保證?首先是一個in-memory master slave sync,因為從事任何時刻熱備才能夠頂替主的服務(wù)。另外他會每隔2分鐘,1分鐘把自己的數(shù)據(jù),變化的數(shù)據(jù)宕到硬盤上。主從之間我們bin-log,這是一個問題。比如我主跟從互相in-memory,比如從突然宕機24個小時,這時候從要起來追主所有數(shù)據(jù),這時候怎么來做,我們每次去同步的時候都去對比主從之間這個表的值,如果發(fā)現(xiàn)這個不一樣就去統(tǒng)計這一小塊的數(shù)字,這就減少主從之間量,雖然表面上是一個全部,實際上量會得到一個控制。
NoSQL還有一個Counter應(yīng)用場景。從SAE來講,對于開發(fā)者如何來選型SAE的NoSQL首先是速度,其次像容量,可靠性。我們反過來看容量,肯定是有限制的,雖然SAE是動態(tài)去擴容量,今天是10兆明天不夠變成20兆,200兆,一個T就是可以,但是有一個上限,超過一個上限往里放,容量最大KVDB,可以限往里面去放,MySQL也比較大,目前支持512個表,每個表里面最多1千萬條記錄。可靠性上來講,很顯然MySQL占第一位,甚至?xí)紤]WLAN的方式部署數(shù)據(jù),反過來MySQL數(shù)據(jù)是最低的,一旦出現(xiàn)問題你不可恢復(fù),需要從其他數(shù)據(jù)里面重新加入。
最后是SAE,在SAE官方微博有招聘信息,大家就興趣可以加入SAE。如果大家對今天演講內(nèi)容有問題可以在微博上與我進行溝通,謝謝大家。
推薦閱讀
時至今日,“Big data”(大數(shù)據(jù))時代的來臨已經(jīng)毋庸置疑,尤其是在電信、金融等行業(yè),幾乎已經(jīng)到了“數(shù)據(jù)就是業(yè)務(wù)本身”的地步。這種趨勢已經(jīng)讓很多相信數(shù)據(jù)之力量的企業(yè)做出改變。恰逢此時,為了讓更多的人了解和使>>>詳細閱讀
本文標題:新浪云計算叢磊:NoSQL在SAE中的應(yīng)用
地址:http://www.sdlzkt.com/a/kandian/20120305/36930.html