永續性儲存: 容器時代的長時記憶

永續性儲存: 容器時代的長時記憶

永續性儲存是指以非易失性的方式保留資料,這樣即使在裝置或應用程式關閉或重新啟動後,資料仍然可用。資料的儲存和檢索允許網路應用儲存使用者資訊和狀態並可靠地執行。

在單體應用中,儲存訪問是直接的,因為伺服器和儲存是住在一起的。然而,地理上的分散式系統使訪問變得更加複雜,因為儲存系統必須保持對全球所有元件可用。

容器化使問題進一步複雜化,因為容器是輕量級的、無狀態的和短暫的–不適合儲存資料的特性。因此,任何永續性儲存解決方案必須能夠與容器無縫工作,這又增加了一層複雜性。

本文通過探索永續性儲存的型別、架構和使用案例,深入研究了永續性儲存。它還提供了一個實踐演示,說明Docker中卷儲存和持久化卷儲存之間的區別。

  1. 永續性儲存的型別
  2. 永續性儲存架構
  3. 容器中的永續性儲存
  4. 容器永續性儲存演示

永續性儲存的型別

非易失性儲存有幾種型別,包括傳統的旋轉磁碟(硬碟驅動器或HDD)、固態驅動器(SSD)、網路附加儲存(NAS)和儲存區域網路(SAN)。

  • HDDs是電子機械資料儲存裝置,使用磁介質的旋轉磁碟儲存和檢索數字資料。這些磁碟在可移動的致動臂上使用磁頭來讀取和寫入資料。
  • SSDs,有時也被稱為半導體儲存裝置、固態裝置或固態磁碟,使用積體電路元件來持久地儲存資料,通常使用不含移動部件的互連快閃記憶體裝置。它們的靜止性質使它們比HDD更快、更可靠。
  • Network-attached storage(網路連線儲存)是一組HDD、SSD或兩者,通過本地網路連線,使用新技術檔案系統(NTFS)或第四擴充套件檔案系統(EXT4)等檔案系統。
  • SANs是聯網的高速、塊級儲存裝置,如磁帶庫或磁碟陣列。它們的連線在作業系統看來是本地儲存,不能通過區域網(LAN)訪問。

永續性儲存架構

永續性儲存有三種方法,每種方法都有獨特的使用情況和限制。

物件持久化架構

物件持久化架構方法使用物件關係對映(ORM),將資料作為物件儲存在關聯式資料庫或鍵值資料庫中。當資料沒有定義模式時,這種方法很有用,因為ORM處理其儲存和檢索。

塊持久化架構

塊持久化架構使用塊級儲存裝置,在儲存大檔案時很有用。這種方法在儲存大量資料時很有好處,因為你可以使用多個塊來增加儲存容量。

檔案儲存持久化架構

顧名思義,檔案儲存永續性架構方法使用檔案系統來儲存資料。一種方法是使用資料庫伺服器,它提供了一種集中的資料儲存方式。像Kinsta的雲主機解決方案使用資料庫伺服器,它很容易連線到應用程式並提供永續性。

檔案儲存的永續性架構在需要頻繁檢索檔案的應用中很有幫助,而且當你需要一個介面來管理它們時。

永續性儲存用例

本節討論了每種儲存型別的一些使用案例。

物件永續性儲存

  • 雲端儲存: 物件永續性儲存通常用於雲端儲存解決方案,以儲存和檢索大量的非結構化資料,如影象、視訊和檔案。雲提供商使用物件儲存為客戶提供可擴充套件、高可用和持久的儲存服務。
  • 大資料分析: 物件持久儲存被用於大資料分析,以儲存和管理經常用於資料分析、機器學習和人工智慧的大型資料集。物件儲存允許快速有效地訪問資料,使其成為大資料架構的關鍵組成部分。
  • 內容交付網路: 物件永續性儲存用於內容交付網路(CDN),在全球伺服器網路上儲存和分發內容,如影象、視訊和靜態檔案。物件儲存允許CDN向全世界的使用者提供高速內容,而不受地點限制。

塊永續性儲存

  • 高效能運算(HPC): HPC環境快速有效地處理大量的資料。塊狀永續性儲存允許HPC叢集儲存和檢索大型資料集,如科學模擬、天氣建模和金融分析。塊儲存通常是HPC的首選,因為它提供高效能、低延遲的資料訪問,並允許並行輸入/輸出(I/O)操作,這可以大大改善處理時間。
  • 視訊編輯: 視訊編輯應用需要對大型視訊檔案進行高效能和低延遲的訪問。他們還必須適應每秒大量的I/O操作和低延遲,以實時渲染和編輯視訊檔案。塊儲存提供這些功能,使其成為視訊編輯工作流程的理想解決方案。
  • 遊戲: 遊戲應用也需要高效能和低延遲來訪問遊戲資產和玩家資料。塊儲存可以快速儲存和檢索大量資料,確保遊戲環境迅速載入並在遊戲過程中保持響應。

檔案儲存永續性儲存

  • 媒體和娛樂: 視訊編輯、動畫和渲染應用通常使用永續性儲存。這些應用需要高效能和低延遲地訪問大型媒體檔案,如視訊、音訊和影象。Filestore提供了一個可以被多個客戶端訪問的共享檔案系統,使其成為這些應用的理想儲存解決方案。
  • 網路內容管理: 網路內容管理系統(CMS)在共享檔案系統中使用filestore永續性儲存,以儲存和管理網站內容,如文字、影象和多媒體檔案。Filestore為網站內容提供了一箇中心位置,使管理和更新網站內容更加容易。它還使多個使用者能夠同時處理相同的內容,提高協作和生產力。

容器中的永續性儲存

容器是輕量級的、可移植的、安全的和直接的,提供了不同應用程式之間的融合。它們必須有一種機制,在容器重啟和移除之間持續儲存資料。容器有檔案儲存或像傳統應用程式一樣的檔案系統,但每當你用新的變化重建它們時,你會失去所有非永續性的資料。

這就是為什麼容器提供了包括卷儲存或掛載儲存卷的選項。容器將儲存卷視為一個目錄。任何寫入卷的資料都會進入主機檔案系統。

容器的持久化儲存必須以這種方式工作,因為重新啟動容器會建立一個新的例項,並丟棄舊的例項。如果一個容器沒有一個一致的資料檢視,當容器重新啟動時,資料就會消失。一個儲存卷可以跨會話和容器重啟來儲存資料,使容器即使被移動或重啟也能保持其狀態。

卷與持久化卷

容器提供了2種儲存永續性資料的方法:使用卷和永續性卷。它們之間存在著顯著的區別。容器管理著卷儲存中的資料。當你停止一個容器時,資料仍然存在,並且在你重新啟動容器時是可用的。然而,當你刪除或移除一個容器時,資料會丟失,因為你也刪除了底層卷儲存。

持久卷儲存或繫結掛載是一種將資料儲存在容器的檔案系統之外的方式。這樣一來,即使你刪除了容器,資料也不會丟失。它是持久的,直到手動刪除。

下面的章節用例子演示了這兩種卷的型別。

容器持久化儲存演示

我們已經建立了一個小型的網路應用程式來演示Docker容器的持久化儲存。你可以通過安裝Docker和從這個GitHub倉庫抓取程式碼來跟隨。

該應用程式是一個基本的表單,有兩個欄位供使用者輸入:

  • Title
  • Document Text

演示應用程式的GUI

演示應用程式的GUI,有TitleDocument Text欄位。

一旦你儲存了使用者的輸入,你就可以通過開啟feedback目錄中的檔案來訪問它,檔案的名稱在Title欄位中提供。Document Text欄位的輸入是檔案的內容。

如何使用大容量儲存

一旦你在自己的機器上安裝了該應用程式,它就可以使用Dockerfile中顯示的卷儲存。

Docker檔案顯示了卷儲存的使用

Docker檔案顯示了卷儲存的使用。

現在,你構建映象並執行容器。要做到這一點,執行以下命令。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker build -t feedback-node:volumes .
docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
docker build -t feedback-node:volumes .
docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

用卷儲存構建應用程式

用卷儲存構建應用程式。

管理卷儲存

執行該容器顯示它正在管理卷儲存。

一旦應用程式執行,導航到localhost:3000來提交反饋。

提交對應用程式的反饋

提交對應用程式的反饋。

點選 “Save“,並導航到localhost:3000/feedback/test.txt,看看輸入是否被成功儲存。

反饋得到確認

成功的反饋得到確認。

移除並重啟容器,看看輸入是否持續存在。

docker stop feedback-app
docker start feedback-app

如果你現在訪問同一個網址,你會發現反饋仍然在那裡。但是,如果你刪除容器並重新啟動它會發生什麼?

docker stop feedback-app
docker rm feedback-app
docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

一旦重新啟動,如果你返回到那個URL,它就不再存在了,因為資料在你刪除容器時已經丟失了。卷資料只在停止容器時持續存在,而不是在移除容器時持續存在。

反饋資料已經丟失

反饋資料已經丟失。

為了緩解這個問題,即使你刪除了容器,也要堅持資料,你必須使用永續性卷儲存或命名儲存。首先,你應該清理容器和映象。

docker stop feedback-app
docker rm feedback-app
docker rmi feedback-node:volumes

如何使用永續性卷儲存

在測試之前,你必須從Dockerfile中刪除VOLUME屬性並重建映象。

刪除了VOLUME屬性

更新了Dockerfile,刪除了VOLUME屬性。

docker build -t feedback-node:volumes .
docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

正如你所看到的,在第二條命令中,你使用 -v 標誌來定義容器外的持久化卷,即使你移除容器,它也會持續存在。

像上一步一樣,嘗試新增反饋,一旦你停止、移除和重啟容器,就可以訪問它。

新增新的反饋

為一個永續性測試新增新的反饋。

docker stop feedback-app
docker rm feedback-app
docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

正如你所看到的,即使在停止和移除容器之後,資料仍然可以被訪問,並且保持不變。

資料仍然存在

在停止和移除容器後,資料仍然存在。

小結

永續性儲存對於容器化應用來說至關重要,因為它可以在容器的生命週期之外持久儲存資料。容器化應用的2種主要永續性儲存是卷和繫結掛載,每一種都有其好處和用例。

卷儲存在容器的檔案系統中,而繫結掛載可以在主機上直接訪問。

永續性儲存使資料可以在容器之間共享,從而使建立複雜的多層應用成為可能。永續性儲存對於確保容器化應用的穩定性和連續性至關重要,它提供了一種可靠和靈活的方式來儲存關鍵資料。

評論留言