分佈式系統01——什麼是分佈式事務

本文開始將爲各位開始介紹分佈式系統相關的知識。關注個人公衆號「Java面典」,天天 10:24 和你一塊兒瞭解更多 Java 相關知識點。數據庫

事務

事務(TRANSACTION)是做爲單個邏輯工做單元執行的一系列操做,這些操做做爲一個總體一塊兒向系統提交,要麼都執行、要麼都不執行 。事務是一個不可分割的工做邏輯單元事務必須具有如下四個屬性,簡稱 ACID 屬性:服務器

原子性(Atomicity)

事務是一個完整的操做。事務的各步操做是不可分的(原子的)—— 要麼都執行,要麼都不執
行。網絡

一致性(Consistency)

當事務完成時,數據必須處於一致狀態。併發

隔離性(Isolation)

對數據進行修改的全部併發事務是彼此隔離的,這代表事務必須是獨立的,它不該以任何方式依賴於或影響其餘事務。分佈式

永久性(Durability)

事務完成後,它對數據庫的修改被永久保持,事務日誌可以保持事務的永久性。網站

分佈式事務

分佈式事務:指會涉及到操做多個數據庫的事務。搜索引擎

關鍵在於保證在全部節點的數據寫操做,要不所有都執行,要麼所有的都不執行。可是一臺機器在執行本地事務的時候沒法知道其餘機器中的本地事務的執行結果。因此也就不知道本次事務到底應該 commit 仍是 roolback。atom

常規的解決辦法就是引入一個「協調者」的組件來統一調度全部分佈式節點的執行。日誌

CAP 理論

一個分佈式系統最多隻能同時知足 Consistency(一致性)、Availability(可用性)和 Partition tolerance(分區容錯性)這三項中的兩項。code

CA(放棄P):將全部的數據放在一個節點。知足一致性、可用性;
AP(放棄C):放棄強一致性,用最終一致性來保證;
CP(放棄A):一旦系統碰見故障,受到影響的服務器須要等待一段時間,在恢復期間沒法對外提供服務。

Consistency(一致性)

從客戶端角度,多進程併發訪問時,更新過的數據在不一樣進程如何獲取的不一樣策略,決定了不一樣的一致性:

  1. 強一致性:對於關係型數據庫,要求更新過的數據能被後續的訪問都能看到;
  2. 弱一致性:能容忍後續的部分或者所有訪問不到;
  3. 最終一致性:通過一段時間後要求能訪問到更新後的數據。

CAP中說,不可能同時知足的這個一致性指的是強一致性。

Availability(可用性)

服務一直可用,並且是正常響應時間。

大型互聯網爲了服務可用,捨棄強一致性,保證最終一致性。

Partition Tolerance(分區容錯性)

分佈式系統在遇到某節點或網絡故障的時候,仍然可以對外提供知足一致性和可用性的服務。就是在網絡中斷的狀況下,系統若是還能正常工做。

BASE 理論

什麼是 BASE 理論

BASE理論由三個點構成:Basically Available(基本可用)Soft state(軟狀態),和 Eventually consistent(最終一致性)

Base 理論是對 CAP 中一致性和可用性權衡的結果,其來源於對大型互聯網分佈式實踐的總結,是基於 CAP 定理逐步演化而來的。其核心思想是:既是沒法作到強一致性(Strong consistency),但每一個應用均可以根據自身的業務特色,採用適當的方式來使系統達到最終一致性(Eventual consistency)。

Basically Available(基本可用)

假設系統,出現了不可預知的故障,但仍是能用,相比較正常的系統而言:

  1. 響應時間上的損失:正常狀況下的搜索引擎 0.5 秒即返回給用戶結果,而基本可用的搜索引擎能夠在 1 秒做用返回結果;
  2. 功能上的損失:在一個電商網站上,正常狀況下,用戶能夠順利完成每一筆訂單,可是到了大促期間,爲了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。

Soft state(軟狀態)

硬狀態: 相對於原子性而言,要求多個節點的數據副本都是一致的。

軟狀態:容許系統中的數據存在中間狀態,並認爲該狀態不影響系統的總體可用性,即容許系統在多個不一樣節點的數據副本存在數據延時。

Eventually consistent(最終一致性)

系統可以保證在沒有其餘新的更新操做的狀況下,數據最終必定可以達到一致的狀態,所以全部客戶端對系統的數據訪問最終都可以獲取到最新的值。最終一致性包含如下幾種:

  1. 因果一致性(Causal consistency):若是節點 A 在更新完某個數據後通知了節點 B,那麼節點 B 以後對該數據的訪問和修改都是基於 A 更新後的值。於此同時,和節點 A 無因果關係的節點 C 的數據訪問則沒有這樣的限制;

  2. 讀己之所寫(Read your writes):這種就很簡單了,節點 A 更新一個數據後,它自身老是能訪問到自身更新過的最新值,而不會看到舊值。其實也算一種因果一致性;

  3. 會話一致性(Session consistency):會話一致性將對系統數據的訪問過程框定在了一個會話當中:系統能保證在同一個有效的會話中實現 「讀己之所寫」 的一致性,也就是說,執行更新操做以後,客戶端可以在同一個會話中始終讀取到該數據項的最新值;

  4. 單調讀一致性(Monotonic read consistency):單調讀一致性是指若是一個節點從系統中讀取出一個數據項的某個值後,那麼系統對於該節點後續的任何數據訪問都不該該返回更舊的值;

  5. 單調寫一致性(Monotonic write consistency):指一個系統要可以保證來自同一個節點的寫操做被順序的執行。

相關文章
相關標籤/搜索