<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          AeronCluster學(xué)習(xí)筆記-AeronCluster與數(shù)據(jù)庫

          共 1624字,需瀏覽 4分鐘

           ·

          2022-11-18 19:45

          本文將介紹AeronCluster與數(shù)據(jù)庫之間的關(guān)系與協(xié)作方式。

          首先我們要強調(diào),數(shù)據(jù)庫可以是 Aeron Cluster 的有力補充,但數(shù)據(jù)庫其實是可選的。每個 Aeron Cluster 在落地投產(chǎn)之前都需要回答以下問題:

          • cluster要對系統(tǒng)進行記錄嗎(數(shù)據(jù)要落盤嗎)?
          • 集群將如何進行啟動?
          • 你想為關(guān)鍵的集群事件應(yīng)用哪些可靠性選項?

          我們分別對這幾個問題進行說明。

          記錄型系統(tǒng)(System of Record)

          一般來說,如果Cluster進程不是記錄型系統(tǒng),那么數(shù)據(jù)庫是可選的可能性更大。

          對于記錄型系統(tǒng)而言,必要的事件可以通過網(wǎng)關(guān)進程發(fā)送到記錄系統(tǒng)。

          請記?。?/p>

          • 始終考慮數(shù)據(jù)庫對特定使用場景的影響。如果你有監(jiān)控或其他原因需要依賴數(shù)據(jù)庫,那么就請使用數(shù)據(jù)庫。不要直接跳過數(shù)據(jù)庫,因為它在理論上是可供選擇使用的(按需架構(gòu))。
          • 對系統(tǒng)的狀態(tài)打快照,并對其進行標(biāo)記(一般都是基于版本號,或者時間戳), 這可能是一項復(fù)雜的任務(wù),特別是考慮到項目生命周期中涉及到數(shù)據(jù)結(jié)構(gòu)的變化。仔細考慮如何更好地使用版本控制進行快照。

          引導(dǎo)Cluster啟動(Bootstrapping the Cluster)

          引導(dǎo)Cluster啟動,也就是加載Cluster運行時所需的所有數(shù)據(jù)的啟動階段。這個過程通??梢曰趦煞N方式完成:

          • 通過命令和快照引導(dǎo)Cluster啟動。在這種情況下,集群管理客戶端會被授予將引用和其他操作數(shù)據(jù)寫入集群的權(quán)限。而一旦加載了必要的數(shù)據(jù),集群就能夠完全從快照中啟動。
          • 通過數(shù)據(jù)庫引導(dǎo)啟動,可選擇是否使用快照。在這個場景中,一些外部進程和Cluster之間會約定通信協(xié)議,該協(xié)議會在集群啟動時被引導(dǎo)。外部進程從配置文件/數(shù)據(jù)庫中讀取數(shù)據(jù)。隨著數(shù)據(jù)發(fā)生變化,此過程可以向集群提交必要的命令。

          在集群啟動時,開發(fā)者可以選擇從快照啟動,或清除任何快照——這取決于 SLA 和集群重啟頻率。

          (扯了這么多,其實就是說,在有狀態(tài)的cluster啟動階段,是可以從數(shù)據(jù)庫中加載必要的數(shù)據(jù)到內(nèi)存中,以還原之前狀態(tài)。)

          集群事件和可靠性(Cluster Events & Reliability)

          如果你正在將關(guān)鍵的Cluster事件寫入數(shù)據(jù)庫,你需要考慮所需的可靠性級別(事務(wù)隔離級別等),以及你將希望如何處理恢復(fù)場景。

          這里舉一個場景:

          • 集群、數(shù)據(jù)庫網(wǎng)關(guān)、數(shù)據(jù)庫均運行正常
          • 交易 1、2 和 3 下單完成,并由數(shù)據(jù)庫網(wǎng)關(guān)寫入數(shù)據(jù)庫
          • 此時數(shù)據(jù)庫服務(wù)器出現(xiàn)故障
          • 交易 4、5 和 6 下單成功。

          簡單分析一下,1,2,3請求在內(nèi)存中成功,但是寫db失敗,只要重啟,數(shù)據(jù)就會丟失。

          那現(xiàn)在怎么辦?目前來看,至少有兩個選擇:

          • 在集群內(nèi)引入重試機制。思考一下,如果將重試放在數(shù)據(jù)庫網(wǎng)關(guān)內(nèi),如果失敗會怎樣(丟數(shù)據(jù)啊)?
          • 將關(guān)鍵事件append到在集群中運行的專用 Aeron 存檔(Aeron Archive)。使用存檔偏移量( Archive offset)作為數(shù)據(jù)庫中的高水位線( high watermark)。如果數(shù)據(jù)庫出現(xiàn)故障,重新啟動數(shù)據(jù)庫網(wǎng)關(guān)。在數(shù)據(jù)庫網(wǎng)關(guān)啟動時,從數(shù)據(jù)庫中讀取最后寫入的高水位線并從該點處理集群的存檔。

          第二種方案是可靠的,其實就是說,處理數(shù)據(jù)的時候記錄一下日志處理的進度,然后崩潰恢復(fù)之后從該位置繼續(xù)往后處理。這種方式的好處是,Aeron Archive底層會對Cluster的raftLog進行重放和恢復(fù),保證冪等的前提下,這種機制不會因為重試而導(dǎo)致臟數(shù)據(jù)。

          回想一下Archive的特性:

          !! Archive主要用于業(yè)務(wù)系統(tǒng)中產(chǎn)生的事件日志的存儲。

          我們可以將其類比Rocksdb。

          在Aeron框架中,Archive主要用于raftLog、snapshopt的存儲以及raftLog的回放。

          對于讀寫而言,有以下特點:

          • !! 存只能append

          • !! 讀只能根據(jù)某個位置往后讀,可以自行進行封裝,實現(xiàn)跨機器讀取Archive中的數(shù)據(jù),實現(xiàn)跨服務(wù)日志回放、數(shù)據(jù)同步功能(replay)


          瀏覽 168
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  北条麻纪 无码 在线 视频 | 亚洲免费观看在线 | 大香蕉伊人无限 | 超碰人人操人人摸 | 国产片婬乱17 |