「分布式架構」最終一致性:暗示的切換隊列

2021-01-09 騰訊網

在這個博客系列中,我們將探討最終的一致性,如果沒有合適的詞彙表,這個術語很難定義。這是許多分布式系統使用的一致性模型,包括XDB Enterprise Edition。為了理解最終的一致性,我們需要知道兩個概念:暗示切換隊列和反熵,這兩個概念都需要特別注意。

第一部分

什麼是暗示的切換隊列?

儘管有一個很酷的名字,暗示切換(HH)隊列並沒有得到很多關注。HH隊列有一項非常重要的工作,但是除非您是系統管理員,否則很少直接與它交互。讓我們深入研究一下暗示的切換隊列到底是什麼,以及為什麼它對您很重要。

為了討論HH隊列,我們必須稍微討論一下分布式計算。像XDB Enterprise這樣的系統作為分布式系統存在的一個原因是消除單點故障。InfluxDB Enterprise使用複製因子(Replication Factor,RF)來確定任何一組數據應該存在多少個副本。將RF設置為1以上意味著系統有更高的機會成功地為請求提供服務,並且在數據節點中斷期間不會返回錯誤,這意味著我們不再只有一個可能丟失或不可用的數據副本。分布式系統也提出了獨特的挑戰:我們如何知道數據在整個系統中是一致的,尤其是在存儲多個數據副本時?

首先,我們必須理解最終一致性所作的一些承諾。擾流板警報:系統中的數據最終必須一致。當我們從分布式系統請求信息時,有時我們收到的答案可能不會一致地返回。當數據在整個系統中存儲和複製時,我們收到的答案有一些「漂移」,但隨著時間的推移,這種「漂移」應該被消除。在實踐中,這意味著最近的時間範圍可能在其結果中具有最大的變化,但是這種變化被消除,因為系統通過確保在任何地方都可以獲得相同信息的機制工作。

如果我們保證系統最終是一致的,我們如何解釋失敗的寫入?數據節點離線的原因有很多,從磁碟空間耗盡到普通的舊硬體故障。如果一個節點在離線時丟失了數據點,它就永遠不可能是一致的,因此,我們對最終一致性的承諾將變成謊言。

失敗的寫入也會影響整個系統的複製係數。維護指定的RF是我們必須遵守的另一個承諾,如果數據節點脫機,這也是寫入的另一個可能的失敗點。

例子

讓我們研究一下最簡單的示例:具有2個數據節點和一個RF=2的資料庫的XDB Enterprise。數據通過某個收集代理(例如Telegraf)到達您喜愛的負載平衡器,負載平衡器將寫操作(也讀取,但在本例中我們將使用寫操作)分發到底層數據節點。通常,負載平衡器以循環方式分發寫操作。接收數據的數據節點存儲並複製數據(將其發送到另一個數據節點),瞧:RF達到2。

注意:圖中未顯示的是元節點,您可以在這裡閱讀。

我們仍然需要一個失敗或延遲寫入的解決方案。假設系統中的一個節點在物理上過熱並離線。如果沒有備份,任何不成功的寫入都會被完全刪除,再也看不到。

進入HH隊列。

HH隊列是一個持久的、基於磁碟的隊列。它是XDB企業的一個基本部分,它試圖確保最終的一致性,這是一種機制,確保所有的數據節點最終在它們之間擁有一組一致的數據。對於xdbenterprise,HH隊列是實現最終一致性和確保最終實現每個資料庫的數據複製因子的一個重要部分。

現在,讓我們重溫一下集群中的一個數據節點離線的場景。節點脫機的原因有很多:硬體缺陷、磁碟空間限制,甚至是定期維護。如果沒有暗示的切換隊列,不成功的寫操作在存儲之前就死了,但是現在我們有了一個安全的地方讓它們著陸。

任何不成功的寫入都會被定向到HH隊列,當節點恢復聯機時,它會檢查HH隊列中是否有掛起的寫入。然後節點可以完成寫操作,直到隊列耗盡。Bam最終實現了一致性。

摘要

這是一個最終一致的集群內部發生的情況,但是外部有一些考慮因素:當數據成功寫入一個節點,但無法正確複製時,用戶看到成功還是失敗?HH隊列中的健康模式是什麼樣的?如果HH隊列不斷地充滿和耗盡,對整個系統健康意味著什麼?在下一篇文章中,我們將討論如何解決和識別XDB企業集群中的問題模式。

謝謝大家關注,轉發,點讚和點在看。

相關焦點

  • 左耳朵耗子:分布式系統架構經典資料
    也就是說,CAP 定理表明,在存在網絡分區的情況下,一致性和可用性必須二選一。而在沒有發生網絡故障時,即分布式系統正常運行時,一致性和可用性是可以同時被滿足的。這裡需要注意的是,CAP 定理中的一致性與 ACID 資料庫事務中的一致性截然不同。掌握 CAP 定理,尤其是能夠正確理解 C、A、P 的含義,對於系統架構來說非常重要。
  • 基於大數據的輿情分析系統架構 - 架構篇
    在業界基於開源的大數據系統並結合Lambda架構,整套系統可以設計如下:圖3 開源輿情架構圖系統的最上遊是分布式的爬蟲引擎,根據抓取任務抓取訂閱的網頁原文內容。爬蟲會把抓取到的網頁內容實時寫入Kafka隊列,進入Kafka隊列的數據根據前面描述的計算需求,會實時流入流計算引擎(例如Spark或者Flink),也會持久化存儲在Hbase,進行全量數據的存儲。
  • 聊透分布式系統一致性!
    話不多說,進入正題,在很多小夥伴認知裡或多或少都知道那麼兩三種一致性,比如強一致性、最終一致性等。但是你以為一致性只有這些嘛?本篇帶來一致性詳解,講透一致性。ZooKeeper是怎樣的一致性?這裡我們暫時不談共識算法Paxos(請持續關注後續文章)。我們直接來說說ZooKeeper的一致性,網上很多資料都說zk是最終一致性,很抱歉,zk是強一致性的,並且是強一致性中的順序一致性。為什麼不說zk是最終一致性的原因呢?
  • NSQ:基於Go語言的分布式實時消息平臺
    如果你希望更多的在朋友圈見到極客邦,看到InfoQ的精彩內容,尋找我們主辦與支持的給力活動;如果你希望能更經常地與我們聯繫,隔三差五調戲我們一下,那就複製微信號:HelloStuQ ,加Q妹的個人微信吧~NSQ是一個基於Go語言的分布式實時消息平臺,它基於MIT開源協議發布,代碼託管在GitHub,其當前最新版本是0.3.1
  • 【技術實戰】分布式架構——Gossip 協議詳解
    整個傳播過程可能需要一定的時間,由於不能保證某個時刻所有節點都收到消息,但是理論上最終所有節點都會收到消息,因此它是一個最終一致性協議。 Gossip協議是一個多主協議,所有寫操作可以由不同節點發起,並且同步給其他副本。Gossip內組成的網絡節點都是對等節點,是非結構化網絡。
  • 架構師成長之路之限流漫談
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1. 我們為什麼需要限流在上一篇架構師成長之路之服務治理漫談裡面,我們已經談到了高可用治理的部分。
  • OpenStack架構分析與實踐
    一、業務架構設計思路OpenStck做的比較好的一點就是架構設計比較通過,對於不同的模塊,其業務架構設計方面一般滿足以下設計思路:• REST API接收外部請求• Scheduler負責調度服務• Worker負責任務分配• Driver負責任務實現• 消息隊列負責組件內部通信
  • CPU有緩存一致性協議MESI,為何還需要Volatile?
    本篇來深入理解CPU緩存一致性協議(MESI),最後來討論既然CPU有緩存一致性協議(MESI),為什麼JMM還需要volatile關鍵字?,這就使其切換時會產生延遲。當一個緩存被切換狀態時其他緩存收到消息完成各自的切換並且發出回應消息這麼一長串的時間中CPU都會等待所有緩存響應完成。可能出現的阻塞都會導致各種各樣的性能問題和穩定性問題。
  • 行業引領產品——VATION巨洋光分布式圖像處理器系統(功能篇)
    V-Spider光分布式圖像處理器是巨洋針對不同用戶所推出的一套基於分布式架構的圖像處理系統,不但可實現現有各種類型信號源的實時上屏顯示,還提供豐富的開發接口,供用戶選擇。1、系統採用分布式系統架構,系統自由搭建,提高系統的擴展性,即插即用;降低節點故障率、提升系統的穩定性。
  • 他趣已有平臺引入直播的實戰之路|架構師實踐日
    9 月 3 日,在七牛雲主辦的架構師實踐日上,他趣首席架構師 張嵩,帶來了他趣在已有平臺上引入直播的實戰經驗。以下是對他現場內容的整理。張嵩 他趣首席架構師演講嘉賓:廈門大學計算機碩士, 14 年加入他趣,負責業務服務化改造,現主要負責微服務體系健全及持續交付體系建設。
  • 南大通用分布式事務型資料庫GBase 8c滿分通過工信部標準測評
    南大通用分布式交易型資料庫產品GBase 8c在基礎能力、兼容能力、管理能力、高可用、擴展能力、安全能力等50個方面,均滿足資料庫管理平臺基礎能力測試要求,以滿分的優異成績通過「第11批大數據產品能力測評」分布式事務資料庫能力認證。
  • 支付寶資深技術專家尹博學:新一代金融核心突破之全分布式單元化...
    關注"螞蟻金服科技"公眾號,螞蟻SOFAStack白皮書即將發布,不要錯過哦~~以下為演講整理全文:大家好,我是螞蟻集團的尹博學,今天和大家分享一下螞蟻關於金融級IT架構及分布式架構的一些思考和應用案例,主要包含三個部分,分別是行業常見的分布式架構介紹、螞蟻單元化架構的介紹以及單元化架構的應用案例。
  • Oracle Sharding: 雲端分布式關係型資料庫
    線性擴展Oracle Sharding採用無分享架構(shared-nothing architecture),消除了有分享架構帶來的性能瓶頸,理論上可以提供無限的擴展性。目前支持最多1000個分片資料庫。極致的可用性和故障隔離由於各個資料庫分片不再共享硬體設備,集群的單點故障可以有效被消除。
  • DTCC2020阿里雲李飛飛:雲原生分布式資料庫與數據倉庫系統點亮數據...
    挑戰二:對資源的使用方式傳統的馮諾依曼架構下計算和存儲是緊密耦合的,可將多個伺服器通過分布式協議和處理的方式連成一個系統,但是伺服器和伺服器之間、節點和節點之間,分布式事務的協調、分布式查詢的優化,尤其要保證強一致性、強ACID的特性保證的時候,具有非常多的挑戰。
  • 京東資深架構師爆肝純手打700頁架構進階寶典我粉了
    前言在這個大家熱議的人工智慧時代,也使我們有了更多的反思,其實在這些熱點議題的背後,一些基礎架構與底層系統技術的發展與實現或許更加務實和接地氣一些,同時產業界也需要有更堅實的基礎架構與底層系統技術來支撐日益增長的龐大的業務量。
  • 輕量級消息隊列RedisQueue
    消息隊列(Message Queue)是分布式系統必不可少的中間件,大部分消息隊列產品(如RocketMQ/RabbitMQ/Kafka等)要求團隊有比較強的技術實力,不適用於中小團隊,並且對.NET技術的支持力度不夠。而Redis實現的輕量級消息隊列很簡單,僅有Redis常規操作,幾乎不需要開發團隊掌握額外的知識!
  • 雲網絡工程師必看丨6大最新OpenStack網絡架構
    大量的非分布式實現等等),所以就讓很多人憂慮 OVN 是不是太晚了。做過類似 SDN 與 OpenStack 對接的開發者都知道,因為事涉兩個系統,兩個資料庫,所以保持數據一致性是一個很麻煩但有很重要的問題,一旦處理不好,輕則狀態不一致,重則大量髒數據充斥兩個系統還無法輕易刪除,最終無法維護。ODL 選擇了一個相對簡單一些的方案,就是將一個 Sync 操作拆開,拆一部分為獨立的循環,這個思路可能是和以前的 Neutron agent 學的?
  • 騰訊宣布企業級分布式高性能KV存儲資料庫Tendis正式開源
    12月22日消息 近期,騰訊宣布企業級分布式高性能 KV 存儲資料庫 Tendis 正式開源。   集群架構   Tendis 使用去中心化集群架構,每個數據節點都擁有全部的路由信息,用戶可以訪問集群中的任意節點,並且通過 redis 的 move 協議,最終路由到正確的節點。
  • Uber下一代支付平臺的系統架構設計
    新系統和架構的優勢基於作業/訂單的系統對於運行餘額和用戶實體的記帳來說,基於交易的系統很難擴展。跟蹤和執行零和原則是很困難的。我們的新架構現在使用基於作業/訂單的系統。每份作業都代表著一次拼車旅行或吃飯/送餐。由於調整、獎勵、小費等原因,同一份作業可能會有多個訂單。每個訂單都包含多個訂單條目,每個訂單條目代表著進出用戶帳戶的金額。