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

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

Two-Phase Locking(兩階段鎖定,2PL)
2PL與2PC是完全不同(兩階段提交)的概念。

  • 事務A讀取了一個物件,事務B想寫入該物件,必須等A提交或中止才能繼續。(確保B不能在A底下意外的改變物件)
  • 事務A寫入了一個物件,事務B想讀取該物件,必須等A提交或中止才能繼續。

2PL與快照隔離的關鍵區別:2PL寫入會阻塞其他的寫入與讀,反之亦然;快照隔離讀不阻塞寫,寫不阻塞讀。
讀、寫的阻塞是通過為資料庫中每個物件新增鎖實現。鎖有共享模式(shared mode)、獨佔模式(exclusive mode)。使用如下:

  • 若事務要讀取物件,須先以共享模式獲取鎖。允許多個事務同時持有共享鎖,但如另一事務已在物件持有獨佔鎖,則這些事務必須等待
  • 若事務要寫入物件,須先獲取物件的獨佔鎖,如果物件已有任何鎖,該事務必須等待
  • 如事務先獲取再寫入物件,則它可能將共享鎖升級為獨佔鎖。
  • 事務獲得鎖後,必須持有鎖直到事務結束(提交或中止)。此即為"兩階段"名字的來源:第一階段(事務執行時)獲取鎖;第二階段(事務結束時)釋放鎖。

兩階段鎖定的巨大缺點是效能問題。因為一個事務需要等待另一個事務。

Predicate locks(謂詞鎖)
會議室例子中的幻讀(phantoms)問題,即一個事務改變另一個事務的搜尋結果:一個事務在某個時間視窗搜尋了一個房間的現有預定,則另一個事務不能同時插入或更新同一時間視窗同一房間的另一個預定。
通過謂詞鎖實現上述要求:

Serializable Snapshot Isolation(序列化快照隔離,SSI)
似乎序列化的隔離級別和高效能從根本上是矛盾的,SSI演算法提供一種解決方案:提供完整的可序列化隔離級別,但與快照隔離相比只有很小的效能損失。SSI於2008年首次提出。


第八章 分散式系統的麻煩
分散式系統中,儘管系統的其他部分工作正常,但系統的某些部分可能會以某種不可預知的方式被破壞。這被稱為部分失效(partial failure)。難點在於部分失效是不確定性的。這種不確定性,使得分散式系統難以工作!
網際網路和資料中心(通常是乙太網)中的大多數內部網路都是非同步分組網路(asynchronous packet networks)。在這種網路中,一個節點向另一個節點發送的訊息(一個數據包),不能保證到達時間,或者是否到達。如果傳送請求並期待響應,則很多事情會出錯:

  1. 請求已丟失(可能有人拔掉了網線)
  2. 請求在排隊,稍後交付(網路或收件人超載)
  3. 遠端節點已失效(崩潰或關機)
  4. 遠端節點暫時停止響應(可能遇到長時間的垃圾回收暫停)
  5. 遠端節點已處理請求,但網路上的響應已丟失(可能是網路交換機配置錯誤)
  6. 遠端節點已處理請求,但是響應被延遲(可能是網路或自己的機器過載)


如果網路故障的錯誤處理沒有被軟體定義與測試,則會發生各種意想不到的錯誤。
網路擁塞和排隊

  • 如多個不同的節點同時嘗試將資料包傳送到同一目的地,則網路交換機必須將它們排隊逐個送入目標網路鏈路。
  • 資料包到達目標機器,如果所有CPU繁忙,則請求被作業系統排隊
  • TCP執行流量控制(flow control),其中節點限制自己的傳送速率以避免網路鏈路或接收節點過載。這意味著在資料甚至進入網路之前,傳送者處需要進行額外的排隊。

不可靠的時鐘
分散式系統中,時間是一件棘手的事情,因為通訊不是即時的:訊息通過網路從一臺機器傳送到另一臺需要時間。
而且,網路上的每臺機器都有自己的時鐘,這是一個實際的硬體裝置:通常是石英晶體振盪器。可以在一定程度同步時鐘:最常用的機制是網路時間協議(NTP)。伺服器則從更精準的時間源(如GPS接收機)獲取時間。
單調鍾與時鐘
時鐘:根據某個日曆返回當前日期和時間,如Java中的System.currentTimeMillis()返回epoch(1970年1月1日 午夜 UTC,格里高利曆)以來的秒數(或毫秒)。
單調鍾:用於測試持續時間(時間間隔)。如Java中的System.nanoTime()。
你可以在某個時間點檢查單調鐘的值,做一些事情,且稍後再次檢查它。這兩個值之間的差異告訴你兩次檢查之間經過了多長時間。但單調鐘的絕對值是毫無意義的:它可能是計算機 啟動以來的納秒數,或類似的任意值。特別是比較來自兩臺不同計算機的單調鐘的值是沒有 意義的,因為它們並不是一回事。
有序事件的時間戳
如果依賴時鐘,在多節點上對事件進行排序,誰先到達?誰後到達?

儘管如此,節點2接收到這兩個事件時,會錯誤的認為x = 1是最近的值,而丟棄x = 2。效果上,client B的增量操作會消失。
在多領導者複製與無領導者複製資料庫中,廣泛使用這種解決策略(last write win,LWW,最後寫入為準)。
暫停程序
Is it crazy to assume that a thread might be paused for so long?Unfortunately not.There are various reasons why this could happen:

  • 許多程式語言(如Java虛擬機器)都有垃圾收集器(GC),偶爾需要停止所有執行中的程序(stop-the-world)
  • 虛擬化環境中,可以掛起(suspend)虛擬機器(暫停執行所有程序並將記憶體內容儲存到磁碟)並恢復(恢復記憶體內容並繼續執行)
  • 在終端使用者裝置(如膝上型電腦)上,執行也可能被暫停並隨意恢復,如使用者關閉筆記本蓋子
  • 作業系統切換到另一個執行緒時,當前執行的執行緒可在程式碼的任意處暫停
  • 如應用程式執行同步磁碟訪問,則執行緒可能暫停

領導者與鎖定
通常情況下,一些東西在一個系統中只能有一個,例如:

  • 資料庫分割槽的領導者只能有一個節點(避免腦裂,split brain)
  • 特定資源的鎖或物件只允許一個事務/客戶端持有,以防同時寫入和損壞
  • 一個特定的使用者名稱只能被一個使用者所註冊

分散式系統中實現這一點需要注意:即使一個節點認為它是the choosen one(分割槽負責人、鎖持有者),但這不一定意味著有法定人數的節點同意!一個節點可能一年是領導者,但是如果其他節點在此期間宣佈它死亡(如網路中斷或GC暫停),則它可能已被降級,另一個領導者已被當選。

相關推薦

Designing.Data-Intensive.Applications筆記

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

副本機制與副本同步------《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筆記

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

Designing.Data-Intensive.Applications筆記

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

《python for data analysis》筆記--Numpy基礎:arrays和向量化計算2

繼續Numpy基礎... 1. Fancy Indexing 指的是用一個整數array來當做index下標,比如:arr[[4,3,0,6]] ,中間的那個array就是一個fancy indexing形式。也可以是負數形式,如arr[[-3,-5,-7]]; 當傳進的引

Linux學習筆記():系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

【Unity 3D】學習筆記十:遊戲元素——遊戲地形

nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一

基礎滲透測試筆記

ear burpsuit dede ble 單個 數據庫 root 顯示 log sqlmap -u "http://www.vuln.cn/post.php?id=1" 默認使用level1檢測全部數據庫類型 sqlmap -u "http://www.vuln.cn/p

Android筆記十三.BroadcastReceiver使用

mod 調用 raw ras ive ceo () 廣泛 全部 廣播是一種廣泛運用在應用程序之間傳輸信息的機制,而BroadcastReceiver是對發送出來的廣播進行過濾接收並響應的一類組件。BroadcastReceiver本質上是一種全局監聽器。用於監聽

MYSQL學習筆記:日期和時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM

Hadoop權威指南學習筆記

支持 第三方 handle line src factory 模式 多個 重要 HDFS簡單介紹 聲明:本文是本人基於Hadoop權威指南學習的一些個人理解和筆記,僅供學習參考。有什麽不到之處還望指出,一起學習一起進步。 轉載請註明:http://blog.cs

NLTK學習筆記():NLTK的一些工具

ast 關註 code 值範圍 通過 自動 ive 叠代器 emma 主要總結一下簡單的工具:條件頻率分布、正則表達式、詞幹提取器和歸並器。 條件分布頻率 《自然語言學習》很多地方都用到了條件分布頻率,nltk提供了兩種常用的接口:FreqDist 和 Condit