雲快照的2種存儲機制
- 2019 年 11 月 28 日
- 筆記
雲計算是龐大的IT技術的結合,例如我們經常在雲主機ECS中使用的快照功能,仔細研究起來,每一個功能實現都沉澱著「攻城獅的智慧」。今天我們來看一下雲快照的兩種不同實現機制。
一、首先什麼是雲快照
當我們在為windows打修補程式擔心系統無法啟動、當我們進行系統滲透性測試等場景時,希望為當前的雲主機的數據進行保存,當需要時我們可以快速回退到當時的雲快照點。雲快照就像我們年輕時的照片,當你拿起當年的照片,能想起以前的故事。

二、雲快照的兩種不同實現方式
2.1 ROW (redirect on write)
當你在雲服務商的控制台點擊生成快照按鈕後,雲控制台將用戶的原數據盤內容封存起來,再新增一塊新的磁碟作為寫快照盤。如下圖,當生成了快照1後,雲主機將新的修改增量數據(差量數據)直接寫入到快照1,而讀操作直接從主磁碟中讀取。如果用戶需要返回最初的數據,直接將寫操作指令指回主磁碟即可。

如果以後再生成了快照2,則雲主機將新的修改增量數據直接寫入快照2中。快照1-快照2稱為快照鏈,每一個快照只保存相對上一個快照的增量修改數據。如果用戶需要返回上一步的數據,直接將寫操作指令指回快照1即可。

每一個快照保存的數據是相當於上一個快照的差量數據。如果刪除了快照1,雲控制台將自動將快照1的數據添加到快照2,保障即使刪除了快照鏈的數據,也不會影響數據的恢復。
該快照鏈特徵導致了一個問題,就是如果一共做了 10 次快照,那麼在恢復到最新的快照點時,則需要通過合併 10 個快照捲來得到一個完整的最新快照點數據。
2.2 COW (copy on write)
COW的模式更趨近於最初認識雲快照人員的認識,即,主磁碟中永遠保留最新數據,所有的讀寫操作均指向主磁碟;而當主磁碟中的數據有修改時,首先將主磁碟中的舊數據copy至快照1中,再將新數據寫入主磁碟中。

當需要恢復至最初的數據狀態時,則將快照1中的舊數據指針指回主磁碟中,即可完成快照數據的恢復。
COW 在創建快照時,並不會發生物理的數據拷貝動作,僅是拷貝了原始數據所在的源數據塊的物理位置元數據。因此,COW 快照創建非常快,可以瞬間完成。COW 有一個很明顯的缺點,就是會降低源數據卷的寫性能,因為每次改寫新數據,實際上都進行了兩次寫操作。
三、ROW、COW的應用場景分析
從上面的分析,我可以看到,COW存數據將發生兩次寫操作,而ROW僅有一次寫操作;但另一方面,在讀數據時,COW只有一次操作,而ROW將進行快照鏈的指針計算,才能從多塊磁碟中找到最新的數據。
在分散式存儲+塊存儲的大趨勢下,ROW是未來的快照存儲主要趨勢。原因如下:分散式場景下,數據是分開存儲,數據越是分散,系統性能越高。而 ROW 把源數據卷中的原始數據打散之後,對性能反而有好處。
四、快照與備份的區別
1、備份的安全性更好。如果原始數據損壞(例如物理介質損壞,或者繞開了快照所在層的管理機制對鎖定數據進行了改寫),快照回滾是無法恢復出正確的數據的,而備份可以。
2、快照的速度更快。生成快照的速度比備份速度快的多,因為快照僅生成了一個空白的空間,僅有新數據寫入時才會在快照中寫數據。而備份一般會生成一份全量數據,因此一般只會在夜間業務量少時進行備份操作。
3、佔用的存儲空間不同。備份會佔用雙倍的存儲空間,而快照所佔用的存儲空間則取決於快照的數量以及數據變動情況。極端情況下,快照可能會只佔用1%不到的存儲空間,也可能會佔用數十倍的存儲空間。

