本節書摘來自華章計算機《深入了解hadoop(原書第2版)》一書中的第1章,第1.4節,作者 [美]薩米爾·瓦德卡(sameer wadkar),馬杜·西德林埃(madhu siddalingaiah),傑森·文納(jason venner),譯 于博,馮傲風,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
以大資料作為參照來了解事務概念的發展變化是非常重要的。這個問題的讨論會涉及相應的nosql資料庫。hadoop系統使用hbase來作為自己的nosql資料存儲。你也可以使用cassandra或者雲計算提供商(如amazon dynamo)的nosql系統來替代。
大多數的rdbms使用者都要求資料庫必須要遵守acid準則,但是遵守這些準則是有系統代價的。當資料庫背景需要處理峰值為每秒數百萬次的事務操作的時候,要求苛刻地遵守acid準則對資料庫來說是個巨大的挑戰。
對苛刻的acid準則做出妥協是必要的。做出妥協的理論依據就是著名的cap理論(又稱brewer理論)。cap理論是下面三點的首字母縮寫:
consistency(一緻性):在分布式系統中的所有資料備份,在同一時刻有同樣的值。
availability(可用性):在合理且明确的時間内,保證每個請求都能獲得成功或者失敗的結果的響應。
partition tolerance(分區容忍性): 在叢集中一部分節點故障後,叢集整體仍可使用。
這個理論用來證明,任何分布式系統隻能同時滿足其中的兩個特性,而無法三者兼顧。現在,讓我們仔細地思考對比下面列出的各種系統:
一緻性和可用性:遵守acid準則的單機rdbms是兼顧一緻性和可用性的系統的一個例子。但是不滿足分區容忍性。如果這個rdbms當機了,使用者将無法通路資料。
一緻性和分區容忍性:一個rdbms叢集就是這樣的系統。分布式事務保證了所有使用者在同一時刻擷取到相同的資料(一緻性);資料的分布式存儲天然地保證在叢集部分節點故障的情況下,叢集系統仍然可用。可是,分布式事務在滿足系統一緻性的同時,也有副作用,導緻系統無法做到可用性,在兩階段送出事務執行期間,系統是不可用的。一緻性限制了系統可以支援的同時執行的事務數量,反過來也影響到了系統的可用性。
可用性和分區容忍性:本類别中這樣的系統常常被歸類為“最終一緻性”系統。考慮一下流行的電子商務網站,比如亞馬遜。假如你正在浏覽商品目錄,發現你需要的商品正好有貨。在購買流程中很自然就可以想到,在你發現所需的商品有貨并發起了購買請求這段時間内,其他人更早地進入并搶購了商品。是以有必要及時顯示最新庫存變化。庫存變化将會廣播到為使用者提供服務的叢集中的其他所有節點。為了給使用者提供庫存變化後的最新值,當商品庫存變化後的資料在各個節點的傳遞還沒有完成的時候,如果系統阻止了使用者的通路,就會使網站喪失可用性,進而影響交易量。為了系統可用性和分區容忍性而犧牲系統一緻性,我們選擇這個折中來使多個節點為使用者顯示相同的資料(在一個小的時間窗内,使用者看到的資料可能是不同的,這個時間窗的大小取決為使用者提供服務的那個節點)。
如何做出折中選擇,在大資料系統設計的時候是非常關鍵的。本書的主題mapreduce隻是大資料生态環境中的一個元件。它常常與其他類似hbase這樣的産品搭配使用,在選擇不同産品配合使用的時候,在本章講解的這些權衡中做出選擇,是解決方案是否可行的關鍵。