快照是什么?揭秘存储快照的实现
歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~
本文由許登博 發(fā)表于云+社區(qū)專欄
原創(chuàng)聲明:本文首發(fā)騰訊云·云+社區(qū),未經(jīng)允許,不得轉(zhuǎn)載
前言
存儲(chǔ)網(wǎng)絡(luò)行業(yè)協(xié)會(huì)SNIA(StorageNetworking Industry Association)快照的定義:關(guān)于指定數(shù)據(jù)集合的一個(gè)完全可用拷貝,該拷貝包括相應(yīng)數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)(拷貝開始的時(shí)間點(diǎn))的映像。快照可以是其所表示的數(shù)據(jù)的一個(gè)副本,也可以是數(shù)據(jù)的一個(gè)復(fù)制品。
需要注意的是:快照是完全可用的拷貝,但不是一份完整的拷貝,至于為什么,后面會(huì)詳細(xì)講。
存儲(chǔ)快照的使用場(chǎng)景
場(chǎng)景一:
存儲(chǔ)快照,是一種數(shù)據(jù)保護(hù)措施,可以對(duì)源數(shù)據(jù)進(jìn)行一定程度的保護(hù),通俗地講,可以理解為----后悔藥。
如上圖,假設(shè)在t0時(shí)刻,有一份完整的源數(shù)據(jù),我們?cè)趖1時(shí)刻,針對(duì)這份源數(shù)據(jù)創(chuàng)建一份快照。
t2時(shí)刻,若因?yàn)楦鞣N原因(誤操作、系統(tǒng)錯(cuò)誤等)導(dǎo)致源數(shù)據(jù)損毀,那么,我們可以通過(guò)回滾(rollback)快照,將源數(shù)據(jù)恢復(fù)至快照創(chuàng)建時(shí)的狀態(tài)(即t1時(shí)刻),這樣,可以盡量降低數(shù)據(jù)損失(損失的數(shù)據(jù),是t1到t2之間產(chǎn)生的數(shù)據(jù))。
這種功能,常用于銀行、公安戶籍、科研單位等。操作系統(tǒng)、軟件升級(jí)或機(jī)房設(shè)備更替,一般會(huì)選擇在夜間或其他無(wú)生產(chǎn)業(yè)務(wù)時(shí),進(jìn)行高危操作,操作前會(huì)對(duì)數(shù)據(jù)進(jìn)行快照,若操作失敗,則將快照進(jìn)行rollback,將源數(shù)據(jù)恢復(fù)至操作前的狀態(tài)。
場(chǎng)景2:
前言中說(shuō)過(guò),快照是一份完全可用的副本,那么,它完全可以被上層業(yè)務(wù)當(dāng)做源數(shù)據(jù)。
如上圖,針對(duì)源數(shù)據(jù),創(chuàng)建快照后,將快照卷映射給其他上層業(yè)務(wù),可以用于數(shù)據(jù)挖掘和開發(fā)測(cè)試等工作,針對(duì)快照的讀操作不影響源卷的數(shù)據(jù)。
這種功能,常用于直播(視頻&圖片)鑒黃、科研數(shù)據(jù)模擬開發(fā)測(cè)試等,比如,視頻直播平臺(tái)需要將某一段時(shí)間的視頻提供給執(zhí)法機(jī)構(gòu)進(jìn)行篩查分析,那么可以通過(guò)對(duì)特定時(shí)間點(diǎn)保存的數(shù)據(jù)創(chuàng)建快照,將快照映射給執(zhí)法機(jī)構(gòu)的業(yè)務(wù)主機(jī)去進(jìn)行挖掘分析。
存儲(chǔ)快照的實(shí)現(xiàn)原理
目前,快照的實(shí)現(xiàn)方式均由各個(gè)廠商自行決定,但主要技術(shù)分為2類,一種是寫時(shí)拷貝COW(Copy On Write),另一種,是寫重定向ROW(Redirect On Write)。
寫時(shí)拷貝COW
COW(Copy-On-Write),寫時(shí)拷貝,也稱為寫前拷貝。
創(chuàng)建快照以后,如果源卷的數(shù)據(jù)發(fā)生了變化,那么快照系統(tǒng)會(huì)首先將原始數(shù)據(jù)拷貝到快照卷上對(duì)應(yīng)的數(shù)據(jù)塊中,然后再對(duì)源卷進(jìn)行改寫。
寫操作:
如上圖簡(jiǎn)要示例,快照創(chuàng)建以后,若上層業(yè)務(wù)對(duì)源卷寫數(shù)據(jù)X,X在緩存中排隊(duì),快照系統(tǒng)將X即將寫入的位置(邏輯地址)上的數(shù)據(jù)Y,拷貝到快照卷中對(duì)應(yīng)的位置(邏輯地址)上,同時(shí),生成一張映射表,表中一列記錄源卷上數(shù)據(jù)變化的邏輯地址,另一列記錄快照卷上數(shù)據(jù)變化的邏輯地址。我們可以看到,上層業(yè)務(wù)每下發(fā)一個(gè)數(shù)據(jù)塊,存儲(chǔ)上,發(fā)生了兩次寫操作:一次是源卷將數(shù)據(jù)寫入快照卷(即圖中Y),一次是上層業(yè)務(wù)將數(shù)據(jù)寫入源卷(即圖中X)。
讀操作:
如上圖,快照卷若映射給上層業(yè)務(wù)進(jìn)行數(shù)據(jù)分析等用途時(shí),針對(duì)快照進(jìn)行讀操作時(shí),首先由快照系統(tǒng)判斷,上層業(yè)務(wù)需要讀取的數(shù)據(jù)是否在快照卷中,若在,直接從快照卷讀取,若不在,則查詢映射表,去對(duì)應(yīng)源卷的邏輯地中讀取(這個(gè)查表并去源卷讀的操作,也叫讀重定向)。這一點(diǎn),恰好就解釋了為什么快照是一份完全可用的副本,它沒(méi)有對(duì)源卷進(jìn)行100%的拷貝,但對(duì)上層業(yè)務(wù)來(lái)說(shuō),卻可以將快照看做是和源卷“一模一樣”的副本。
針對(duì)源卷進(jìn)行讀操作時(shí),與快照卷沒(méi)有數(shù)據(jù)交互。
我們可以看到,快照對(duì)源卷的數(shù)據(jù)具有很好的保護(hù)措施,快照可以單獨(dú)作為一份可以讀取的副本,但并沒(méi)有像簡(jiǎn)單的鏡像那樣,一開始就占用了和源卷一樣的空間,而是根據(jù)創(chuàng)建快照后上層業(yè)務(wù)產(chǎn)生的數(shù)據(jù),來(lái)實(shí)時(shí)占用必需的存儲(chǔ)空間。
快照回滾(rollback):
如上圖,回滾操作的前提條件是,鎖定源卷(暫停對(duì)待回滾的邏輯地址上的IO操作),然后通過(guò)查映射表,將快照卷上的對(duì)應(yīng)數(shù)據(jù)回拷到源卷中。
快照刪除:
采用COW技術(shù)的快照,其源卷即保存著完整的實(shí)時(shí)數(shù)據(jù),因此,刪除快照時(shí),直接銷毀了快照卷和映射表,與源卷不存在數(shù)據(jù)交互。
寫時(shí)重定向ROW
ROW(Redirect-on-write ),也稱為寫時(shí)重定向。
創(chuàng)建快照以后,快照系統(tǒng)把對(duì)數(shù)據(jù)卷的寫請(qǐng)求重定向給了快照預(yù)留的存儲(chǔ)空間,直接將新的數(shù)據(jù)寫入快照卷。上層業(yè)務(wù)讀源卷時(shí),創(chuàng)建快照前的數(shù)據(jù)從源卷讀,創(chuàng)建快照后產(chǎn)生的數(shù)據(jù),從快照卷讀。
寫操作:
如上圖簡(jiǎn)要示例,快照創(chuàng)建以后,若上層業(yè)務(wù)對(duì)源卷寫數(shù)據(jù)X,X在緩存中排隊(duì),快照系統(tǒng)判斷X即將寫入源卷的邏輯地址,然后將數(shù)據(jù)X寫入快照卷中預(yù)留的對(duì)應(yīng)邏輯地址中,同時(shí),將源卷和快照卷的邏輯地址寫入映射表,即寫重定向。我們可以看到,上層針對(duì)源卷寫入一個(gè)數(shù)據(jù)塊X,存儲(chǔ)上只發(fā)生一次寫操作,只是寫之前進(jìn)行了重定向。
讀操作:
若快照創(chuàng)建以后,上層業(yè)務(wù)對(duì)源卷進(jìn)行讀,則有兩種情況:1)若讀取的數(shù)據(jù),在創(chuàng)建快照前產(chǎn)生,數(shù)據(jù)是保存在源卷上的,那么,上層就從源卷進(jìn)行讀取;2)若需要讀取的數(shù)據(jù)是創(chuàng)建快照以后才產(chǎn)生的,那么上層就查詢映射表,從快照卷進(jìn)行讀取(即讀重定向)。
若快照創(chuàng)建以后,上層業(yè)務(wù)對(duì)快照卷進(jìn)行讀,同樣也有兩種情況:1)若讀取的數(shù)據(jù),在創(chuàng)建快照前產(chǎn)生,數(shù)據(jù)是保存在源卷上的,那么上層就查詢映射表,從源卷進(jìn)行讀取;2)若需要讀取的數(shù)據(jù)是創(chuàng)建快照以后才產(chǎn)生的,那么上層就直接從快照卷進(jìn)行讀取。
我們可以看到,ROW快照也是根據(jù)創(chuàng)建快照后上層業(yè)務(wù)產(chǎn)生的數(shù)據(jù),來(lái)實(shí)時(shí)占用必需的存儲(chǔ)空間。
快照回滾(rollback):
采用ROW技術(shù)的快照,其源卷始終保存著快照創(chuàng)建前的完整數(shù)據(jù),快照創(chuàng)建后,上層業(yè)務(wù)產(chǎn)生的數(shù)據(jù)都寫入了快照中,因此,快照的回滾只是取消了對(duì)源卷的讀重定向操作。通俗地說(shuō),就是源卷上沒(méi)有進(jìn)行任何數(shù)據(jù)操作,上層業(yè)務(wù)對(duì)源卷的讀,僅限于讀源卷(即不會(huì)去讀取快照卷的數(shù)據(jù))。
快照刪除:
采用ROW技術(shù)的快照,其源卷始終保存著快照創(chuàng)建前的完整數(shù)據(jù),快照創(chuàng)建后,上層業(yè)務(wù)產(chǎn)生的數(shù)據(jù)都寫入了快照中。因此,若要?jiǎng)h除快照,必然要先將快照卷中的數(shù)據(jù),回拷到源卷中,拷貝完成才能刪除,如上圖。此時(shí)我們可以設(shè)想,如果,針對(duì)一份源數(shù)據(jù),在18:00創(chuàng)建了快照,上層業(yè)務(wù)持續(xù)產(chǎn)生大量新的數(shù)據(jù),19:00又創(chuàng)建了快照,20:00又創(chuàng)建了快照……那么,在有多份快照的情況下,如果需要?jiǎng)h除快照,就會(huì)出現(xiàn),多個(gè)快照向源卷回拷數(shù)據(jù)的情況,可能導(dǎo)致回拷量非常大,耗時(shí)很長(zhǎng)。
兩種技術(shù)對(duì)比
如上表,COW的寫時(shí)拷貝,導(dǎo)致每次寫入都有拷貝操作,大量寫入時(shí),源卷的寫性能會(huì)有所下降,而讀源卷是不會(huì)受到任何影響的,刪除快照時(shí),只是解除了快照和源卷的關(guān)系,同時(shí)刪除了快照卷的數(shù)據(jù)而已。ROW在每次寫入僅做了重定向操作,這個(gè)操作耗時(shí)是幾乎可以忽略不計(jì)的,源卷的寫性能幾乎不會(huì)受到影響,但讀源卷時(shí),則需要判斷數(shù)據(jù)是創(chuàng)建快照前還是創(chuàng)建快照后,導(dǎo)致大量讀時(shí),性能受到一定影響,比較致命的是,若源卷有多個(gè)快照,在刪除快照時(shí),所有快照的數(shù)據(jù)均需要回拷到源卷才可以保證源卷數(shù)據(jù)的完整性。
結(jié)語(yǔ)
上面簡(jiǎn)單地介紹了存儲(chǔ)快照的實(shí)現(xiàn)原理,實(shí)際上,快照特性應(yīng)用廣泛,其應(yīng)用對(duì)象是很多的:
目前,主流廠商在自研產(chǎn)品上,對(duì)上面的ROW和COW技術(shù)都有小范圍的改動(dòng),也有一些新興的快照技術(shù)已經(jīng)誕生,但這個(gè)行業(yè)里,沒(méi)有最好的快照技術(shù)。技術(shù)為業(yè)務(wù)服務(wù),只有針對(duì)業(yè)務(wù)類型做好本地化適配,才能達(dá)到最佳效用。
問(wèn)答
消失存儲(chǔ)過(guò)程?
相關(guān)閱讀
騰訊云CIS入門——Kubernetes部署
騰訊云API:用Python使用騰訊云API(機(jī)器翻譯實(shí)例)
主機(jī)遷移實(shí)踐分享
此文已由作者授權(quán)騰訊云+社區(qū)發(fā)布,原文鏈接:https://cloud.tencent.com/developer/article/1158686?fromSource=waitui
歡迎大家前往騰訊云+社區(qū)或關(guān)注云加社區(qū)微信公眾號(hào)(QcloudCommunity),第一時(shí)間獲取更多海量技術(shù)實(shí)踐干貨哦~
海量技術(shù)實(shí)踐經(jīng)驗(yàn),盡在云加社區(qū)!
轉(zhuǎn)載于:https://www.cnblogs.com/qcloud1001/p/9322321.html
總結(jié)
以上是生活随笔為你收集整理的快照是什么?揭秘存储快照的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 周公解梦梦到吃饺子好不好
- 下一篇: 平板涂色