AeronCluster學(xué)習(xí)筆記-AeronCluster與數(shù)據(jù)庫(kù):世界新視野
本文將介紹AeronCluster與數(shù)據(jù)庫(kù)之間的關(guān)系與協(xié)作方式。
首先我們要強(qiáng)調(diào),數(shù)據(jù)庫(kù)可以是 Aeron Cluster 的有力補(bǔ)充,但數(shù)據(jù)庫(kù)其實(shí)是可選的。每個(gè) Aeron Cluster 在落地投產(chǎn)之前都需要回答以下問題:
cluster要對(duì)系統(tǒng)進(jìn)行記錄嗎(數(shù)據(jù)要落盤嗎)?集群將如何進(jìn)行啟動(dòng)?你想為關(guān)鍵的集群事件應(yīng)用哪些可靠性選項(xiàng)?我們分別對(duì)這幾個(gè)問題進(jìn)行說(shuō)明。
【資料圖】
記錄型系統(tǒng)(System of Record)一般來(lái)說(shuō),如果Cluster進(jìn)程不是記錄型系統(tǒng),那么數(shù)據(jù)庫(kù)是可選的可能性更大。
對(duì)于記錄型系統(tǒng)而言,必要的事件可以通過(guò)網(wǎng)關(guān)進(jìn)程發(fā)送到記錄系統(tǒng)。
請(qǐng)記住:
始終考慮數(shù)據(jù)庫(kù)對(duì)特定使用場(chǎng)景的影響。如果你有監(jiān)控或其他原因需要依賴數(shù)據(jù)庫(kù),那么就請(qǐng)使用數(shù)據(jù)庫(kù)。不要直接跳過(guò)數(shù)據(jù)庫(kù),因?yàn)樗诶碚撋鲜强晒┻x擇使用的(按需架構(gòu))。對(duì)系統(tǒng)的狀態(tài)打快照,并對(duì)其進(jìn)行標(biāo)記(一般都是基于版本號(hào),或者時(shí)間戳), 這可能是一項(xiàng)復(fù)雜的任務(wù),特別是考慮到項(xiàng)目生命周期中涉及到數(shù)據(jù)結(jié)構(gòu)的變化。仔細(xì)考慮如何更好地使用版本控制進(jìn)行快照。引導(dǎo)Cluster啟動(dòng)(Bootstrapping the Cluster)引導(dǎo)Cluster啟動(dòng),也就是加載Cluster運(yùn)行時(shí)所需的所有數(shù)據(jù)的啟動(dòng)階段。這個(gè)過(guò)程通??梢曰趦煞N方式完成:
通過(guò)命令和快照引導(dǎo)Cluster啟動(dòng)。在這種情況下,集群管理客戶端會(huì)被授予將引用和其他操作數(shù)據(jù)寫入集群的權(quán)限。而一旦加載了必要的數(shù)據(jù),集群就能夠完全從快照中啟動(dòng)。通過(guò)數(shù)據(jù)庫(kù)引導(dǎo)啟動(dòng),可選擇是否使用快照。在這個(gè)場(chǎng)景中,一些外部進(jìn)程和Cluster之間會(huì)約定通信協(xié)議,該協(xié)議會(huì)在集群?jiǎn)?dòng)時(shí)被引導(dǎo)。外部進(jìn)程從配置文件/數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。隨著數(shù)據(jù)發(fā)生變化,此過(guò)程可以向集群提交必要的命令。在集群?jiǎn)?dòng)時(shí),開發(fā)者可以選擇從快照啟動(dòng),或清除任何快照——這取決于 SLA 和集群重啟頻率。
(扯了這么多,其實(shí)就是說(shuō),在有狀態(tài)的cluster啟動(dòng)階段,是可以從數(shù)據(jù)庫(kù)中加載必要的數(shù)據(jù)到內(nèi)存中,以還原之前狀態(tài)。)
集群事件和可靠性(Cluster Events & Reliability)如果你正在將關(guān)鍵的Cluster事件寫入數(shù)據(jù)庫(kù),你需要考慮所需的可靠性級(jí)別(事務(wù)隔離級(jí)別等),以及你將希望如何處理恢復(fù)場(chǎng)景。
這里舉一個(gè)場(chǎng)景:
集群、數(shù)據(jù)庫(kù)網(wǎng)關(guān)、數(shù)據(jù)庫(kù)均運(yùn)行正常交易 1、2 和 3 下單完成,并由數(shù)據(jù)庫(kù)網(wǎng)關(guān)寫入數(shù)據(jù)庫(kù)此時(shí)數(shù)據(jù)庫(kù)服務(wù)器出現(xiàn)故障交易 4、5 和 6 下單成功。簡(jiǎn)單分析一下,1,2,3請(qǐng)求在內(nèi)存中成功,但是寫db失敗,只要重啟,數(shù)據(jù)就會(huì)丟失。
那現(xiàn)在怎么辦?目前來(lái)看,至少有兩個(gè)選擇:
在集群內(nèi)引入重試機(jī)制。思考一下,如果將重試放在數(shù)據(jù)庫(kù)網(wǎng)關(guān)內(nèi),如果失敗會(huì)怎樣(丟數(shù)據(jù)?。??將關(guān)鍵事件append到在集群中運(yùn)行的專用 Aeron 存檔(Aeron Archive)。使用存檔偏移量( Archive offset)作為數(shù)據(jù)庫(kù)中的高水位線( high watermark)。如果數(shù)據(jù)庫(kù)出現(xiàn)故障,重新啟動(dòng)數(shù)據(jù)庫(kù)網(wǎng)關(guān)。在數(shù)據(jù)庫(kù)網(wǎng)關(guān)啟動(dòng)時(shí),從數(shù)據(jù)庫(kù)中讀取最后寫入的高水位線并從該點(diǎn)處理集群的存檔。第二種方案是可靠的,其實(shí)就是說(shuō),處理數(shù)據(jù)的時(shí)候記錄一下日志處理的進(jìn)度,然后崩潰恢復(fù)之后從該位置繼續(xù)往后處理。這種方式的好處是,Aeron Archive底層會(huì)對(duì)Cluster的raftLog進(jìn)行重放和恢復(fù),保證冪等的前提下,這種機(jī)制不會(huì)因?yàn)橹卦嚩鴮?dǎo)致臟數(shù)據(jù)。
回想一下Archive的特性:
!! Archive主要用于業(yè)務(wù)系統(tǒng)中產(chǎn)生的事件日志的存儲(chǔ)。
我們可以將其類比Rocksdb。
在Aeron框架中,Archive主要用于raftLog、snapshopt的存儲(chǔ)以及raftLog的回放。
對(duì)于讀寫而言,有以下特點(diǎn):
!! 存只能append
!! 讀只能根據(jù)某個(gè)位置往后讀,可以自行進(jìn)行封裝,實(shí)現(xiàn)跨機(jī)器讀取Archive中的數(shù)據(jù),實(shí)現(xiàn)跨服務(wù)日志回放、數(shù)據(jù)同步功能(replay)
關(guān)鍵詞: 出現(xiàn)故障 主要用于 操作數(shù)據(jù)
相關(guān)閱讀
-
世界熱推薦:今晚7:00直播丨下一個(gè)突破...
今晚19:00,Cocos視頻號(hào)直播馬上點(diǎn)擊【預(yù)約】啦↓↓↓在運(yùn)營(yíng)了三年... -
NFT周刊|Magic Eden宣布支持Polygon網(wǎng)...
Block-986在NFT這樣的市場(chǎng),每周都會(huì)有相當(dāng)多項(xiàng)目起起伏伏。在過(guò)去... -
環(huán)球今亮點(diǎn)!頭條觀察 | DeFi的興衰與...
在比特幣得到機(jī)構(gòu)關(guān)注之后,許多財(cái)務(wù)專家預(yù)測(cè)世界將因?yàn)榧用茇泿诺?.. -
重新審視合作,體育Crypto的可靠關(guān)系才能雙贏
Block-987即使在體育Crypto領(lǐng)域,人們的目光仍然集中在FTX上。隨著... -
簡(jiǎn)訊:前端單元測(cè)試,更進(jìn)一步
前端測(cè)試@2022如果從2014年Jest的第一個(gè)版本發(fā)布開始計(jì)算,前端開發(fā)... -
焦點(diǎn)熱訊:劉強(qiáng)東這波操作秀
近日,劉強(qiáng)東發(fā)布京東全員信,信中提到:自2023年1月1日起,逐步為...