物件業務的重新命名介面

jackieathome發表於2024-06-09

依據AWS S3,沒有定義重新命名物件的操作。

本文有如下假定:

  • 物件儲存服務基於檔案語義實現。

介面定義

依據前述,業界主流物件儲存服務比如AWS S3並未定義重新命名物件的操作,而國內的各家公有云物件儲存服務,提供了物件的重新命名操作。

國內的公有云物件儲存服務,相關操作的文件的連結(排名不分先後),如下:

  • 華為雲OBS
  • 火山引擎

華為雲OBS重新命名物件為例,介面定義如下:

POST /ObjectName?name=Name&rename HTTP/1.1
Host: bucketname.obs.region.myhuaweicloud.com
Authorization: authorization
Date: date

本介面的關鍵引數,如下:

  • 物件名,指定物件名。
  • 目標物件名,指定修改後的物件名。
  • 操作名,引數名為rename,不需要指定引數值。

實現思路

重新命名物件的操作,採用Linux命令模擬時,可以有如下方式:

  • 方案一,即先複製、再刪除原檔案。
    cp A B
    rm -f A
    
  • 方案二,移動檔案。
    mv A B
    

不涉及檔案系統中inode的變化,僅處理檔案系統中目錄的後設資料,因此基本不受檔案大小的影響。

ETag

參考AWS S3資料一致性ETag基於物件的資料,使用MD5演算法計算得到。

由於修改名稱不涉及資料的變更,因此無需更新物件的ETag

多版本

按照AWS S3多版本中的說明,多版本特性的開關作用在桶級,包含如下狀態:

Buckets can be in one of three states:

  • Unversioned (the default)
  • Versioning-enabled
  • Versioning-suspended

原物件關聯的所有版本,均需要關聯到最新的物件名。

分級

參考AWS S3 歸檔AWS S3 分級中的說明,處於歸檔狀態的物件,需要先取回才能訪問。
顯而易見,此處為了維護物件語義,照顧物件儲存服務的實現,當物件處於歸檔狀態時,不允許更新物件。

WORM

參考AWS S3 Object Lock中的說明,開啟WORM後:

  • 在保護期內的物件,不允許修改,不允許刪除。
  • 在保護期外的物件,不允許修改,允許刪除。

因此從維護物件語義的角度講,在保護期內的物件、保護期外的物件,均不允許修改物件。

生命週期

參考AWS S3 Lifecycle,修改後設資料操作的物件可能符合生命週期規則,從而被恰好正在執行的後臺任務刪除掉。
此時有如下選擇:

  • 生命週期的後臺任務具備更高的優先順序,提前中斷操作,正常刪除掉物件,物件儲存服務對客戶應用返回操作失敗。
  • 生命週期的後臺任務優先順序相對較低,跳過當前物件,待下次執行時再決策是否刪除。

資料加密

依據SSE-C的說明,客戶應用在執行PUT/GET/Head/Copy操作時,均需要提供加密資料的金鑰。

即在發起請求時,提供如下頭部:

  • x-amz-copy-source​-server-side​-encryption​-customer-algorithm
  • x-amz-copy-source​-server-side​-encryption​-customer-key
  • x-amz-copy-source-​server-side​-encryption​-customer-key-MD5

如前所述,本操作只涉及物件名的變更,不涉及後設資料和資料的變化,因此不涉及加密的處理。

事件通知

依據AWS S3 事件通知中的說明,物件儲存服務可以提供事件通知,目前支援的事件型別見文件,顯然不包括重新命名操作,可以擴充套件事件名,比如s3:ObjectUpdated:Put

併發一致性

依據AWS S3 data consistency model的說明,物件儲存服務提供read-after-write的模型。

當多客戶端對相同物件併發的發起重新命名操作時,參照檔案語義,提供最終一致性。

相關文章