快照是什么?揭秘存儲快照的實現

歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~

本文由許登博 發表于云+社區專欄

原創聲明:本文首發騰訊云·云+社區,未經允許,不得轉載

前言

存儲網絡行業協會SNIA(StorageNetworking Industry Association)快照的定義:關于指定數據集合的一個完全可用拷貝,該拷貝包括相應數據在某個時間點(拷貝開始的時間點)的映像。快照可以是其所表示的數據的一個副本,也可以是數據的一個復制品。

需要注意的是:快照是完全可用的拷貝,但不是一份完整的拷貝,至于為什么,后面會詳細講。

存儲快照的使用場景

場景一:

存儲快照,是一種數據保護措施,可以對源數據進行一定程度的保護,通俗地講,可以理解為----后悔藥。

img

如上圖,假設在t0時刻,有一份完整的源數據,我們在t1時刻,針對這份源數據創建一份快照。

t2時刻,若因為各種原因(誤操作、系統錯誤等)導致源數據損毀,那么,我們可以通過回滾(rollback)快照,將源數據恢復至快照創建時的狀態(即t1時刻),這樣,可以盡量降低數據損失(損失的數據,是t1到t2之間產生的數據)。

這種功能,常用于銀行、公安戶籍、科研單位等。操作系統、軟件升級或機房設備更替,一般會選擇在夜間或其他無生產業務時,進行高危操作,操作前會對數據進行快照,若操作失敗,則將快照進行rollback,將源數據恢復至操作前的狀態。

場景2:

前言中說過,快照是一份完全可用的副本,那么,它完全可以被上層業務當做源數據。

img

如上圖,針對源數據,創建快照后,將快照卷映射給其他上層業務,可以用于數據挖掘和開發測試等工作,針對快照的讀操作不影響源卷的數據。

這種功能,常用于直播(視頻&圖片)鑒黃、科研數據模擬開發測試等,比如,視頻直播平臺需要將某一段時間的視頻提供給執法機構進行篩查分析,那么可以通過對特定時間點保存的數據創建快照,將快照映射給執法機構的業務主機去進行挖掘分析。

存儲快照的實現原理

目前,快照的實現方式均由各個廠商自行決定,但主要技術分為2類,一種是寫時拷貝COW(Copy On Write),另一種,是寫重定向ROW(Redirect On Write)。

寫時拷貝COW

COW(Copy-On-Write),寫時拷貝,也稱為寫前拷貝。

創建快照以后,如果源卷的數據發生了變化,那么快照系統會首先將原始數據拷貝到快照卷上對應的數據塊中,然后再對源卷進行改寫。

img

寫操作:

如上圖簡要示例,快照創建以后,若上層業務對源卷寫數據X,X在緩存中排隊,快照系統將X即將寫入的位置(邏輯地址)上的數據Y,拷貝到快照卷中對應的位置(邏輯地址)上,同時,生成一張映射表,表中一列記錄源卷上數據變化的邏輯地址,另一列記錄快照卷上數據變化的邏輯地址。我們可以看到,上層業務每下發一個數據塊,存儲上,發生了兩次寫操作:一次是源卷將數據寫入快照卷(即圖中Y),一次是上層業務將數據寫入源卷(即圖中X)。

img

讀操作:

如上圖,快照卷若映射給上層業務進行數據分析等用途時,針對快照進行讀操作時,首先由快照系統判斷,上層業務需要讀取的數據是否在快照卷中,若在,直接從快照卷讀取,若不在,則查詢映射表,去對應源卷的邏輯地中讀取(這個查表并去源卷讀的操作,也叫讀重定向)。這一點,恰好就解釋了為什么快照是一份完全可用的副本,它沒有對源卷進行100%的拷貝,但對上層業務來說,卻可以將快照看做是和源卷“一模一樣”的副本。

針對源卷進行讀操作時,與快照卷沒有數據交互。

我們可以看到,快照對源卷的數據具有很好的保護措施,快照可以單獨作為一份可以讀取的副本,但并沒有像簡單的鏡像那樣,一開始就占用了和源卷一樣的空間,而是根據創建快照后上層業務產生的數據,來實時占用必需的存儲空間。

快照回滾(rollback):

img

如上圖,回滾操作的前提條件是,鎖定源卷(暫停對待回滾的邏輯地址上的IO操作),然后通過查映射表,將快照卷上的對應數據回拷到源卷中。

快照刪除:

采用COW技術的快照,其源卷即保存著完整的實時數據,因此,刪除快照時,直接銷毀了快照卷和映射表,與源卷不存在數據交互。

寫時重定向ROW

ROW(Redirect-on-write ),也稱為寫時重定向。

創建快照以后,快照系統把對數據卷的寫請求重定向給了快照預留的存儲空間,直接將新的數據寫入快照卷。上層業務讀源卷時,創建快照前的數據從源卷讀,創建快照后產生的數據,從快照卷讀。

img

寫操作:

如上圖簡要示例,快照創建以后,若上層業務對源卷寫數據X,X在緩存中排隊,快照系統判斷X即將寫入源卷的邏輯地址,然后將數據X寫入快照卷中預留的對應邏輯地址中,同時,將源卷和快照卷的邏輯地址寫入映射表,即寫重定向。我們可以看到,上層針對源卷寫入一個數據塊X,存儲上只發生一次寫操作,只是寫之前進行了重定向。

讀操作:

快照創建以后,上層業務對源卷進行讀,則有兩種情況:1)若讀取的數據,在創建快照前產生,數據是保存在源卷上的,那么,上層就從源卷進行讀取;2)若需要讀取的數據是創建快照以后才產生的,那么上層就查詢映射表,從快照卷進行讀取(即讀重定向)。

快照創建以后,上層業務對快照卷進行讀,同樣也有兩種情況:1)若讀取的數據,在創建快照前產生,數據是保存在源卷上的,那么上層就查詢映射表,從源卷進行讀取;2)若需要讀取的數據是創建快照以后才產生的,那么上層就直接從快照卷進行讀取。

我們可以看到,ROW快照也是根據創建快照后上層業務產生的數據,來實時占用必需的存儲空間。

快照回滾(rollback):

采用ROW技術的快照,其源卷始終保存著快照創建前的完整數據,快照創建后,上層業務產生的數據都寫入了快照中,因此,快照的回滾只是取消了對源卷的讀重定向操作。通俗地說,就是源卷上沒有進行任何數據操作,上層業務對源卷的讀,僅限于讀源卷(即不會去讀取快照卷的數據)。

快照刪除:

img

采用ROW技術的快照,其源卷始終保存著快照創建前的完整數據,快照創建后,上層業務產生的數據都寫入了快照中。因此,若要刪除快照,必然要先將快照卷中的數據,回拷到源卷中,拷貝完成才能刪除,如上圖。此時我們可以設想,如果,針對一份源數據,在18:00創建了快照,上層業務持續產生大量新的數據,19:00又創建了快照,20:00又創建了快照……那么,在有多份快照的情況下,如果需要刪除快照,就會出現,多個快照向源卷回拷數據的情況,可能導致回拷量非常大,耗時很長。

兩種技術對比

img

如上表,COW的寫時拷貝,導致每次寫入都有拷貝操作,大量寫入時,源卷的寫性能會有所下降,而讀源卷是不會受到任何影響的,刪除快照時,只是解除了快照和源卷的關系,同時刪除了快照卷的數據而已。ROW在每次寫入僅做了重定向操作,這個操作耗時是幾乎可以忽略不計的,源卷的寫性能幾乎不會受到影響,但讀源卷時,則需要判斷數據是創建快照前還是創建快照后,導致大量讀時,性能受到一定影響,比較致命的是,若源卷有多個快照,在刪除快照時,所有快照的數據均需要回拷到源卷才可以保證源卷數據的完整性。

結語

上面簡單地介紹了存儲快照的實現原理,實際上,快照特性應用廣泛,其應用對象是很多的:

img

目前,主流廠商在自研產品上,對上面的ROW和COW技術都有小范圍的改動,也有一些新興的快照技術已經誕生,但這個行業里,沒有最好的快照技術。技術為業務服務,只有針對業務類型做好本地化適配,才能達到最佳效用。

問答

消失存儲過程?

相關閱讀

騰訊云CIS入門——Kubernetes部署

騰訊云API:用Python使用騰訊云API(機器翻譯實例)

主機遷移實踐分享

此文已由作者授權騰訊云+社區發布,原文鏈接:https://cloud.tencent.com/developer/article/1158686?fromSource=waitui

歡迎大家前往騰訊云+社區或關注云加社區微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐干貨哦~

海量技術實踐經驗,盡在云加社區!

轉載于:https://www.cnblogs.com/qcloud1001/p/9322321.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397506.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 事物隔離級別

1.什么是事物: 訪問并可能更新數據庫的一個完整的程序執行單元(UNIT)2、事物必須滿足ACID特性:A,atomic,原子性,要么都提交,要么都失敗,不能一部分成功,一部分…

IIS_各種問題

IIS7中默認是已經加載了腳本映射處理。但今天裝了個WIN7,裝好IIS后卻發現沒有。于是手動去這安裝,在添加html映射時提示:模塊列表中必須要有IsapiModule或cgiModule 因為 IIS 7 采用了更安全的 web.config 管理機制,默認情況下會鎖…

平板涂色

題目描述 CE數碼公司開發了一種名為自動涂色機(APM)的產品。它能用預定的顏色給一塊由不同尺寸且互不覆蓋的矩形構成的平板涂色。 為了涂色,APM需要使用一組刷子。每個刷子涂一種不同的顏色C。APM拿起一把有顏色C的刷子,并給所有顏…

UVA - 1388 Graveyard 【數學】

題目鏈接 題意&#xff1a; 給一個周長為10000的圓&#xff0c;一開始有n個距離相等的點&#xff0c; 現在要添加m個點使其仍舊保持距離相等的狀態&#xff0c;問最小的移動距離。 思路&#xff1a; 遍歷原來的每一個點&#xff0c;找出離他最近的新的位置。 #include <map&…

Android API中被忽略的幾個函數接口

1. MotionEvent的幾個函數 下面的方法都支持多點觸摸&#xff0c;即可以對單個觸摸點調用下面的方法 1.1 getPressure() 這個api 可以獲取到手指觸摸屏幕時候的壓力,但是需要硬件和驅動支持... 它有助于我們做出更加擬物化的設計&#xff0c;比如&#xff1a; 1. 手繪。可以根據…

error while loading shared libraries: libstdc++.so.6: cannot open shared object file

查看誰提供這個.so yum whatprovides libstdc.so.6 yum install libstdc-4.8.5-28.el7.i686 #安裝上邊查出來的.so 此時如果出錯&#xff0c;最后一行是libstdc-4.8.5-28.el7.i686 ! libstdc-4.8.5-11.el7.x86_64 yum update libstdc-4.8.5-11.el7.x86_64 #更新一下,這個是上…

【轉】為控制臺窗口建立消息隊列

介紹Windows的窗口、消息、子類化和超類化 這篇文章本來只是想介紹一下子類化和超類化這兩個比較“生僻”的名詞。為了敘述的完整性而討論了Windows的窗口和消息&#xff0c;也簡要討論了進程和線程。子類化&#xff08;Subclassing&#xff09;和超類化&#xff08;Superclass…

hightmaps 按地圖上顯示的統計數據

離extjs 至 easyui 到html5到hightchars 再到hightmaps。Exjts和easyui很相似&#xff0c;extjs是重量級的&#xff0c;easyui輕量級的。比extjs容易上手。照著demo改就能夠開發了。easyui入門demo見&#xff1a;easyui-demo&#xff0c;或者到官網http://www.jeasyui.com/&…

python pytorch 版本,python 如何查看pytorch版本

看代碼吧~import torchprint(torch.__version__)補充&#xff1a;pytorch不同版本安裝以及版本查看一&#xff1a;基于conda安裝conda create --name pytorch_learn python3.6.7#創建一個名為pytorch_learn的環境source activate pytorch_learn #進入環境conda install pytorch…

Unity WebGL 窗口自適應

unity 打包好WebGL后&#xff0c;用文本編輯器編輯打包生成的 index.html 文件 在生成的html里面修改代碼<script type"text/javascript">    function Reset() {       var canvas document.getElementById("#canvas");        …

python 會增加內存嗎,Python+不斷增加的內存分配

我正在寫一個模塊來訓練一個大型數據集上的ML模型——它包括0.6米的數據點&#xff0c;每個數據點的維度都是0.15米。我在加載數據集本身時遇到了問題。(全是numpy數組)下面是一個代碼片段(它復制了實際代碼的主要行為)&#xff1a;import numpyimport psutilFV_length 150000…

非IT人士的云棲醬油之行 (程序猿迷妹的云棲之行)

摘要&#xff1a; 熟悉我的人都知道&#xff0c;我是一個貪玩兒且不學無術的姑娘&#xff0c;對于互聯網我也是知之甚少&#xff1b;這次去到杭州參加阿里巴巴集團主辦的為期4天的科技大會也是很例外&#xff1b;但是不得不說這次的會議真是讓我很震驚。今天我就和大家分享一下…

MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文檢索和類memcache的nosql支持

背景&#xff1a;搞個個人博客的全文搜索得用like啥的&#xff0c;現在mysql版本號已經大于5.6.4了也就支持了innodb的全文搜索了&#xff0c;剛查了下目前版本號都到MySQL Community Server 5.6.19 了&#xff0c;所以&#xff0c;一些小的應用可以用它做全文搜索了&#xff0…

搭建基于Jenkins的CI服務器

安裝Jenkins和創建任務這些操作網上一搜一大把&#xff0c;這里就沒必要寫了&#xff0c;直接就開始編譯、單元測試&#xff0c;覆蓋&#xff0c;git提交觸發構建&#xff0c;構建失敗發送給提交人郵件。 因為項目比較復雜&#xff0c;為了懶省事我直接在CI服務器上安裝了visua…

php打補丁,PHPMailer庫打補丁后漏洞仍然存在,怎么解?

開源PHPMailer庫被披露存有一個嚴重的遠程代碼執行漏洞。這個漏洞在被修補后&#xff0c;又進行了二次修復&#xff0c;因為第一次沒有充分解決問題。那么&#xff0c;這個漏洞是如何工作的&#xff1f;為什么原始補丁沒有解決問題&#xff1f;Michael Cobb&#xff1a;代碼庫和…

Ubuntu下安裝jdk經驗分享

Ubuntu下安裝jdk經驗分享http://www.jb51.net/article/55131.htm轉載于:https://www.cnblogs.com/kangtuohongwai/p/6002555.html

BZOJ 1270: [BeijingWc2008]雷濤的小貓( dp )

簡單的dp..dp(i,j) max(dp(x,y))cnt[i][j], (x,y)->(i,j)是合法路徑.設f(i) max(dp(x,y))(1≤x≤N, 1≤y≤i), g(i,j) max(dp(i, k))(1≤k≤j)那么dp(i,j) max(f(jdelta), g(i,j1))cnt[i][j]. 遞推即可. 時間復雜度O(NH)----------------------------------------------…

【校招面試 之 C/C++】第12題 C++ 重載、重寫和重定義

1、成員函數重載特征&#xff1a; a.相同的范圍&#xff08;在同一個類中&#xff09;&#xff1b; b.函數名字相同&#xff1b; c.參數不同&#xff08;參數個數不同或者參數類型不同&#xff0c;但是返回值不同不能使重載&#xff09;&#xff1b; d.virtual關鍵字可有可無…

mac php5.6.30與php7共存,認識Homebrew以及在Mac上同時安裝PHP5及PHP7

Homebrew幾乎是Mac上必備的軟件&#xff0c;用于下載安裝和管理其他軟件。尤其對于程序員&#xff0c;講真&#xff0c;本人到現在仍然不知道在Mac上如何不借助Homebrew來搭建php-apache-mysql開發環境。認識HomebrewHomebrew是一個開源項目&#xff0c;據說它的作者曾經去谷歌…

POJ 1141

題意&#xff1a;給出一個表達式的子序列&#xff0c;要你填充這個序列&#xff0c;保證最終形成的序列長度最短&#xff0c;也就是添加的括號最少 這個子序列要遵循括號匹配的原則。 分析&#xff1a;轉移方程dp[i][j]min(dp[i][k],dp[k1][j]).i<k<j.dp[1][1]1; dp[i][j…