分佈式——ACID原則 CAP理論

分佈式計算的原理

分佈式計算就是將計算任務分攤到大量的計算節點上,一 起完成海量的計算任務。而分佈式計算的原理和並行計算 類似,就是將一個複雜龐大的計算任務適當劃分爲一個個 小任務,任務並行執行,只不過分佈式計算會將這些任務 分配到不同的計算節點上,每個計算節點只需要完成自己 的計算任務即可,可以有效分擔海量的計算任務。而每個 計算節點也可以並行處理自身的任務,更加充分利用機器 的CPU資源。最後再將每個節點的計算結果彙總,得到最 後的計算結果。

分佈式計算的理論基礎

ACID原則

ACID是數據庫事務正常執行的四個原則,分別指原子性一致性獨立性持久性

A(Atomicity)—— 原子性 原子性很容易理解,也就是說事務裏的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裏的所有操作都成功,只要有一個操作失 敗,整個事務就失敗,需要回滾。 例如銀行轉賬,從A賬戶轉100元至B賬戶,分爲兩個步驟:①從A賬戶取 100元;②存入100元至B賬戶。 這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失 敗,錢會莫名其妙少了100元。

C(Consistency)—— 一致性 一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫原本的一致性約束。 例如現有完整性約束a + b = 10,如果一個事務改變了a,那麼必須得改變 b,使得事務結束後依然滿足a + b = 10,否則事務失敗。

I(Isolation)—— 獨立性 所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問 的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問 的數據就不受未提交事務的影響。 例如交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如 果此時B查詢自己的賬戶,是看不到新增加的100元的。

D(Durability)—— 持久性 持久性是指一旦事務提交後,它所做的修改將會永久保存在數據庫上, 即使出現宕機也不會丟失。 這些原則解決了數據的一致性、系統的可靠性等關鍵問題,爲關係數據 庫技術的成熟以及在不同領域的大規模應用創造了必要的條件。

CAP理論

一個分佈式系統最多隻 能同時滿足一致性(Consistency)、可用 性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。
在這裏插入圖片描述
一致性
指“All nodes see the same data at the same time”,即更新操作成功並返 回客戶端完成後,所有節點在同一時間的數據完全一致。對於一致性,可以分 爲從客戶端和服務端兩個不同的視角來看。

  • 從客戶端來看,一致性主要指多併發訪問時更新過的數據如何獲取的問題。
  • 從服務端來看,則是如何將更新複製分佈到整個系統,以保證數據的最終一 致性問題。

可用性

  • 指“Reads and writes always succeed”,即服務一直可用,而且是 在正常的響應時間內。對於一個可用性的分佈式系統,每一個非故障的節點 必須對每一個請求作出響應。也就是該系統使用的任何算法必須最終終止
  • 當同時要求分區容錯性時,這是一個很強的定義:即使是嚴重的網絡錯誤, 每個請求也必須終止。好的可用性主要是指系統能夠很好地爲用戶服務,不 出現用戶操作失敗或者訪問超時等用戶體驗不好的情況。通常情況下可用性 和分佈式數據冗餘、負載均衡等有着很大的關聯。
    分區容錯性
  • 指“The system continues to operate despite arbitrary message loss or failure of part of the system”,也就是指分佈式系統在遇到某節點或網絡 分區故障的時候,仍然能夠對外提供滿足一致性和可用性的服務。
  • 分區容錯性和擴展性緊密相關。在分佈式應用中,可能因爲一些分佈式的原 因導致系統無法正常運轉。好的分區容錯性要求應用雖然是一個分佈式系統, 但看上去卻好像是一個可以運轉正常的整體。例如現在的分佈式系統中有某 一個或者幾個機器宕掉了,其他剩下的機器還能夠正常運轉滿足系統需求, 或者是機器之間有網絡異常,將分佈式系統分隔爲獨立的幾個部分,各個部 分還能維持分佈式系統的運作,這樣就具有好的分區容錯性。
CAP權衡

無法同時滿足一致性、可用性和分區容錯性這三個特性,那應該如何取捨呢?
(1)CA without P:如果不要求P(不允許分區),則C(強一致性)和A(可用 性)是可以保證的。但其實分區始終會存在,因此CA的系統更多的是允許分區 後各子系統依然保持CA。
(2)CP without A:如果不要求A(可用),相當於每個請求都需要在Server之 間強一致,而P(分區)會導致同步時間無限延長,如此CP也是可以保證的。很 多傳統的數據庫分佈式事務都屬於這種模式。
(3)AP without C:要高可用並允許分區,則需放棄一致性。一旦分區發生, 節點之間可能會失去聯繫,爲了高可用,每個節點只能用本地數據提供服務, 而這樣會導致全局數據的不一致性。現在衆多的NoSQL都屬於此類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章