CAP和BASE理論

幾個名詞解釋:

網絡分區:俗稱“腦裂”。當網絡發生異常情況,導致分布式系統中部分節點之間的網絡延時不斷變大,最終導致組成分布式系統的所有節點中,只有部分節點之間能夠進行正常通信,而另一些節點則不能。當網絡分區出現時,分布式系統會出現局部小集群。

三態:分布式系統的每一次請求和響應包含:成功,失敗,超時三種狀態。

?

CAP

CAP理論,指的是在一個分布式系統中,不可能同時滿足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性)這三個基本需求,最多只能滿足其中的兩項。

1、一致性:

指數據在多個副本之間是否能夠保持一致的特性。當執行數據更新操作后,仍然剋保證系統數據處于一致的狀態。

2、可用性:

系統提供的服務必須一直處于可用的狀態。對于用戶的每一個操作請求總是能夠在“有限的時間內”返回結果。這個有限時間是系統設計之初就指定好的系統運行指標。返回的結果指的是系統返回用戶的一個正常響應結果,而不是“out ot memory error”之類的系統錯誤信息。

3、分區容錯性:

分布式系統在遇到任何網絡分區故障的時候,仍然需要能夠保證對外提供滿足一致性和可用性的服務,除非是整個網絡環境都發生了故障。組成分布式系統的每個節點的加入與退出都可以看成是一個特殊的網絡分區。

一個分布式系統無法同時滿足這三個條件,只能滿足兩個,意味著我們要拋棄其中的一項。

1、CA,放棄P:將所有數據都放在一個分布式節點上。這同時放棄了系統的可擴展性。

2、CP,放棄A:一旦系統遇到故障時,受影響的服務器需要等待一段時間,在恢復期間無法對外提供正常的服務。

3、AP,放棄C:這里的放棄一致性是指放棄數據強一致性,而保留數據的最終一致性。系統無法實時保持數據的一致,但承諾在一個限定的時間窗口內,數據最終能夠達到一致的狀態。

對于分布式系統而言,分區容錯性是一個最基本的要求,因為分布式系統中的組件必然需要部署到不通的節點,必然會出現子網絡,在分布式系統中,網絡問題是必定會出現的異常。因此分布式系統只能在C(一致性)和A(可用性)之間進行權衡。

?

?

BASE

BASE理論是指,Basically Available(基本可用)、Soft-state( 軟狀態/柔性事務)、Eventual Consistency(最終一致性)。是基于CAP定理演化而來,是對CAP中一致性和可用性權衡的結果。

核心思想:即使無法做到強一致性,但每個業務根據自身的特點,采用適當的方式來使系統達到最終一致性。

1、基本可用:

指分布式系統在出現故障的時候,允許損失部分可用性,保證核心可用。但不等價于不可用。比如:搜索引擎0.5秒返回查詢結果,但由于故障,2秒響應查詢結果;網頁訪問過大時,部分用戶提供降級服務,等。

2、軟狀態:

軟狀態是指允許系統存在中間狀態,并且該中間狀態不會影響系統整體可用性。即允許系統在不同節點間副本同步的時候存在延時。

3、最終一致性:

系統中的所有數據副本經過一定時間后,最終能夠達到一致的狀態,不需要實時保證系統數據的強一致性。最終一致性是弱一致性的一種特殊情況。

?

BASE理論面向的是大型高可用可擴展的分布式系統,通過犧牲強一致性來獲得可用性。ACID是傳統數據庫常用的概念設計,追求強一致性模型。

?

ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

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

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

相關文章

Mysql案例5:取得平均薪資最高的部門的部門名稱

一、要求:查詢平均薪水最高部門的部門編號 二、背景:當前數據庫有employee表和department表,數據分別如下: employee表: department表: 三、難點: 1、需要考慮最高平均薪資可能在多個部門同時出…

Spring 處理過程分析

一、處理過程分析 1、首先&#xff0c;Tomcat每次啟動時都會加載并解析/WEB-INF/web.xml文件&#xff0c;所以可以先從web.xml找突破口&#xff0c;主要代碼如下&#xff1a;<servlet ><servlet-name >spring-mvc</servlet-name><!-- servlet類 --><…

python全棧開發中級班全程筆記(第二模塊、第四章)(常用模塊導入)

python全棧開發筆記第二模塊 第四章 &#xff1a;常用模塊&#xff08;第二部分&#xff09; 一、os 模塊的 詳解 1、os.getcwd() &#xff1a;得到當前工作目錄&#xff0c;即當前python解釋器所在目錄路徑 import os j os.getcwd() # 返回當前pyt…

基于 Spring Cloud 完整的微服務架構實戰

本項目是一個基于 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架構建的微服務項目。 作者&#xff1a;Sheldon地址&#xff1a;https://github.com/zhangxd1989 技術棧 Spring boot - 微服務的入門級微框架&#xff0c;用來簡化 Spring 應用的初…

mysql Invalid use of group function的解決辦法

錯誤語句&#xff1a;SELECT s.SID, s.Sname, AVG(a.score)FROM student sLEFT JOIN sc a ON s.SID a.SID WHERE AVG(a.score) > 60GROUP BY s.SID正確語句&#xff1a; SELECTs.SID,s.Sname,AVG(a.score)FROMstudent sLEFT JOIN sc a ON s.SID a.SID GROUP BYs.SID HAVIN…

ipython notebook 中 wavefile, display, Audio的使用

基于ipython notebook的 wavefile以及display, Audio的使用首先是使用的庫使用 wavfile 讀取.wav文件使用display,Audio播放聲音最近在做聲音信號處理的時候&#xff0c;使用了ipython notebook。發現相較于matlab&#xff0c;python在有關生成wave文件和播放音頻需要利用到sci…

spring 設計模式

設計模式作為工作學習中的枕邊書&#xff0c;卻時常處于勤說不用的尷尬境地&#xff0c;也不是我們時常忘記&#xff0c;只是一直沒有記憶。 今天&#xff0c;螃蟹在IT學習者網站就設計模式的內在價值做一番探討&#xff0c;并以spring為例進行講解&#xff0c;只有領略了其設計…

Ansible-----循環

with_dict迭代字典項 使用"with_dict"可以迭代字典項。迭代時&#xff0c;使用"item.key"表示字典的key&#xff0c;"item.value"表示字典的值。 ---- hosts: localhosttasks:- debug: msg"{{item.key}} & {{item.value}}"with_di…

ROS(Robot Operating System)筆記 : 1.使用launch file在gazebo中生成urdf機器人

ROS(Robot Operating System) 1.使用launch file在gazebo中生成urdf機器人 最近接觸了ROS(Robot Operating System),發現單單學習官網http://wiki.ros.org/上的教程&#xff0c;在實際操作過程中仍然會遭遇許多困難。這一系列關于ROS的文章記錄了ROS學習過程中可能遇到的問題…

[asp.net] 利用WebClient上傳圖片到遠程服務

一、客戶端 1.頁面 <form id"Form1" method"post" runat"server" enctype"multipart/form-data">     <input id"MyFile" type"file" runat"server" />     <br />     …

ROS project part 1: Ubuntu中安裝opencv包以及相應的依賴

首先在ubuntu linux上安裝opencv $ sudo apt-get install python-opencv使用ipython 驗證 opencv的安裝 $ import cv2 as cv $ print(cv.__version__)查看當前的ubuntu 版本 $ cat /etc/issue查看當前python版本 下列代碼分別用于查看python3 python2的已安裝版本 $ python…

FastReport4.6程序員手冊_翻譯

一、使用TfrxReport 組件工作1、加載并存儲報表默認情況下&#xff0c;報表窗體同項目窗體構存儲在同一個DFM文件中。多數情況下&#xff0c;無須再操作&#xff0c;因而你就不必采用特殊方法加載報表。如果你決定在文件中存儲報表窗體或者是數據庫的Blob字段&#xff08;他提供…

Python音頻信號處理 1.短時傅里葉變換及其逆變換

短時傅里葉變換及其逆變換 本篇文章主要記錄了使用python進行短時傅里葉變換&#xff0c;分析頻譜&#xff0c;以及通過頻譜實現在頻域內降低底噪的代碼及分析&#xff0c;希望可以給同樣在學習信號處理的大家一點幫助&#xff0c;也希望大家對我的文章多提意見建議。 一. 短…

Java多線程同步機制

一段synchronized的代碼被一個線程執行之前&#xff0c;他要先拿到執行這段代碼的權限&#xff0c;在 java里邊就是拿到某個同步對象的鎖&#xff08;一個對象只有一把鎖&#xff09;&#xff1b; 如果這個時候同步對象的鎖被其他線程拿走了&#xff0c;他&#xff08;這個線程…

SpringBoot與數據訪問

pom依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-conne…

Python音頻信號處理 2.使用譜減法去除音頻底噪

使用譜減法去除音頻底噪 上一篇文章我主要分享了短時傅立葉變換及其逆變換在python中的實現&#xff0c;有興趣的可以閱讀一下該篇文章&#xff0c;地址如下&#xff1a; Python音頻信號處理 1.短時傅里葉變換及其逆變換 那么在本篇文章中&#xff0c;我們將利用短時傅立葉變…

線程池的優點

線程池的優點 1、線程是稀缺資源&#xff0c;使用線程池可以減少創建和銷毀線程的次數&#xff0c;每個工作線程都可以重復使用。 2、可以根據系統的承受能力&#xff0c;調整線程池中工作線程的數量&#xff0c;防止因為消耗過多內存導致服務器崩潰。 線程池的創建 public…

ROS(Robot Operating System)筆記 : 2.創建并配置package

ROS(Robot Operating System)筆記 : 2.創建一個ROS包并設置其依賴 1.首先來到ros的工作目錄下&#xff0c;接著使用 catkin_make [包名稱] [依賴1] [依賴2] … 創建一個包名為 challenge_project 的 ros包。 $ catkin_create_pkg challenge_project rospy std_msgs cv_bri…

Java線程相關的熱門面試題

1) 什么是線程&#xff1f; 線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用多線程對運算密集型任務提速。比如&#xff0c;如果一個線程完成一個任務要…

linux運維、架構之路-jumpserver

linux運維、架構之路-jumpserver 一、jumpserver介紹 是一款由python編寫開源的跳板機(堡壘機)系統&#xff0c;實現了跳板機應有的功能。基于ssh協議來管理&#xff0c;客戶端無需安裝agent。 特點&#xff1a; 完全開源&#xff0c;GPL授權 Python編寫&#xff0c;容易再次開…