對象存儲有必要支持快照嗎?
對象存儲由于成本低,擴展性強,一直是備份目標存儲的首選。但是,隨著對象存儲本身技術的進步,對象存儲的功能越來越強大,性能也越來越高,加上S3的云原生特性,對象存儲逐漸進入關鍵業務,高價值數據的備份是強需求。XSKY星辰天合的對象存儲在眾多金融、證券、醫療的行業中的關鍵場景落地,越來越感受到關鍵業務對對象存儲的數據備份的需求。
但海量非結構化數據的備份恢復都是業界難題,特別在小文件場景。在對象存儲發展這么多年后,近期業界開始出現了一些針對對象存儲數據的備份方案,我們選取主流對象產品的方案一一分析,再看看XSKY星辰天合的桶快照專利技術有哪些優勢。
常見的對象存儲數據備份方案實現和挑戰
AWS S3于2010年發布了對象存儲多版本功能,旨在進行對象數據的保護,降低業務邏輯錯誤對對象存儲數據的影響。

與常見的對象上傳即覆蓋原有數據不同,開啟了多版本控制的存儲桶,將不會刪除或者覆蓋已存儲的對象數據,而是產生新的版本。對于上傳則將新寫入的數據加上新版本后作為對象的最新數據,對于刪除動作,則會增加delete marker,用于在對象訪問時應答404。對于歷史數據,則支持通過多版本管理的API進行獨立的訪問或者刪除。
通過這一系列的服務端邏輯和API,對象存儲的多版本功能可以滿足基本的對象數據保護。對象多版本由于需要保存所有的版本,對應關鍵業務來說很占空間(因為關鍵業務一般是生產業務,會經常修改數據,從而產生很多版本),很多企業都不太樂意打開多版本。另外,對象多版本使用起來很不方便,很難備份和恢復某一個版本。如果不需要打開多版本功能,又能像傳統存儲快照一樣可以進行簡單的備份和恢復數據就完美了。
MinIO
Versioning allows a user to retain multiple variants of an object in the same bucket and provides a mechanism to preserve, retrieve and restore every version of every object stored in a bucket,eliminating the requirement for snapshots
MinIO通過兼容AWS S3 多版本功能,將多版本認為是對象的一個快照,可以實現對象粒度的快照和數據保護功能。
但當業務希望將整個桶的數據恢復到某一時間點時,基于多版本是無法實現的。
同時多版本僅能將數據保存在同一個桶內,并沒有快捷的方式實現數據的異地、異質災備。如果借助第三方組件或自行開發,則需要定期將對象的歷史版本導出存儲到異地或其他存儲介質中。
AWS
在發布S3多版本功能11年后,AWS于2021年發布了AWS Backup for Amazon S3的預覽版,并于2022年2月正式開放。
AWS Backup基于對象多版本對S3數據進行帶外保護,通過對存儲桶開啟多版本,定期或手動執行備份任務的方式,將對象的歷史數據導出為桶的一次備份,可理解為針對存儲桶的一次快照動作。但AWS的方案也存在比較明顯的問題:
● 源桶必須開啟多版本功能,才能進行數據保護
● 當進行恢復時,僅支持將對象恢復到該備份的最新版本,無法恢復兩次備份任務之間產生的歷史版本
● AWS Backup for Amazon S3為S3的帶外實現,需要進行對象歷史版本數據的復制和歸檔,因此備份效率不高
Blackblaze B2
對于實現了對象存儲快照的產品來說,Blackblaze的B2是比較有特色的一個。這與B2的產品定位相關,他更像是服務個人用戶的簡化版對象存儲產品。
B2的快照將源存儲桶的數據導出后打包為zip,再上傳到目標存儲桶中,支持對整個快照zip包的下載或者U盤郵寄功能。因為是面向個人用戶的功能,所以存在著比較明顯的規格限制,如:快照大小最大僅支持10TB,快照備份速度為1GB/min,并且同樣無法記錄兩次快照周期間產生的變更。
這樣的產品和功能的定位,基本上無法滿足企業生產業務對數據一致性、功能可用性的要求。
XSKY星辰天合的桶快照備份相關發明專利
根據IDC的數據,XSKY星辰天合的對象存儲多年以來一直領先國內市場?;趯Υ鎯ι鷳B的理解和與市場眾多用戶的未來需求結合,XSKY星辰天合很早就研究對象存儲的桶快照備份技術,在2019年申請了兩項相關的國家發明專利,并在2021年取得專利授權(專利號:ZL2019107133.8和ZL201911229166.X,詳見附錄)。
桶快照相關專利技術利用對象多版本技術棧實現了對象快照功能,但不與多版本功能沖突,并且支持桶級一致性快照,即針對桶內所有對象的狀態一次性打上快照,而不是單個對象粒度的快照。
相關專利技術可以與業務結合,通過桶級快照的功能,實現數據和業務狀態的一鍵還原,支持高效快照回滾,通過變更快照鏈的方式,高效的實現整桶數據的回滾。
這樣也避免了多版本帶來的空間浪費,對于通過多版本來進行數據保護的方案,每次對象的修改都會產生新的版本和存儲空間的需求,而XSKY星辰天合的快照方案不依賴于多版本的實現,大幅減少空間浪費。
快照搜索鏈路

圖:快照搜索鏈路概念圖
快照搜索鏈路是為了快速找到對象而生成的一個數據結構。由于快照存在回滾,快照間的依賴關系類似于一棵多叉樹,從任意葉子節點到根節點的路徑一定唯一。由于任意鏈路都是獨立的,所以根據快照搜索鏈路,我們很容易實現指定鏈路讀取某個對象或列舉桶內所有對象。
快照差異和增量備份
XSKY星辰天合的桶快照專利技術提供了快照差異的接口,可對比在同一鏈路上任意的兩個快照內的對象差異,通過此結果可進行增量備份,實現數據的異地、異質災備。

圖: 快照差異原理概念圖
在原理實現上,XSKY星辰天合并沒有采用根據快照列舉桶然后針對結果做減法的簡單方式,因為這樣效率很低。如上圖所示,假如需要增量備份T1到T2之間的數據,需要比對快照2和快照3的對象差異。顯而易見,快照1內的數據都是共享的,肯定不會在差異結果內,當快照1內數據量很龐大時,會做很多無用功。為了提升效率,XEOS復用了內部的對象變更日志模塊(此模塊記錄了每次對象的創建,修改,刪除等變更),獲取某個時間段內的變更日志,從而過濾掉絕大部分的未修改對象。
快照回滾
快照回滾是指能回退到任意一個已存快照的狀態。該專利技術的快照回滾操作是秒級的,它通過修改快照搜索鏈路,快速切換查找路徑,從而達到秒級回滾。
同時XSKY星辰天合的快照方案支持與多版本同時結合,即快照回滾時可以還原所有歷史的對象版本,遠優于AWS Backup只能恢復最新版本的方案。
寫時拷貝(Copy-On-Write)和寫時重定向(Redirect-On-Write)
COW(寫時拷貝)是指系統會跟蹤源卷的數據變化(即源卷的寫入操作),一旦源卷數據塊發生寫入操作,則先將源卷數據讀出并寫入快照卷,然后用新數據覆蓋原始數據。系統時刻保留一份完整的最新的對象副本,當接收到寫IO時,會先將原來的數據內容復制一份放入快照副本中,然后再修改最新副本,同一個對象的第二次寫IO直接修改最新版本。也就意味著每個對象的第一個寫操作會帶來三次IO,一次讀,兩次寫,對于寫密集型場景,帶來的性能損耗會非常大。
ROW(寫時重定向)是指系統創建一個和源卷對應的快照空間和索引日志,在創建ROW快照后,源卷會保持初始狀態不變,如源卷中的數據需要修改,新數據會被寫入對應的快照空間中,同時該數據位的指針會重定向到新的寫入存儲空間地址位,這樣當讀這個數據時會按指針位置找到新更新的數據。優勢在于不會降低源數據卷的寫性能。源數據卷創建快照后的寫操作會被重定向,所有的寫 I/O 都被重定向到新卷中,而所有快照卷數據(舊數據)均保留在只讀的源數據卷中。因此更新源數據只需要一個寫操作。
XSKY星辰天合的專利技術使用ROW的方式,通過快照鏈的方式減少寫IO,從而減少性能損耗。
桶快照技術應用展望
XSKY星辰天合的專利桶快照技術即將在XEOS V6下一代對象中產品化,第一期專注于本地數據備份和快照增量備份,第二期會增加快照回滾功能。同時,XEOS V6也提供了開放API,便于和各備份廠商對接,我們也將基于XEOS快照推出原生對象存儲數據備份方案。
有了XEOS對象的桶快照技術,我們的用戶將無需打開對象多版本,就可以像傳統存儲快照一樣,非常簡單的實現海量小文件數據的保護了。完善的對象數據保護技術,必將擴大對象存儲的適用范圍,對象存儲也必將成為企業關鍵業務存儲的有力競爭者。

責任編輯:焦旭





