《分散式技術原理與演算法解析》學習筆記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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...