讀資料工程之道:設計和構建健壯的資料系統18資料儲存系統(上)

躺柒發表於2024-10-24

1. 單機儲存和分散式儲存

1.1. 儲存系統是存在於原材料之上的抽象層次

1.2. 磁碟是一種原始儲存材料,而主要的雲物件儲存平臺和HDFS是利用磁碟的儲存系統

1.3. 隨著資料儲存和訪問模式變得越來越複雜,並超出了單一伺服器能做到的支援,將資料分佈到一個以上的伺服器上變得很有必要

1.4. 資料可以被儲存在多個伺服器上,被稱為分散式儲存

  • 1.4.1. 一個分散式系統,其目的是以分佈的方式儲存資料

1.5. 分散式儲存協調多個伺服器的活動,以更快的速度和更大的規模儲存、檢索和處理資料,同時在一個伺服器不可用的情況下提供冗餘備份

2. 最終一致性和強一致性

2.1. 在分散式資料庫中,往往存在著獲取當前資料和獲取“差不多“是當前資料的平衡

2.2. BASE

  • 2.2.1. 基本可用(Basically Available)

  • 2.2.1.1. 不保證一致性

  • 2.2.1.2. 資料庫的讀寫是在盡力而為的基礎上進行的

  • 2.2.1.3. 意味著大多數時候都是一致的資料

  • 2.2.2. 軟狀態(Soft-state)

  • 2.2.2.1. 事務的狀態是模糊的

  • 2.2.2.2. 不確定該事務是已提交還是未提交的

  • 2.2.3. 最終一致性(Eventual consistency)

  • 2.2.3.1. 在某些時候,讀取資料會返回一致的值

  • 2.2.4. BASE是最終一致性的基礎

2.3. 如果你想橫向擴充套件(跨越多個節點)來處理大量的資料,那麼最終一致性往往是你要付出的代價

  • 2.3.1. 最終一致性允許你快速檢索資料,而不需要驗證你在所有節點上是否有最新的版本

2.4. 有了強一致性,分散式資料庫就能確保寫到任何節點的資料都是首先共同分發的,而且對資料庫的任何讀取都能返回一致的值

  • 2.4.1. 當你可以容忍更高的查詢延遲,並要求每次從資料庫讀取正確的資料時,你會使用強一致性

2.5. 決定一致性的選擇

  • 2.5.1. 資料庫技術本身為某種程度的一致性奠定了基礎

  • 2.5.2. 資料庫的配置引數會對一致性產生影響

  • 2.5.3. 資料庫通常在單個查詢層面支援一些一致性配置

  • 2.5.3.1. DynamoDB支援最終一致性讀取和強一致性讀取

>  2.5.3.1.1. 強一致性讀取速度較慢,消耗的資源較多,所以最好少用,但在需要一致性的時候可以使用
  • 2.5.4. 既是一個技術問題,也是一個組織問題

3. 檔案儲存

3.1. 一個檔案是一個具有特定的讀、寫和引用特性的資料實體,由軟體和作業系統使用

  • 3.1.1. 物件儲存的行為很像檔案儲存,但有關鍵的區別

  • 3.1.1.1. 物件儲存中的物件只支援第一個特性,即有限長度,但仍然非常有用

  • 3.1.2. 檔案儲存系統將檔案組織成一個目錄樹

  • 3.1.3. 檔案系統將每個目錄作為其包含的檔案和目錄的後設資料來儲存

  • 3.1.4. 後設資料包括每個實體的名稱、相關的許可權細節和一個指向實際實體的指標

  • 3.1.5. 為了在磁碟上找到一個檔案,作業系統會檢視每個層次的後設資料,並跟蹤指向下一個子目錄實體的指標,直到最後到達檔案本身

3.2. 特徵

  • 3.2.1. 有限長度

  • 3.2.1.1. 一個檔案是一個有限長度的位元組流

  • 3.2.2. 追加操作

  • 3.2.2.1. 在主機儲存系統的限制範圍內向檔案追加位元組

  • 3.2.3. 隨機訪問

  • 3.2.3.1. 可以從檔案中的任何位置讀取,或向任何位置寫入更新

3.3. 當檔案儲存正規化對資料管道來說非常重要時,要小心處理其狀態,儘量使用短暫的環境

  • 3.3.1. 儘量將手動的、低階別的檔案處理保留給一次性的獲取步驟或管道開發的探索階段

3.4. 本地磁碟儲存

  • 3.4.1. 作業系統管理的檔案系統,底層是固態硬碟或磁碟的本地磁碟分割槽

  • 3.4.2. 新技術檔案系統(New Technology File System,NTFS)和ext4分別是Windows和Linux上流行的檔案系統

  • 3.4.3. 檔案系統的設計是為了在寫入過程中發生斷電時容易恢復,否則任何未寫入的資料都會丟失

  • 3.4.4. 本地檔案系統通常支援完全的寫後讀取一致

  • 3.4.4.1. 寫後立即讀取將返回所寫資料

  • 3.4.4.2. 作業系統還採用各種鎖定策略來管理對一個檔案的併發寫入嘗試

3.5. 網路附屬儲存

  • 3.5.1. 網路附屬儲存(Network-Attached Storage,NAS)系統透過網路為客戶提供一個檔案儲存系統

  • 3.5.2. NAS是一種普遍的伺服器解決方案,它們通常帶有內建的專用NAS介面硬體

  • 3.5.3. 儲存虛擬化也有很大的優勢,包括冗餘備份、可靠性、對資源的精細控制、為大型虛擬卷在多個磁碟上建立儲存池,以及在多臺機器上共享檔案

  • 3.5.4. 替代方案是儲存區域網路(Storage Area Network,SAN),但SAN系統提供塊級訪問,而沒有檔案系統的抽象

3.6. 雲檔案系統服務

  • 3.6.1. 雲檔案系統服務提供一個完全託管的檔案系統,用於多個雲虛擬機器和應用程式,可能包括雲環境之外的客戶端

  • 3.6.2. 雲檔案系統不應該與連線到虛擬機器的標準儲存(一般來說,是由虛擬機器作業系統管理的帶有檔案系統的塊儲存)相混淆

  • 3.6.3. 雲檔案系統的行為很像NAS解決方案,但網路、管理磁碟叢集、故障和配置的細節完全由雲供應商處理

  • 3.6.4. 亞馬遜彈性檔案系統(Elastic File System,EFS)

  • 3.6.4.1. 儲存是透過NFS 4協議公開的,NAS系統也使用這種協議

  • 3.6.4.2. EFS提供自動擴充套件和按儲存量付費的定價,不需要高階儲存預訂

4. 塊儲存

4.1. 從根本上說,塊儲存是由固態硬碟和磁碟提供的原始儲存型別

4.2. 在雲中,虛擬化的塊儲存是虛擬機器的標準

  • 4.2.1. 塊儲存的抽象允許對儲存的大小、可擴充套件性和資料的永續性進行精細的控制,這超過了原始磁碟所提供的

  • 4.2.2. 塊儲存仍然是雲虛擬機器上作業系統啟動磁碟的預設選項

4.3. 一個塊是磁碟支援的最小的可定址資料單位

  • 4.3.1. 在舊的磁碟上,這通常是512位元組的可用資料,但目前大多數的磁碟已經增長到4096位元組,使得寫入的精細程度降低,但大大減少了管理塊的開銷

  • 4.3.2. 塊通常還包含用於錯誤檢測/糾正和其他後設資料的額外儲存位

4.4. 固態硬碟上的塊之間可能會出現尋道時間,但這與磁碟軌道的尋道時間相比,是微不足道的

4.5. 塊儲存應用程式

  • 4.5.1. 事務資料庫系統通常在塊級訪問磁碟,以佈局資料獲得最佳效能

  • 4.5.2. 對於面向行的資料庫來說,這最初意味著資料行是作為連續的資料流寫入的

  • 4.5.3. 塊裝置的格式化與直接在物理磁碟上的格式化很相似,但儲存通常是虛擬化的

4.6. RAID

  • 4.6.1. RAID是獨立磁碟冗餘陣列

  • 4.6.2. RAID同時控制多個磁碟,以提高資料的耐久性、增強效能,並結合多個驅動器的容量

  • 4.6.3. 一個陣列在作業系統中可以顯示為一個單一的塊裝置

4.7. 儲存區域網路

  • 4.7.1. 儲存區域網路系統透過網路提供虛擬化的塊儲存裝置,通常來自一個儲存池

  • 4.7.2. SAN的抽象可以允許細粒度的儲存擴充套件,並提高效能、可用性和耐久性

4.8. 雲虛擬化塊儲存

  • 4.8.1. 雲虛擬化塊儲存解決方案與SAN類似,但云使工程師無須處理SAN叢集和網路細節

  • 4.8.2. 亞馬遜彈性塊儲存(Elastic Block Store,EBS)

  • 4.8.2.1. EBS的效能指標是以IOPS和吞吐量(傳輸速度)給出的

  • 4.8.2.2. 效能較高的EBS儲存層由固態硬碟支援,而由磁碟支援的儲存層提供較低的IOPS,但每GB的成本較低

4.9. 本地例項卷

  • 4.9.1. 雲提供商還提供了物理連線到執行虛擬機器的主機伺服器上的塊儲存卷

  • 4.9.2. 儲存卷的成本通常很低(例如亞馬遜EC2例項儲存,其費用包含在虛擬機器的價格中)並提供低延遲和高IOPS

  • 4.9.3. 例項儲存卷的行為本質上就像一個物理連線到資料中心的伺服器上的磁碟

  • 4.9.3.1. 一個關鍵的區別是,當一個虛擬機器關閉或被刪除時,本地連線的磁碟的內容就會丟失,無論這個事件是否由使用者有意的行為引起

  • 4.9.3.2. 新的虛擬機器不能讀取屬於不同客戶的磁碟內容

  • 4.9.4. 本地連線的磁碟不支援EBS等虛擬化儲存服務所提供的高階虛擬化功能

  • 4.9.4.1. 本地連線的磁碟沒有被複制,所以即使主機虛擬機器繼續執行,物理磁碟故障也會丟失或損壞資料

相關文章