1. 程式人生 > >《Designing.Data-Intensive.Applications》筆記 四

《Designing.Data-Intensive.Applications》筆記 四

第九章 一致性與共識
分散式系統最重要的的抽象之一是共識(consensus):讓所有的節點對某件事達成一致。
最終一致性(eventual consistency)只提供較弱的保證,需要探索更高的一致性保證(stronger consistency)。
摘要:

  • start by looking at one of the strongest consistency models in common use,linearizability(線性一致性)。
  • then examine the issue of ordering events(事件順序) in a distributed system,particularly around causality(因果關係) and total ordering(全域性順序).
  • explore how to atomically commit a distributed transaction

Linearizability
非線性一致性案例:

全序
全序(total order)指允許任意兩個元素進行比較,如自然數集就是全序的。
而數學集合不是全序的,如{a,b}與{b,c}不能比較大小,稱為偏序。 線性一致性的系統中,操作是全序的;如果兩個事件有因果關係,則它們有序,如果是併發的,則它們的順序無法比較。這意味著因果關係定義了一個偏序。
因此線性一致性系統中,不存在併發操作。
線性一致性包含因果一致性。很多情況下,看上去需要線性一致性的系統,實際上只需要因果一致性,因果一致性可以更高效的實現。

蘭伯特時間戳(Lamport timestamps)

計數器值大者是更大的時間戳,如計數器值相同,節點ID越大,時間戳越大。
蘭伯特時間戳的關鍵思想:每個節點NODE、客戶端Client跟蹤迄今為止所見到的最大計數器值,並在每個請求中包含這個最大計數器值。當一個節點NODE收到的最大計數器值大於本身的計數器值,它立刻更新自己的計數器值。

全序廣播(total order broadcast)
通常被描述為節點間交換訊息的協議,要滿足兩個安全屬性:

  • 可靠交付(reliable delivery)
    沒有訊息丟失:如果訊息被傳到一個節點,它將被傳到所有節點
  • 全序交付(totally ordered delivery)
    訊息以相同的順序傳遞給每個節點

分散式事務與共識
共識是分散式計算中最重要也是最基本的問題之一。目標是讓幾個節點達成一致(get several nodes to agree on something)。

原子提交與二階段提交演算法(2PC,two-phase commit)
2PC的基本流程:

詳細過程:

可能出現協調者失效的問題:

相關推薦

Designing.Data-Intensive.Applications筆記

第九章 一致性與共識 分散式系統最重要的的抽象之一是共識(consensus):讓所有的節點對某件事達成一致。 最終一致性(eve

副本機制與副本同步------《Designing Data-Intensive Applications》讀書筆記6

一致性 不響應 rabbit 故障恢復 logs 啟動 markdown 分布式系統 觸發器 進入到第五章了,來到了分布式系統之中最核心與復雜的內容:副本與一致性。通常分布式系統會通過網絡連接的多臺機器上保存相同數據的副本,所以在本篇之中,我們來展開看看如何去管理和維護這

P2P結構與Quorum機制------《Designing Data-Intensive Applications》讀書筆記8

服務器 遠的 數據系統 接收 圖片 次數 小結 概念 覆蓋 前文涉及到了很多與Leader相關的算法,大家有木有想過,王侯將相,寧有種乎,既然Leader這麽麻煩,幹脆還是采用P2P模型吧,來個大家平等的架構。本篇需要和大家探討的就是多副本下實現民主政治的Quorum機制

數據分區------《Designing Data-Intensive Applications》讀書筆記9

zookeep 組件 搜索 介紹 程序 cas 只有一個 核心技術 熱點 進入到第六章了,我們要開始聊聊分布式系統之中的核心問題:數據分區。分布式系統通常是通過大規模的數據節點來處理單機沒有辦法處理的海量數據集,因此,可以將一個大型數據集可以分布在多個磁盤上,查詢負載可以

事務與隔離級別------《Designing Data-Intensive Applications》讀書筆記10

串行化 clas block atomic 硬件故障 nsis 特性 筆記 額外 和數據庫打交道的程序員繞不開的話題就是:事務,作為一個簡化訪問數據庫的應用程序的編程模型。通過使用事務,應用程序可以忽略某些潛在的錯誤場景和並發問題,由數據庫負責處理它們。而並非每個應用程序

分布式系統的煩惱------《Designing Data-Intensive Applications》讀書筆記11

而不是 例如 有一個 客戶端 每天 不可 解決 通信 由於 使用分布式系統與在單機系統中處理問題有很大的區別,分布式系統帶來了更大的處理能力和存儲容量之後,也帶來了很多新的"煩惱"。在這一篇之中,我們將看看分布式系統帶給我們新的挑戰。 1.故障 當我們在使用單機系統時,

線性一致性與全序廣播------《Designing Data-Intensive Applications》讀書筆記12

拷貝 原理 隔離 來看 這樣的 失效 一個 syn 分布式系 上一篇聊了聊構建分布式系統所面臨的困難,這篇將著重討論構建容錯分布式系統的算法與協議。構建容錯系統的最佳方法是使用通用抽象,允許應用程序忽略分布式系統中的一些問題。本篇我們先聊一聊線性一致性,以及與線性一致性有

分布式系統的一致性算法------《Designing Data-Intensive Applications》讀書筆記13

基礎 我們 時序 中間 服務器 可能 對象 可用性 有用 一致性算法是分布式系統中最重要的問題之一。表面上看,這似乎很簡單,只是讓幾個節點在某些方面達成一致。在本篇之中,會帶大家完整的梳理分布式系統之中的共識算法,來更加深刻的理解分布式系統的設計。 1.原子提交和兩階段

MapReduce與批處理------《Designing Data-Intensive Applications》讀書筆記14

利用 目的 專業 構建 創建 實現邏輯 內容 sign 傳統 之前的文章大量的內容在和大家探討分布式存儲,接下來的章節進入了分布式計算領域。坦白說,個人之前專業的重心側重於存儲,對許多計算的內容理解可能不是和確切,如果文章中的理解有所不妥,願虛心賜教。本篇將和大家聊一聊分

Designing.Data-Intensive.Applications筆記

程式通常(至少)使用兩種形式的資料: 1.記憶體中,資料儲存在物件、結構體、列表、陣列、雜湊表、樹等中。這些資料 結構針對CP

Designing.Data-Intensive.Applications筆記

Two-Phase Locking(兩階段鎖定,2PL) 2PL與2PC是完全不同(兩階段提交)的概念。 事務A讀取了一個物件,

Designing.Data-Intensive.Applications筆記

Partitioning(分割槽) 對於非常大的資料集,或非常高的吞吐量,僅複製是不夠的:我們需要將資料進行分割槽(partit

如何輸出格式化的字符串(學習筆記

linux python 格式化整數 浮點數 如何輸出格式化的字符串(學習筆記四)我們經常會輸出類似 ‘親愛的xxx你好!你xx月的話費是xx,余額是xx‘ 之類的字符串,而xxx的內容都是根據變量變化的,所以,需要一種簡便的格式化字符串的方式。在Python中,采用的格式化方式和C語言是一致的,

cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記)

source ron 文件 亂碼問題 resource -s type fileutil ani 今天寫程序的時候發現輸出文字亂碼,盡管在實際開發中把字符串寫在代碼裏是不好的做法。可是有時候也是為了方便,遇到此問題第一時間在腦子裏面聯想到android下的strings

【Unity 3D】學習筆記十二:粒子特效

空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s

Tomcat學習筆記()

客服 list illegal state oid () ons mov tom Servlet容器部分 servlet容器用來處理請求servlet資源,並為web客服端填充response對象模塊,在tomcat中,共有4種類型的容器,分別是:Engi

JavaWeb學習筆記 request&response

cer 代碼 gbk msi 抓包工具 rom service net war HttpServletResponse 我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響

Swift 筆記 () —— 集合類型

move 變量 accep 混雜 isempty style nim 推斷 集合類 集合類型 Swift 提供了兩種集合類型, Array, Dictionary Array與Dictionary 都須要存同樣類型的數據 //實際測試的時候發現能夠混雜類型,以

hibernate筆記()

元素 有用 tro getc 如何 cond 屬性 war factor 目標: 一、hibernate查詢 二、hibernate對連接池的支持 三、二級緩存 一、hibernate查詢 1. 查詢概述 1) Get/load主鍵查詢 2) 對象導航查詢

java 核心學習筆記() 單例類

com null tools 初始化 equal inf div 特殊 對象 如果一個類始終只能創建一個實例,那麽這個類被稱作單例類。 一些特殊的應用場景可能會用到,為了保證只能創建一個實例,需要將構造方法用private修飾,不允許在類之外的其它地方創建類的實例。 又要保