一、分佈式一致性問題數據庫
假設客戶端C1將系統的K由V1更新爲V2,但客戶端C2沒法當即讀取到K的最新值,須要在一段時間才能讀取到。-------數據庫之間複製的延遲問題。服務器
數據複製需求:一、爲了增長系統的可用性,以防止單點故障引發的系統不可用。二、提升系統的總體性能,經過負載均衡技術,可以讓分佈在不一樣地方的數據副本都可以爲用戶提供服務。網絡
所謂分佈式一致性問題,是指分佈式環境中引入數據複製機制後,不一樣數據節點間可能出現的,並沒有法依靠計算機應用程序自身解決的數據不一致狀況。簡單地講,數據一致性就是指在對一個副本進行更新的同時,必須確保也可以更新其餘副本,不然不一樣副本之間的數據將再也不一致。併發
影響性能的解決方法:將寫入動做阻塞,直到數據複製完成後,才完成寫入。但性能急劇降低。負載均衡
如何保證數據一致性,又不影響系統運行的性能,是每一個分佈式系統須要重點考慮和權衡的。因而,一致性級別由此誕生:分佈式
一、強一致性:要求系統寫入什麼,讀取出來也會是什麼,用戶體驗好,但性能影響較大。性能
二、弱一致性:約束系統在寫入成功後,不承諾當即讀到寫入的值,也不承諾多久以後數據達到一致,但會盡量地保證到某個時間級別(如秒級)後,數據可以達到一致狀態,弱一致性還能夠再分: url
會話一致性:該一致性級別只保證對於寫入的值,在同一個客戶端會話中能夠讀取到一致的值,但其餘會話不能保證。.net
用戶一致性:該一致性只保證對於寫入的值,在同一個用戶能夠讀到一致的值,其餘用戶不能保證。blog
三、最終一致性:弱一致性的特例,系統會保證在必定時間內,可以達到一個數據一致性的狀態。
二、分佈式概念:
分佈式系統是一個硬件或軟件組件分佈在不一樣的網絡計算機上,彼此之間僅僅經過消息傳遞進行通訊和協調的系統。
特徵:
分佈性
對等性,數據副本和服務副本
併發性
缺少全局時鐘
故障老是會發生
分佈式環境的問題:
通訊異常
網絡分區
三態,成功、失敗、超時
節點故障
三、分佈式下ACID
ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數據庫,必需要具備這四種特性,不然在事務過程(Transaction processing)當中沒法保證數據的正確性,交易過程很可能達不到交易方的要求。
事務:由一系列對系統中數據進行訪問與更新的操做所組成的一個程序執行單元。事務能夠在多個應用程序之間提供一個隔離方法,以防止彼此的操做互相干擾,另外一方面,事務爲數據庫操做序列提供了一個從失敗中恢復到正常狀態的方法。
原子性:事務的原子性是指事務必須是一個原子的操做單元,要麼所有執行成功,要麼所有不執行。
一致性:數據庫執行先後,數據庫必須處於一致性狀態
隔離性:一個事務的執行,不能被其餘的事務干擾。
四、事務級別:
未受權讀取(未提交但被讀到)、受權讀取(讀已提交),可重複讀取和串行化。
可重複讀:保證事務在處理過程當中,屢次讀取到同一個數據時,其值和事務開始時刻是一致的,所以該事務級別禁止了不可重複讀和髒讀,可是可能出現幻影數據,如事務B在第一次操做時讀取到1,可是在下一次事務操做中,即便事務B採用一樣方式,可能會讀取到10或20。
串行化:最嚴格的事務隔離級別。它要求全部事務都被串行執行,即事務只能一個接一個地進行處理,不能併發執行。
幻讀:例如事務 T1 對一個表中全部的行的某個數據項作了從「1」修改成「2」的操做,這時事務 T2 又對這個表中插入了一行數據項爲「1」的數據,而且提交給數據庫。而操做事務 T1 的用戶若是再查看剛剛修改的數據,會發現數據怎麼仍是 1?其實這行是從事務 T2 中添加的,就好像產生幻覺同樣,這就是發生了幻讀。好比,小編準備提取你打賞的一分錢,提取完了,這時又有其餘熱心網友打賞了一分錢,小編一看,明明已經取出了,怎麼又有一分錢!?小編此時覺得像作夢同樣,我以爲也能夠叫「夢讀」,哈哈。幻讀和不可重複讀都是讀取了另外一條已經提交的事務(這點就髒讀不一樣),所不一樣的是不可重複讀查詢的都是同一個數據項,而幻讀針對的是一批數據總體(好比數據的個數)。
五、分佈式事務
概念:分佈式事務是指事務的參與者,支持事務的服務器,資源服務器以及事務管理器分別位於分佈式系統的不一樣節點之上。一般一個分佈式事務會涉及對多個數據源或業務系統的操做。
CAP理論:一個分佈式系統不可能同時知足一致性、可用性、分區容錯性這三個基本需求。最多隻能同時知足其中的兩項。
一致性(C):指數據在多個副本之間是否可以保持一致。
可用性(A):指系統提供的服務必須一直處於可用狀態,對於用戶的每個操做請求老是可以在有限的時間內返回結果。
分區容錯性(P):分佈式在遇到任何網絡分區故障的時候,仍然可以保證對外提供一致性和可用性的服務,除非是整個網絡環境都發生了故障。
BASE理論是Basically Available(基本可用)、Soft state(軟狀態)、Eventually consistent(最終一致性)。是基於CAP演化而來。核心思想是,既然沒法作到強一致性,但每一個應用均可以根據自身的業務特色,採起適當的方式來使系統達到最終一致性。
基本可用:性能上的損失或功能上的損失
弱狀態:容許系統中的數據存在中間狀態,並認爲該中間狀態的存在不會影響性能的可用性,即容許系統在不一樣節點的數據副本之間進行同步的過程當中存在延遲。
最終一致性:保證系統最終數據可以達到一致,而不須要實時保證系統數據的強一致性。
六、一致性協議: