從ACID到CAP/BASE
本文是看《從Paxos到ZooKeeper分散式一致性原理與實踐》-倪超 著。進行簡單記錄。
ACID是什麼?
事務(Transaction) 是由一系列對系統中資料進行訪問與更新的操作組成的一個程式執行邏輯單元(Unit),狹義上的事務特指資料庫事務。一方面,當多個應用程式併發訪問資料庫時,事務可以在這些應用程式之間提供一個隔離方法,以防止彼此的操作互相干擾。另一方面,事務為資料庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了資料庫即使在異常狀態下仍能保持資料一致性的方法。
事務具有四個特性,分別是原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和永續性(Durability),簡稱為事務對ACID特性。
CAP是什麼?
C:(Consistency):一致性,A:(Availability):可用性,P:(Partition tolerance)分割槽容錯性
一個分散式系統不可能同時滿足CAP。
定理的應用:
放棄CAP定理 | 說明 |
---|---|
放棄P(分割槽容錯性) | 如果希望能夠避免系統出現分割槽容錯性問題,一種較為簡單的做法是將所有的資料(或者僅僅是那些與事務相關的資料)都放在一個分散式節點上。這樣的做法雖然無法100%地保證系統不會出錯,但至少不會碰到由於網路分割槽帶來的負面影響。但同時需要注意的是,放棄P的同時就意味著放棄了系統的可擴充套件性 |
放棄A(可用性) | 相對於放棄”分割槽容錯性”來說,放棄可用性則正好相反,其做法是一旦系統遇到網路分割槽或其他故障時,那麼受到影響的服務需要等待一定的時間,因此在等待期間系統無法對外提供正常對服務,即不可用。 |
放棄C(一致性) | 這裡所說對放棄一致性,並不是完全不需要資料一致性,如果真是這樣的話,那麼系統的資料都是沒有意義的,整個系統也是沒有價值的。事實上,放棄一致性指的是放棄資料的強一致性,而保留資料的最終一致性。這樣的系統無法保證資料保持實時的一致性,但是能夠承諾的是,資料最終會達到一個一致的狀態。這就引入了一個時間視窗的概念,具體多久能夠到達資料一致取決於系統的設計,主要包括資料副本在不同節點之間的複製時間長短。 |
另一方面,需要明確的一點是,對於一個分散式系統而言,分割槽容錯性可以說是一個最基本的要求。為什麼這樣說,其實很簡單,因為既然是一個分散式系統,那麼分散式系統中的元件必然需要被部署到不同的節點,否則也就無所謂分散式系統了,因此必然出現子網路。而對於分散式系統而言,網路問題又是一個必定會出現的異常情況,因此分割槽容錯性也就成為了一個分散式系統必然需要面對和解決的問題。因此係統架構設計師往往需要把精力花在如何根據業務特點在C(一致性)和(A可用性)之間尋求平衡。
BASE理論是什麼?
BASE是Basically Available (基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性) 三個短語的簡寫,是由來自eBay的架構師Dan Pritchett第一次明確提出,是對CAP中的一致性和可用性權衡的結構,其來源對於大規模網際網路系統分散式實踐的總結,是基於CAP定理逐步演進而來的,其核心思想是即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性(Eventual consistency)。
基本可用的典型例子:
- 相應時間上的損失:正常情況下,一個線上搜尋引擎需要0.5秒查詢出結果,但是出現故障之後,可能會增加1~2秒。
- 功能上的損失:正常情況下,在一個電子商務網站上進行購物,消費者幾乎能夠順利地完成每一筆訂單,但是在一些節日大促銷購物高峰對時候,由於消費者的購物行為激增,為了保護購物的系統穩定性,部分消費者可能會被吸引到一個降級頁面。
弱狀態
若狀態也稱為軟狀態,和硬體狀態相對,是指允許系統中的資料存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料同步的過程存在延時。
最終一致性
因果一致性(Causal consistency):
程序A在更新完某個資料項後通知欄程序B,那麼程序B之後對資料項的訪問都應該能夠獲取到程序A更新後的最新值,即不能發生丟失更新情況。與此同時,與程序A無因果關係對程序C的資料訪問則沒有這樣的限制。
讀已之所寫(Read your writes):
程序A更新一個數據項之後,它自己總是能夠訪問到更新過對最新值,而不會看到舊值。也就是說,對於單個數據獲取者來說,其讀取到的資料,一定不會比自己上次寫入的值舊。因此,讀已之所寫也可以看作是一種特殊的因果一致性。
會話一致性(Session consistency):
會話一致性對系統資料的訪問過程框定在了一個會話當中:系統能夠保證在同一個有效的會話中實現”讀已之所寫”的一致性,也就是說,執行更新操作之後,可會能夠在同一個會話中始終讀取到該資料項對最新值。
單調讀一致性(Monotonic read consistency)
單調讀一致性是指如果一個程序從系統中讀取出一個數據項的某個值後,那麼系統對於該程序後續的任何資料訪問都不應該返回更舊的值。
單調寫一致性(Monotonic write consistency)
單調寫一致性是指,一個系統需要能夠保證來自同一個程序的寫操作被順序的執行。
BASE小結
事實上,最終一致性並不是只有那些大型分散式系統才涉及的特性,許多現代的關係型資料庫都採用了最終一致性模型。在現代關係型資料庫中,大多都是會採用同步和非同步方式來實現主備資料複製技術。在同步方式中,資料的複製過程通常是更新事務的一部分,因此在事務完成後,主備資料庫的資料就會達到一致。而在非同步方式中,備庫的更新往往會存在延時,這取決於事務日誌在主備資料庫之間傳輸的時間長短,如果傳輸時間過長,或者甚至在日誌傳輸過程中出現異常導致無法及時將事務應用到備庫上,那麼很顯然,從備庫中讀取的資料是舊的,因此就會出現資料不一致的情況。當然,無論是採用多次重試還是人為資料訂正,關係型資料庫還是能夠保證最終資料達到一致—這就是系統提供最終一致性保證的經典案例。
總的來說,BASE理論面向的是大型高可用可擴充套件的分散式系統,和傳統事務的ACID特性是相反的,它完全不同於ACID的強一致性模型,而是提出通過犧牲強一致性來獲得可用性,並允許資料在一段時間內是不一致的,但是最終達到一致狀態。但同時,在實際分散式場景中,不同業務單元和元件對資料一致性的要求是不同的,因此在具體的分散式系統架構設計的過程中,ACID特性與BASE理論往往又會結合在一起使用。
相關推薦
從ACID到CAP/BASE
本文是看《從Paxos到ZooKeeper分散式一致性原理與實踐》-倪超 著。進行簡單記錄。 ACID是什麼? 事務(Transaction) 是由一系列對系統中資料進行訪問與更新的操作組成的一個程式執行邏輯單元(Unit),狹義上的事務特指資料庫事務。一方
分散式學習筆記二:從分散式一致性談到CAP理論、BASE理論
問題的提出 在電腦科學領域,分散式一致性是一個相當重要且被廣泛探索與論證問題,首先來看三種業務場景。 1、火車站售票 假如說我們的終端使用者是一位經常坐火車的旅行家,通常他是去車站的售票處購買車 票,然後拿著車票去檢票口,再坐上火車,開始一段美好的旅行----一切似乎都是那麼和諧。想象一
分散式理論系列(一)從 ACID 到 CAP 到 BASE
分散式理論系列(一)從 ACID 到 CAP 到 BASE 一、ACID 1.1 事務的四個特徵: (1) Atomic(原子性) 事務必須是一個原子的操作序列單元,事務中包含的各項操作在一次執行過程中,要麼全部執行成功,要麼全部不執行,任何一項失敗,整個事務回滾,只有全部都執行成功,整個事務才算成功
分布式理論系列(一)從 ACID 到 CAP 到 BASE
架構師 nsis 參考 sql 完整 分布式系 穩定性 放棄 ole 分布式理論系列(一)從 ACID 到 CAP 到 BASE 一、ACID 1.1 事務的四個特征: (1) Atomic(原子性) 事務必須是一個原子的操作序列單元,事務中包含的各項操作在一次執行過程中,
從ACID到CAP到BASE
一、ACID 事務的四個特徵: 1、Atomic原子性 事務必須是一個原子的操作序列單元,事務中包含的各項操作在一次執行過程中,要麼全部執行成功,要麼全部不執行,任何一項失敗,整個事務回滾,只有全部都執行成功,整個事務才算成功。 2、Consistency一致性 事務的執行不能破
大資料求索(12): 從傳統ACID到分散式系統中的CAP和BASE
大資料求索(12): 從ACID到CAP和BASE 一、關於ACID 關係型資料庫最強大的功能之一就是事務,能夠保證資料的強一致性。事務有如下幾個特性: 1.1 A(Atomicity) 原子性 原子性很容易理解,也就是說**事務裡的所有操作要麼全部做完,要麼都不做,事務
從此刻起 文/毛毛蟲
從此刻起 在時光裡蒞位,期待 輕風雲淡的韶華里 寫出瀲灩蔥蘢的文字 從此刻起 依著陽光猶如初見的模樣 悄然長成一束暗香浮動的花 等春天的情話在年華里棲霞 從此刻起 如若不能屹立成一棵樹的姿態 那就做一株平凡的草木 寂靜的搖曳於塵世 不慕繁華,不懼荒涼 從此刻起 綻放成自
【推薦精讀】從item-base到svd再到rbm,多種Collaborative Filtering(協同過濾演算法)從原理到實現
〇.說明 本文的所有程式碼均可在 DML 找到,歡迎點星星。 一.引入 推薦系統(主要是CF)是我在參加百度的電影推薦演算法比賽的時候才臨時學的,雖然沒拿什麼獎,但是知識卻是到手了,一直想寫一篇關於推薦系統的文章
從item-base到svd再到rbm,多種Collaborative Filtering(協同過濾演算法)從原理到實現
〇.說明 本文的所有程式碼均可在 DML 找到,歡迎點星星。 一.引入 推薦系統(主要是CF)是我在參加百度的電影推薦演算法比賽的時候才臨時學的,雖然沒拿什麼獎,但是知識卻是到手了,一直想寫一篇關於推薦系統的文章總結下,這次藉著完善DM
學習:從零玩轉HTML5前端+跨平臺開發(base標籤(掌握))
base標籤就是專門用來統一的指定當前網頁中的所有超連結(a標籤)需要如何開啟格式: <head> <base target="_blank"> </head>注意:必須寫在head
《一個Android工程的從零開始》-5、base(四) BaseActivity——方法封裝
先扯兩句 昨天發了一篇GitHub版本控制的整合後,今天終於迴歸正事,繼續我們的《一個Android工程的從零開始》,真心有點小開心呢。 今天也是base的BaseActivity完結掉了,昨天我也查了一下其他人的BaseActivity封裝,發現卻比我的篇
C/C++:從命令列獲取引數
注意:argc代表引數數量,若沒有引數時為1,即代表只有一個命令本身。argv[0]代表命令本身,argv[1]代表第一個引數,argv[2]代表第二個引數。 #include <cstdio&
從static變數初始化到Spring/Spring boot的工具類靜態變數注入
寫這篇博文,要從java.lang.ExceptionInInitializerError這個報錯開始。簡單的看上去,這是一個類初始化異常報錯。但事實上並不是這樣,這是由於呼叫某個static變數屬
IOC Of Ninject Base On ASP.NET MVC
dex 準備工作 應用 new 引用 cti err art part 說在之前的話 IOC的概念相信大家比較熟悉了,習慣性稱之為依賴註入或控制反轉,園子裏對基於MVC平臺IOC設計模式已經相當多了,但大家都只知道應該怎麽應用一個IOC模式,比如Ninject, Unity
從零開始——基於角色的權限管理01(補充)
itl jsp mage logs log sonar class htm -1 此博文較為詳細的介紹從零開始——基於角色的權限管理01文中的兩個部分的流程(解釋代碼)。 1) index.jsp中提交跳轉action action的login,獲取jsp頁面傳
級聯復制轉化成一主兩從
級聯復制轉化成一主兩從1.如圖,級聯復制如果轉化成一主兩從?GTID復制處理方法:只需要把S2的復制停掉,然後重新change到M上即可;S2:stop slave;reset slave all;change master to M;start slave傳統復制處理方法(比較復雜):(1)停止S1的復制,
UFLDL講義十五:從自我學習到深層網絡
學習課程 機器學習 .cn font style pan 學習 技術 nbsp 註:本講義來源為NG教授的機器學習課程講義,詳見 http://deeplearning.stanford.edu/wiki/index.php UFLDL講義十五:從自我學習到深層
想體驗從活火山上滑下來的刺激感?VR來成全你
enter forum .com article tex 正在 mage www style 巴伐利亞銀河水上公園目前正在測試VR高級版的水上滑梯。 我們聽說過虛擬現實(VR)被用於過山車及其他主題公園遊樂設施上,但是戴上VR頭顯在水滑梯上飛馳,這一想還聞所未
[ppurl]從”皮皮書屋”下載電子書的姿勢
ace pdf pla 存在 evel white 這份 tails 不想 (歡迎轉載,轉載請註明出處:http://blog.csdn.net/hcbbt/article/details/42072545) 寫在前面的扯皮 為什麽標題的”皮皮書屋”加上了引號,由於皮
Hadoop化繁為簡-從安裝Linux到搭建集群環境
開始 協調 利用 html isa 同學 防火墻 右鍵 $path 簡介與環境準備 hadoop的核心是分布式文件系統HDFS以及批處理計算MapReduce。近年,隨著大數據、雲計算、物聯網的興起,也極大的吸引了我的興趣,看了網上很多文章,感覺還是雲裏霧裏,很多不必