Megastore在論文中被介紹為一種"storage system"比原,但我更傾向于認(rèn)為它是一種跨地域的數(shù)據(jù)庫存儲(chǔ)方案降狠。
Megastore 提供一個(gè)可伸縮的西篓,高可靠锣光,一致性好,跨地域蔬浙,低延遲猪落,易用性好的數(shù)據(jù)庫存儲(chǔ)方案
System Design

在數(shù)據(jù)量過于龐大的時(shí)候,數(shù)據(jù)的增刪改查都是十分耗時(shí)的操作畴博,特別是join操作笨忌,相信很多人都深有感觸,在跨地域的data centers之間的延遲與通信消耗更是難以承受的俱病。
Megastore不出意外地也對(duì)數(shù)據(jù)進(jìn)行了partition, 這是通過對(duì)實(shí)踐中的業(yè)務(wù)觀察得到的結(jié)論官疲,大部分?jǐn)?shù)據(jù)都可以通過某種規(guī)則進(jìn)行partition(如按用戶對(duì)數(shù)據(jù)進(jìn)行劃分),這無形中契合了之前學(xué)過的現(xiàn)實(shí)世界的小世界特性亮隙。這些數(shù)據(jù)的小集合更加適合用NoSQL的key-value形式存儲(chǔ)途凫,而小集合之間的關(guān)系則比較適合關(guān)系型數(shù)據(jù)庫。而Megasotre也正是使用這種思想設(shè)計(jì)的溢吻。
在應(yīng)用層面维费,Meagastore結(jié)合了關(guān)系型數(shù)據(jù)庫與與非關(guān)系型數(shù)據(jù)庫,設(shè)計(jì)了很簡(jiǎn)潔的API促王,屏蔽了底層的實(shí)現(xiàn)細(xì)節(jié)犀盟。同時(shí)提供了Index,schema蝇狼,queue等以提高底層BigTable數(shù)據(jù)庫的易用性且蓬。使用megastore client Library屏蔽底層實(shí)現(xiàn)復(fù)雜性的同時(shí),也提供給用戶足夠的靈活性來指導(dǎo)數(shù)據(jù)的存放和讀寫以提高效率题翰。
一個(gè)entity group內(nèi)部恶阴,必須要滿足ACID的強(qiáng)一致性,因?yàn)檫@些數(shù)據(jù)很大概率是會(huì)被同時(shí)實(shí)用的豹障,但是對(duì)于跨entity group的操作冯事,則只保證部分的一致性,因?yàn)闃I(yè)務(wù)中對(duì)其要求沒有這么高血公。
Replication

一旦涉及到分布式系統(tǒng)設(shè)計(jì)昵仅,replication就是永恒的話題。在Megastore中累魔,同一個(gè)entity group的replica是可以跨data centers存在的摔笤,這是為了保證分布式系統(tǒng)的高可靠性,屬于很正常的設(shè)計(jì)垦写。比較復(fù)雜的部分往往是replica之間數(shù)據(jù)的同步與更新吕世。
Megastore沒有實(shí)用比較常見的同步、異步Master-Slave模型來保證數(shù)據(jù)的讀寫一致性梯投,而是采用了Paxos通過自選舉majority的形式來進(jìn)行replica之間的同步命辖。這毫無疑問可以解決Single point of failure問題况毅。
然而,這樣做的一個(gè)問題在于跨地域replica之間的通信開銷有些過大了尔艇,Megastore通過在每個(gè)data centers的replica加一個(gè)使用Coordinator服務(wù)來解決這個(gè)問題尔许,Coordinator保存在當(dāng)前data center中哪些replica的數(shù)據(jù)是up-to-date的,如果是這樣的replica终娃,就不必使用Paxos來得到最新數(shù)據(jù)味廊,直接local read就可以,有一種緩存的感覺有木有棠耕。
最后毡们,如果coordinator失效了,寫操作會(huì)被Block昧辽,這也就要求有一個(gè)機(jī)制檢測(cè)coordinator的失效衙熔,megastore使用Chubby Lock服務(wù)檢測(cè)coordinator失效,對(duì)于coordinator自己來說搅荞,如果更新chubby lock失敗红氯,就認(rèn)為本地的數(shù)據(jù)都不是最新的,Read操作都要走Paxos流程咕痛,對(duì)于寫操作痢甘,在檢測(cè)到coordinator失效時(shí)就不等待他的invalidate操作返回,在失效被發(fā)現(xiàn)前茉贡,大概有10秒的時(shí)間write會(huì)被block塞栅,但是,實(shí)效的coordinator的恢復(fù)期間腔丧,讀寫操作都不會(huì)被block放椰,依然可以正常進(jìn)行。
總結(jié)
Megastore的核心思想是:
使用Paxos來同步和保證數(shù)據(jù)Replica的讀寫一致性愉粤,采用劃分EntityGroup的方式來減少Paxos過程的沖突砾医。使用Coordinator/localread/chubby lock以及其它各種機(jī)制來提高效率,減少延遲衣厘,檢測(cè)失效如蚜。