分布式理論

CAP和BASE

CAP

  • C一致性(Consistency)

在分布式環境下,一致性是指數據在多個副本之間能否保持一致性的特征。
在一致性的需求下,當一個系統在數據一致的狀態下執行更新操作后,應該保證系統的數據仍然處于一致性的狀態。

  • A可用性(Availability)

可用性是指系統提供的服務必須一直處于可用的狀態,對于用戶的每一個操作請求總是能夠在有限的時間內返回結果
有限的時間:指盡可能短的時間內返回處理結果。
返回結果:指在有限的時間內返回正常的結果,不保證返回的是最新的結果。

  • P分區容錯性(Partition)

如果是分布式系統,那么就會存在多個節點,就會存在節點故障或網絡故障,所以P是不可避免的。

CAP不能同時滿足:
分布式系統中,如果要保證C一致性,那么就要執行節點數據同步,同步就存在網絡請求故障、邏輯執行耗時等問題,此時就不能保證節點的可用性了。如果要保證A可用性,系統盡可能的快,此時就不能保證網絡請求一定成功、邏輯是否執行完成,此時就不能保證節點的一致性了。所以,在分布式系統中,只能同時滿足AP或者CP。

BASE

  • BA(Basically Available)基本可用

犧牲高一致性,獲得可用性和可靠性。
在分布式系統中出現不可預知故障時,允許損失部分可用性(注意,這里不等價于系統不可用)。
比如:
響應時間上的損失:系統故障時請求響應時間由原來的0.5s延長到1s,此時系統仍然可用。
系統功能上的缺失:在系統流量洪峰時為了保證核心功能穩定,將部分消費者引導到一個降級頁面。

  • S(Soft state)軟狀態

軟狀態指允許系統中的數據存在中間狀態,并認為該中間狀態不會影響系統的整體可用性,即允許系統各節點數據同步存在延時。

  • E(Eventually consistent)最終一致性

系統各節點一定時間后數據最終達到一致狀態。

BASE理論是對CAP中一致性和可用性權衡的結果,其來源于對大規模互聯網系統分布式實踐的總結,是基于CAP理論逐步演化而來的。
BASE理論和傳統的事務ACID特性是相反的,它完全不同于ACID的強一致性模型,在實際的分布式場景中,不同業務和組件對數據一致性要求是不同的,因此在具體的分布式系統中BASE理論和ACID特性是結合一起使用的。

一致性分類

  • 強一致性

又稱線性一致性。
任何時刻,任何用戶或節點都可以讀到最近一次成功更新的副本數據,強一致性是程度要求最高的一致性要求。
一個集群要對外提供強一致性,某一個節點數據發生改變,要等到最新數據同步到其他所有節點后,才能對外提供服務。
保證強一致性,務必不能滿足可用性。

  • 弱一致性

一旦某個更新成功,用戶無法在一個確定的時間內讀到這次更新的值,且即使在某個副本上讀到了新的值,也不能保證在其他副本上可以讀到新的值。

  • 最終一致性

一旦數據更新成功,各個副本上的數據最終達到完全一致的狀態,但達到完全一致狀態所需要的時間不能保證。

  • 順序一致性

任何一次讀,都能讀到某個數據的最近一次寫的數據。
對其他節點之前的修改是可見(已同步)且確定的,并且新的寫入建立在已經達成同步的基礎上。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python-迭代

1、迭代器 迭代器是一個對象,它可以記錄遍歷的相關信息,迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器有兩個基本的方法:iter() 和 next()。我們都過命令行工具,了解一下python的底層迭代…

常見指令以及權限理解

常見指令以及權限理解 命令格式: command [-options] parameter1 parameter1 命令 選項 參數1 參數2 1.command為命令名稱,例如變化目錄的cd等 2.中括號[ ]實際在命令中是不存在的,這個中括號代表可選,通常選項前面會添加一個符號…

Go和Java實現模板模式

Go和Java實現模板模式 下面通過一個游戲的例子來說明模板模式的使用。 1、模板模式 在模板模式中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將 以抽象類中定義的方式進行。這種類型的設計模式屬于行為型…

react-vite-antd環境下新建項目

vite 創建一個react項目 1. 安裝vite并創建一個react項目1. 我使用的 yarn安裝,基本配置項目名字, 框架react ,js2. cd vite-react進入項目目錄安裝node包并啟動項目 2. 安裝引入Ant Design引入依賴(我用的yarn,沒有安裝的也可以使…

視頻匯聚/視頻云存儲/視頻監控管理平臺EasyCVR添加螢石云設備詳細操作來啦!

安防視頻監控/視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺可拓展性強、視頻能力靈活、部署輕快,可支持的主流標準協議有國標GB28181、RTSP/Onvif、RTMP等,以及支持廠家私有協議與SDK接入,包括海康Ehome、海大宇等設備的SDK等。平臺既具備傳統安…

css偽元素實現li列表圓點相連+錨點跳轉懸浮窗實現

實現效果&#xff1a; html代碼&#xff1a; <div class"sidenav"><ul class"nav-text progressbar"><!-- data-target的值對應要跳轉的模塊的id --><li data-target"module1"><div class"text">錨點…

Effective Java 案例分享(九)

46、使用無副作用的Stream 本章節主要舉例了Stream的幾種用法。 案例一&#xff1a; // Uses the streams API but not the paradigm--Dont do this! Map<String, Long> freq new HashMap<>(); try (Stream<String> words new Scanner(file).tokens()) …

Java創建對象的幾種方式

在Java中&#xff0c;對象是程序中的一種基本元素&#xff0c;它通過類定義和創建。本篇教程旨在介紹Java中創建對象的幾種方式&#xff0c;包括使用new關鍵字、反射、clone、反序列化等方式。 使用new關鍵字創建對象 在Java中&#xff0c;最常用的創建對象方式是使用new關鍵…

linux學習(文件描述符)[13]

所以fork的時候函數執行完畢&#xff0c;但是數據還在緩沖區中未刷新。 所以會有父子兩份數據 在fork&#xff08;&#xff09;之前ffush&#xff08;&#xff09;&#xff08;c語言的接口&#xff0c;刷新緩沖區&#xff09;fflush(stdout)&#xff0c;就不會有重復 緩沖區的…

Trie樹(前綴樹)的實現與應用

Trie樹&#xff0c;也被稱為前綴樹&#xff0c;是一種用于處理字符串的數據結構。它可以高效地進行字符串的插入、刪除和搜索操作&#xff0c;并且能夠快速找到具有相同前綴的字符串。本篇博客將詳細介紹Trie樹的實現原理和應用場景&#xff0c;并給出Java代碼示例。 Trie樹的…

MyBatis的入門級環境搭建及增刪改查,詳細易懂

目錄 一.mybatis的簡介 二.MyBatis的環境搭建 2.1 導入pom依賴 2.2 數據庫文件導入連接 2.3 修改web.xml文件 2.4 安裝插件 2.5 配置文件 2.5.1 mybatis.cfg.xml文件 2.5.2 generatorConfig.xml文件 2.6 最后測試生成代碼 三.MyBatis的增刪改查 3.1 寫service類&#xff…

Linux命令200例:nc非常有用的網絡工具(常用)

&#x1f3c6;作者簡介&#xff0c;黑夜開發者&#xff0c;全棧領域新星創作者?。CSDN專家博主&#xff0c;阿里云社區專家博主&#xff0c;2023年6月csdn上海賽道top4。 &#x1f3c6;數年電商行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &…

【LVS】3、LVS+Keepalived群集

為什么用它&#xff0c;為了做高可用 服務功能 1.故障自動切換 2.健康檢查 3.節點服務器高可用-HA Keepalived的三個模塊&#xff1a; core&#xff1a;Keepalived的核心&#xff0c;負責主進程的啟動、維護&#xff1b;調用全局配置文件進行加載和解析 vrrp&#xff1a;實…

matlab使用教程(16)—圖論中圖的定義與修改

1.修改現有圖的節點和邊 此示例演示如何使用 addedge 、 rmedge 、 addnode 、 rmnode 、 findedge 、 findnode 及 subgraph 函數訪問和修改 graph 或 digraph 對象中的節點和/或邊。 1.1 添加節點 創建一個包含四個節點和四條邊的圖。s 和 t 中的對應元素用于指定每條…

使用 MBean 和 日志查看 Tomcat 線程池核心屬性數據

文章目錄 CustomTomcatThreadPoolMBeanCustomTomcatThreadPool CustomTomcatThreadPoolMBean com.qww.config;public interface CustomTomcatThreadPoolMBean {String getStatus(); }CustomTomcatThreadPool package com.qww.config;import com.alibaba.fastjson.JSON; impor…

三本書與三場發布會,和鯨社區重新定義編程類書籍從閱讀到實踐新體驗

當 AI 開發者社區配備 AI 基礎設施開發平臺工具時&#xff0c;它還能做什么&#xff1f; 答案是&#xff1a;過去半年&#xff0c;和鯨社區憑借在氣象、醫學、社科等垂直領域的長期積累以及多方伙伴的支持&#xff0c;聯合舉辦了三場新書發布會——從 Python 到 R 語言 、從氣…

Midjourney Prompt 提示詞速查表 v5.2

Midjourney 最新的版本更新正不斷推出令人興奮的新功能。這雖然不斷擴展了我們的AI繪圖工具箱&#xff0c;但有時也會讓我們難以掌握所有實際可以使用的功能和參數。 針對此問題, 小編整理了 "Midjourney Prompt 提示詞速查表"&#xff0c;這是一個非常方便的 Midjo…

Java“牽手“拼多多商品詳情頁面數據獲取方法,拼多多API實現批量商品數據抓取示例

拼多多商城是一個網上購物平臺&#xff0c;售賣各類商品&#xff0c;包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取拼多多商品詳情數據&#xff0c;您可以通過開放平臺的接口或者直接訪問拼多多商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&#xff1a;…

Linux:shell腳本數組和腳本免交互

目錄 一、shell數組的定義 二、定義數組的方式 &#xff08;1&#xff09;數組名(value1 value2 value3 value4 ...) &#xff08;2&#xff09;獲取數組的長度 &#xff08;3&#xff09;獲取數組下標對應的值 &#xff08;4&#xff09;數組的遍歷 &#xff08;5&#x…

qsort函數詳解

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家了解qsort函數&#xff0c;如果你覺得我寫的不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 文章目錄 一. qsort函數參數詳解1.數組首元素地址base2.數組的元素個數num和元素所占內存空間大小w…