《分散式技術原理與演算法解析》學習筆記Day20

来源:https://www.cnblogs.com/wing011203/archive/2023/02/23/17147883.html
-Advertisement-
Play Games

這篇文章主要描述分散式系統中經常討論的CAP理論,它從一致性、可用性和分區容錯性是分散式系統的三個特征,我們只能滿足其中兩個特征,對於分散式系統來說,根據不同的應用場景,可以是AP,也可以是CP。 ...


CAP理論

什麼是CAP理論?

CAP理論用來指導分散式系統設計,以保證系統的可用性、數據一致性等。

  • C,Consistency,一致性,指所有節點在同一時刻的數據是相同的,即更新操作執行結束並響應用戶完成後,所有節點存儲的數據會保持相同。
  • A,Availability,可用性,指系統提供的服務一直處於可用狀態,對於用戶的請求可即時響應。
  • P,Partition Tolerance,分區容錯性,指在分散式系統遇到網路分區的情況下,仍然可以響應用戶的請求。網路分區是指因為網路故障導致網路不連通,不同節點分佈在不同的子網路中,各個子網路內網路正常。

一致性、可用性和分區容錯性是分散式系統的三個特征。

CAP理論是指在分散式系統中,C、A、P這三個特征不能同時滿足,只能滿足其中兩個。

如何平衡C、A和P?

在實際場景中,網路環境不可能百分百不出故障,比如網路擁塞、網卡故障等,都會導致網路故障或者不通,從而導致節點之間無法通信,或者集群中節點被劃分成多個分區,分區中的節點之間可以通信,但是分區之間是不能通信的。

這種由網路故障導致的集群分區情況,被稱為網路分區

保證一致性C和可用性A(CA)

在分散式系統中,現有的網路基礎設施無法做到始終保持穩定,網路分區難以避免,犧牲分區容錯性P,就相當於放棄部分分散式系統,因此在分散式系統中,是不需要考慮CA模式的。

但是在單點系統或者單機系統中,CA需求是可以滿足的,例如大部分關係型資料庫,如果部署在單台機器上,因為不存在網路通信,所以是可以保證CA的。

保證一致性C和分區容錯性P(CP)

如果一個分散式場景需要很強的數據一致性,或者該場景可以容忍系統長時間沒有響應,那麼放棄可用性A,保留一致性C是比較合適的。

一個保證CP的分散式系統,一旦發生網路分區會導致數據無法同步的情況,這時需要犧牲系統的可用性,降低用戶體驗,直到節點數據達到一致後再提供服務。

一般涉及到金融相關的場景,在任何時候都需要保證強一致,因此要保證CP。

保證CP的系統包括Redis、HBase、ZooKeeper等。

例如,ZooKeeper集群包括Leader節點和Follower節點,Leader節點專門負責處理用戶的寫請求:

  • 當用戶向節點發送寫請求時,如果請求的節點是Leader,那麼直接處理請求。
  • 如果請求的節點是Follower,那麼該節點會將請求轉給Leader,然後Leader會向所有的Follower發出一個Proposal,等超過一半的節點統一後,Leader才會提交這次寫操作,從而保證數據的強一致性。

當ZooKeeper集群中出現網路分區,如果其中一個分區的節點數大於集群節點數的一半,那麼這個分區可以再選出一個Leader,仍然對外提供服務,但是在選出Leader之前,系統是不可用的;如果形成的分區中,沒有一個分區的節點數大於集群節點總數的一半,那麼系統不能正常對外提供服務,必須等待網路恢復後,才能正常提供服務。

保證可用性A和分區容錯性P(AP)

如果一個分散式系統需要很高的可用性,或者說在網路狀況不好的情況下,允許數據暫時不一致,那麼可以犧牲一定的一致性。

這時網路分區出現後,各節點之間的數據無法馬上同步,為了保證高可用,分散式系統需要即刻響應用戶請求,但此時某些節點還沒有拿到最新數據,只能將本地舊的數據返回給用戶,從而產生數據不一致的情況。

適合AP的場景有很多,例如查詢網站、電商中的商品查詢等,這樣的系統用戶體驗更加重要,需要保證系統的可用性。

保證AP的系統包括CoachDB、Eureka、Cassandra、DynamoDB等。

下麵是關於CA、CP和AP的詳細比較。

CAP和ACID

ACID是資料庫事務中常見的理論,它和CAP是兩回事:

  • ACID中的A是指“原子性”,強調事務要麼執行成功,要麼執行失敗;CAP中的A是指“可用性”,表示系統提供的服務一直處於可用狀態,可以響應用戶的請求。
  • ACID中的C是指事務執行前後,數據的完整性保持一致或者滿足完整性約束;CAP中的C強調的是數據一致性,集群中各節點之間通過複製技術保證數據在任意時刻都是相同的。
    作者:李潘     出處:http://wing011203.cnblogs.com/     本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java基礎語法:運算符、包機制、JavaDoc 自增、自減、一元運算符:++、-- 例子:b = a++; -->先給b賦值,a再自增:b=a; a=a+1; b = ++a; -->a先自增,再給b賦值:a=a+1; b=a; 初識Math類 冪運算:Math.pow(a, b):其中a與b都是 ...
  • 教程簡介 適用於初學者的Apache HttpClient教程 - 從基本到高級概念的簡單簡單步驟學習Apache HttpClient,其中包括概述,環境設置,Http獲取請求,Http Post請求,響應處理程式,關閉連接,中止請求,攔截器,用戶身份驗證等示例,使用代理,代理身份驗證,基於表單的 ...
  • C語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入C語言代碼,點擊運行,可線上編譯運行C語言,C語言代碼線上運行調試,C語言線上編譯,可快速線上測試您的C語言代碼,線上編譯C語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提供,線上工具後端由眾多Doc ...
  • 不知道各位老色批們平常看視頻都是在哪裡看的,有人說某魚舞蹈區,有人說某牙舞蹈區,要我說都不如西瓜shipin,這裡面個個都是人才,說話又好聽,超喜歡這裡的… 好了話不多說,我們直接開始本次的內容。 模塊安裝 本次需要使用的模塊是requests 模塊,沒安裝的小伙伴直接pip安裝即可。 環境 本次使 ...
  • 現在市面上有很多免費的FTP軟體:如FileZilla ,那如果想自己在代碼中實現與ftp伺服器的上傳下載文件該如何實現那? 本質上ftp協議就是TCP基礎上建立的一種協議,具體如下。 FTP 概述 文件傳輸協議(FTP)作為網路共用文件的傳輸協議,在網路應用軟體中具有廣泛的應用。FTP的目標是提高 ...
  • 一.正常加鎖 當兩個用戶同時註冊一個用戶名時,為保證用戶名不能重覆,因此對其註冊的用戶名加鎖。 具體步驟: 獲得用戶註冊的用戶名,進行判斷,如果為空則對其進行加鎖,保存到資料庫,釋放鎖資源。 二.線程出現阻塞 當A線程加鎖後出現阻塞時,導致數據還沒有存到資料庫,鎖的時間便會失效。 B線程便會執行,對 ...
  • 睏倦的時候寫了個個獲取本地時間,列印總比當前時間大8小時,找了很久原因 package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now) fmt.Println("nowStr:", now.F ...
  • pandas條件替換值(where&mask) 在日常分析中,經常會遇到對數據的篩選處理相關的工作,我們可以使用loc和iloc定位分析篩選的列或行數據,下麵介紹一種高級篩選的用法where和mask。 pd.where: 替換條件(condition)為Flase處的值 pd.mask: 替換條件 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...