Google Cloud Spanner內(nèi)部機(jī)制,您的設(shè)備不支持google play 服務(wù)Google Cloud Spanner內(nèi)部機(jī)制我們已經(jīng)了解了有關(guān)Google Cloud Spanner的更多內(nèi)部信息。我們從Youtube上閱讀了Spanner白皮書(shū)的某些部分以及深入的內(nèi)部?jī)?nèi)容。我們?cè)诖颂幑蚕砹艘曨l鏈接,但......
我們已經(jīng)了解了有關(guān)Google Cloud Spanner的更多內(nèi)部信息。我們從Youtube上閱讀了Spanner白皮書(shū)的某些部分以及深入的內(nèi)部?jī)?nèi)容。我們?cè)诖颂幑蚕砹艘曨l鏈接,但我們希望將所有學(xué)習(xí)總結(jié)在一個(gè)地方。特別感謝Deepti Srivastava(Spanner產(chǎn)品經(jīng)理)在Google Cloud Next Event中介紹了Spanner的深潛課程。
MySQL的痛苦:
在2005年,2006年,Google大規(guī)模使用MySQL。Google Adwords是使用90多個(gè)MySQL Shards存儲(chǔ)數(shù)據(jù)的最大平臺(tái)之一。由于進(jìn)行了一些維護(hù),他們重新分配了MySQL群集。這個(gè)過(guò)程花了2年時(shí)間才能完成。Google知道它們的發(fā)展非常迅速,而這類數(shù)據(jù)庫(kù)在將來(lái)會(huì)很痛苦。這就是Spanner的誕生方式。
BigTable和Spanner:
一旦他們決定構(gòu)建分布式的新東西,Big Table團(tuán)隊(duì)便是開(kāi)始為Spanner流程工作的團(tuán)隊(duì)。因?yàn)锽igTable使用分布式過(guò)程,存儲(chǔ)和高可用性(或其他一些原因)。
巨人:
Colossus是從GFS派生的分布式文件系統(tǒng)。超級(jí)數(shù)據(jù)庫(kù)需要高性能的文件系統(tǒng)。此項(xiàng)目由BigTable團(tuán)隊(duì)啟動(dòng),BigTable由Colossus提供支持。因此,Spanner也成為了文件系統(tǒng)的巨像。
為什么選擇Spanner?
Google Adwords是基于MySQL的堆棧,新系統(tǒng)需要具有關(guān)系數(shù)據(jù)庫(kù)的基本要素,例如ACID合規(guī)性,而不受規(guī)模的限制。MySQL的痛苦在于重新分片。因此,他們想要像傳統(tǒng)的NoSQL分片這樣的分片功能,這些功能將負(fù)責(zé)重新分片和重新平衡。加上更多可用性,水平擴(kuò)展和全球分布。
Spanner架構(gòu):
Spanner是一個(gè)全球數(shù)據(jù)庫(kù)系統(tǒng),每個(gè)區(qū)域至少需要3個(gè)分片。每個(gè)分片將位于每個(gè)區(qū)域中。用Spanner的術(shù)語(yǔ)來(lái)說(shuō),分片稱為Split。如果您提供了1個(gè)Node Spanner群集,則您將在不同區(qū)域上獲得另外2個(gè)對(duì)您不可見(jiàn)的節(jié)點(diǎn)。并且計(jì)算層和存儲(chǔ)層是分離的。Paxos算法用于一次維護(hù)一位領(lǐng)導(dǎo)者,其余節(jié)點(diǎn)將成為跟隨者。
基于分區(qū),我們將在存儲(chǔ)層中有更多的拆分(碎片)。每個(gè)分片將被復(fù)制到其他區(qū)域。例如:如果您在A區(qū)上有一個(gè)名為S1的分片,它將被復(fù)制到B區(qū)和C區(qū)。復(fù)制基于Leader跟隨器方法進(jìn)行。因此,Paxos將有助于維持法定人數(shù),并有助于在失敗期間選擇新的Leader。如果您在此Split上編寫(xiě)內(nèi)容,則Spanner API會(huì)知道Leaders。因此,寫(xiě)入將直接轉(zhuǎn)到具有“前導(dǎo)分割”的區(qū)域。每個(gè)拆分都有自己的領(lǐng)導(dǎo)者區(qū)域。
全球強(qiáng)一致性:
當(dāng)我觀看Spanner的深潛視頻時(shí),他們正在討論強(qiáng)大的一致性。Spanner支持所有節(jié)點(diǎn)(全局)之間的強(qiáng)一致性。如果您在美國(guó)地區(qū)寫(xiě)東西,則可以從亞洲地區(qū)或任何其他地區(qū)讀取相同的數(shù)據(jù)。他們?nèi)绾螌?shí)現(xiàn)這種邏輯?它稱為T(mén)rueTime。
TrueTime:
Spanner在分布于多個(gè)數(shù)據(jù)中心的全球所有節(jié)點(diǎn)之間同步并維持相同的時(shí)間。硬件內(nèi)置原子鐘以維持時(shí)間。如果您查看服務(wù)器硬件機(jī)架,則該服務(wù)器有4個(gè)時(shí)間服務(wù)器。2臺(tái)服務(wù)器與GPS連接,其余2臺(tái)與原子振蕩器連接。有2種不同的振蕩器品牌,可以實(shí)現(xiàn)更好的故障轉(zhuǎn)移處理。GPS時(shí)間服務(wù)器將與振蕩器同步,以每30秒間隔同步全球數(shù)據(jù)中心的時(shí)間。
現(xiàn)在,讓我們嘗試了解這如何TrueTime幫助Spanner保持一致。
與TrueTime的一致性
要了解一致性和TrueTime之間的關(guān)系,我們必須了解Spanner中的寫(xiě)操作如何工作。在每次寫(xiě)操作期間,Spanner會(huì)拾取當(dāng)前的TrueTime值,并且此TrueTime時(shí)間戳記將為寫(xiě)操作創(chuàng)建一個(gè)順序。因此,每次提交都附帶了時(shí)間戳。
例如:如果要在節(jié)點(diǎn)1上寫(xiě)入數(shù)據(jù),它將使用TrueTime時(shí)間戳提交數(shù)據(jù),并將數(shù)據(jù)和時(shí)間戳復(fù)制到其他節(jié)點(diǎn)。在所有節(jié)點(diǎn)上,此時(shí)間戳都相同。假設(shè)我們?cè)诠?jié)點(diǎn)1上提交了此數(shù)據(jù),如果您正在從節(jié)點(diǎn)B讀取相同的數(shù)據(jù),那么Spanner API會(huì)向Split的負(fù)責(zé)人詢問(wèn)最后提交的數(shù)據(jù)的時(shí)間戳,如果時(shí)間戳與Node A的時(shí)間戳相匹配,則數(shù)據(jù)將從節(jié)點(diǎn)B返回,否則將等待,直到節(jié)點(diǎn)A將數(shù)據(jù)同步到節(jié)點(diǎn)B,然后它將返回?cái)?shù)據(jù)。
單行寫(xiě)操作的生命周期:
這是單個(gè)寫(xiě)入操作的生命周期。我們正在寫(xiě)一行將轉(zhuǎn)到拆分2的行?,F(xiàn)在,Spanner API將了解誰(shuí)是拆分2的領(lǐng)導(dǎo)者節(jié)點(diǎn),然后請(qǐng)求將進(jìn)入Zone B節(jié)點(diǎn)(藍(lán)色指示是領(lǐng)導(dǎo)者)。然后它將獲取鎖,將其寫(xiě)入拆分。寫(xiě)入完成后,它將請(qǐng)求發(fā)國(guó)際快遞區(qū)域A和C節(jié)點(diǎn)以進(jìn)行寫(xiě)入。它將等待大多數(shù)節(jié)點(diǎn)的確認(rèn)。領(lǐng)導(dǎo)者分裂一旦獲得了大部分的認(rèn)可,便會(huì)將成功響應(yīng)發(fā)快遞給客戶。
多行寫(xiě)操作:
如果要在單個(gè)事務(wù)中寫(xiě)入數(shù)據(jù),但數(shù)據(jù)位于不同的拆分中,則Spanner將以不同的方式處理它。例如:我們必須更新2行。
第1行在Split1中C區(qū)是Leader Split
第2行位于Split2中B區(qū)是Leader Split
當(dāng)我們啟動(dòng)事務(wù)時(shí),Spanner API將理解這些行處于不同的拆分中。他們將隨機(jī)選擇一個(gè)協(xié)調(diào)器區(qū)域。在我們的示例中,API選擇了區(qū)域C為協(xié)調(diào)器區(qū)域。對(duì)于多行操作將執(zhí)行以下步驟。
選擇協(xié)調(diào)器區(qū)域。(C區(qū))
同時(shí)獲取兩個(gè)領(lǐng)導(dǎo)者分組上的數(shù)據(jù)鎖。
在兩個(gè)領(lǐng)導(dǎo)者拆分上添加新數(shù)據(jù)。領(lǐng)導(dǎo)者拆分將新數(shù)據(jù)復(fù)制到跟隨者拆分。然后從跟隨者拆分中獲得確認(rèn)(兩個(gè)拆分將等待獲得確認(rèn))。
然后,區(qū)域B拆分將向協(xié)調(diào)器區(qū)域的拆分發(fā)快遞一條消息,表明它已完成更新并準(zhǔn)備提交。
然后,區(qū)域C中的Split1將告訴Split2,繼續(xù)并提交數(shù)據(jù)。同時(shí),拆分1也將提交。
提交請(qǐng)求將轉(zhuǎn)到所有拆分(領(lǐng)導(dǎo)者和關(guān)注者),并永久提交數(shù)據(jù)。
然后,成功響應(yīng)將傳遞給客戶。
讀操作的壽命:
從Spanner讀取數(shù)據(jù)時(shí),將從最近的關(guān)注者拆分中獲取數(shù)據(jù)。讓我們用一個(gè)例子來(lái)解釋一下。請(qǐng)參考下圖。
我們想從MyTable讀取值123的數(shù)據(jù)。此值存儲(chǔ)在Split 2中?,F(xiàn)在,一旦請(qǐng)求到達(dá)Spanner Frontend服務(wù)器,它將了解誰(shuí)是最近的關(guān)注者拆分,并將請(qǐng)求轉(zhuǎn)發(fā)到該拆分。在我們的情況下,區(qū)域A是最近的拆分。請(qǐng)求到達(dá)拆分后,該拆分將請(qǐng)求Leader拆分以獲取最后提交的TrueTime。然后它將時(shí)間戳與自己的時(shí)間戳進(jìn)行比較。如果兩者都匹配,它將把數(shù)據(jù)提供給應(yīng)用程序。如果時(shí)間戳不匹配,則領(lǐng)導(dǎo)者分組將要求跟隨者等待,直到將數(shù)據(jù)同步到該區(qū)域。然后拆分將為數(shù)據(jù)提供服務(wù)。
過(guò)期/時(shí)間限制為:
Spanner支持MVCC。因此,它將舊數(shù)據(jù)保留一段時(shí)間。如果我們的應(yīng)用程序可以很好地獲取舊數(shù)據(jù)(早于X秒),則無(wú)需等待領(lǐng)導(dǎo)者分裂的數(shù)據(jù)同步。例如,我們必須告訴Split我們使用15秒的舊數(shù)據(jù)就可以了,然后它將檢查提交的時(shí)間戳,該時(shí)間少于15秒,然后將舊數(shù)據(jù)提供給應(yīng)用程序。
多區(qū)域Spanner:
上面說(shuō)明的所有方案都適用于單個(gè)區(qū)域(區(qū)域級(jí)別)內(nèi)的群集。但是,Spanner是為全球規(guī)模和多區(qū)域部署而構(gòu)建的。在多區(qū)域設(shè)置中,體系結(jié)構(gòu)和寫(xiě)/讀操作將略有不同。在單區(qū)域概念中,我們至少需要3個(gè)區(qū)域才能創(chuàng)建集群。區(qū)域同時(shí)支持讀取和寫(xiě)入。但是在多區(qū)域概念中,一個(gè)大洲將充當(dāng)領(lǐng)導(dǎo)者,而其他大洲將成為追隨者。用Spanner的話來(lái)說(shuō),我們擁有更多地區(qū)的歐洲大陸將成為法定人數(shù)。所有寫(xiě)操作都將到達(dá)該大陸的任何地區(qū)。在仲裁大陸中,將有2個(gè)區(qū)域托管數(shù)據(jù)節(jié)點(diǎn),而1個(gè)區(qū)域?qū)⑼泄芤?jiàn)證服務(wù)器進(jìn)行故障轉(zhuǎn)移。其他大洲將具有只讀副本節(jié)點(diǎn)。
多區(qū)域一致性:
在多區(qū)域群集中,寫(xiě)操作始終在Quorum大陸上執(zhí)行。假設(shè)美國(guó)地區(qū)是R/W大陸,那么如果您從美國(guó)地區(qū)發(fā)快遞寫(xiě)請(qǐng)求,則Spanner API會(huì)將其發(fā)國(guó)際快遞最近的地區(qū),一旦提交了數(shù)據(jù),則成功響應(yīng)將轉(zhuǎn)到客戶。如果您要從亞洲地區(qū)發(fā)快遞寫(xiě)請(qǐng)求,則亞洲地區(qū)的API服務(wù)器會(huì)將請(qǐng)求放入Google的內(nèi)部網(wǎng)絡(luò)中,然后將請(qǐng)求發(fā)國(guó)際快遞美國(guó)地區(qū)的API服務(wù)器。然后,該美國(guó)地區(qū)API服務(wù)器將提交數(shù)據(jù),并將成功響應(yīng)發(fā)快遞給亞洲地區(qū)客戶。
對(duì)于讀取,該過(guò)程與單個(gè)區(qū)域的概念相同,如果TrueTime匹配,則將從本地區(qū)域提供數(shù)據(jù),否則將等待直到數(shù)據(jù)同步到本地區(qū)域然后再提供給客戶端。
結(jié)論:
我們介紹了Spanner的大多數(shù)內(nèi)部概念。但是,在Cloud Spanner中還有很多事情要學(xué)習(xí)。請(qǐng)參考下面的Google Cloud Next活動(dòng)視頻鏈接。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問(wèn)題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問(wèn)
微信掃一掃
馬上聯(lián)系在線顧問(wèn)
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部