ossfs中繼資料快取適用於單機高I/O讀寫OSS資料的情境。開啟ossfs中繼資料快取後,能夠提升整體的檔案操作效率,使檔案操作響應更加迅速。本文將為您介紹如何更好地使用和配置ossfs中繼資料快取。
在使用中繼資料快取時,需要留意資料一致性和時效性問題。因此,在對資料即時性要求較高的情境中,不建議開啟ossfs中繼資料快取。
功能背景
中繼資料是指描述資料的資料,包括檔案大小、建立時間、修改時間、使用者和組ID等,其中使用者和組ID等資訊是Object Storage Service所不具備的屬性,但檔案系統會依賴這些屬性做許可權相關檢查。ossfs通過擷取OSS內檔案自訂頭中的額外的資訊,從而支援在Linux環境中根據檔案屬性進行檔案操作。
通過啟用ossfs中繼資料快取,在效能、資源以及使用者體驗方面都有顯著優勢。
效能方面,能夠減少中繼資料讀取的延遲,尤其是在高I/O操作的情境下,可提升整體的檔案操作效率。
資源方面,能減少對OSS服務的調用次數,降低頻繁訪問熱點資料時的QPS壓力。
使用者體驗方面,對於使用者來說,檔案操作響應更快。
適用情境
單機訪問OSS情境。
在分布式環境下,從Object Storage Service服務(OSS)中讀取那些不頻繁變化的資料的情境,例如在進行AI訓練集的讀取、AI模型檔案的讀取以及巨量資料查詢等操作。
工作原理
ossfs通過使用用戶端記憶體對OSS的中繼資料進行緩衝,以此降低遠程儲存的操作延遲。具體機制如下:
初次訪問緩衝:
當ossfs掛載點下的檔案或目錄首次被訪問時,ossfs用戶端會從OSS擷取該對象的中繼資料,並將其儲存在本機快取中。
後續訪問加速:
如果未開啟緩衝淘汰策略或者緩衝未到期,後續對該對象的中繼資料訪問將直接從本機快取中讀取,無需再次向OSS發起網路請求,從而大大減少了延遲。
緩衝更新策略:
ossfs會依據一定的策略(例如緩衝到期、緩衝超限等)來更新本機快取。
多用戶端緩衝同步:
ossfs的中繼資料快取為使用用戶端記憶體的單機本機快取,不支援單機多ossfs掛載以及多機間中繼資料的變動同步。
模式對比
未開啟中繼資料快取與開啟中繼資料快取兩種模式對比情況如下:
是否開啟中繼資料快取 | 命令 | 請求方式 | 操作 | 效能 |
是否開啟中繼資料快取 | 命令 | 請求方式 | 操作 | 效能 |
未開啟中繼資料快取 | stat | 向OSS遠程Bucket發送HeadObject請求去擷取檔案項中繼資料。 | 每個檔案對應一個HeadObject請求,從OSS遠程Bucket擷取資料。 | OSS遠程Bucket中擷取檔案項中繼資料,讀取速度相對記憶體中較慢。 |
ls | 向OSS遠程Bucket發送ListObject請求擷取目錄列表資料、發送HeadObject請求擷取檔案項中繼資料。 | 發起一個ListObject請求,目錄下每個檔案/目錄項都對應一個HeadObject請求,從OSS遠程Bucket擷取資料。 | ||
開啟中繼資料快取(中繼資料快取未到期) | stat | 本地記憶體中擷取檔案項中繼資料。 | 記憶體中擷取資料。 | 本地記憶體中擷取檔案項中繼資料,讀取速度快。 |
ls | 向OSS遠程Bucket發送ListObject請求擷取目錄列表資料、本地記憶體中擷取檔案項中繼資料。 | 發起一個ListObject 請求,從OSS的遠程Bucket中擷取資料;而對於目錄下的每個檔案或目錄項,從記憶體中擷取相應的資料。 |
配置選項
ossfs提供了靈活的配置選項來管理中繼資料快取:
選項名稱 | 描述 | 參數值 |
選項名稱 | 描述 | 參數值 |
max_stat_cache_size | 控制是否啟用中繼資料快取和緩衝的大小。請根據OSS中被頻繁訪問的對象數量進行配置。在記憶體充足時,建議配置足夠大的值,以有效提升操作體驗。
| 預設值:100,000 單位:個(檔案或目錄) 大小:約佔用記憶體40 MB |
stat_cache_expire | 控制是否啟用中繼資料快取的到期淘汰策略以及調整緩衝的到期時間。建議根據業務需求自訂緩衝到期時間。
ossfs預設開啟緩衝到期淘汰策略,並且設定了緩衝上限。緩衝上限預設為100,000個(檔案或目錄),約佔用記憶體40 MB。 | 預設值:900 單位:秒 |
readdir_optimize | 控制是否使用緩衝最佳化,預設為不使用。 添加該掛載選項後ossfs在ls時不會發送HeadObject請求去擷取檔案項中繼資料如 如需啟用,您可以在掛載時添加 | 預設值:false |
中繼資料快取管理機制
ossfs中繼資料快取管理機制如下表所示。
緩衝情況 | 操作 |
緩衝情況 | 操作 |
檔案屬性已在緩衝且未開啟淘汰策略或緩衝未到期 | 直接從緩衝中讀取檔案中繼資料 |
檔案屬性已在緩衝但緩衝到期 | 更新該緩衝 |
檔案屬性不在緩衝內且緩衝空間有空餘 | 直接將新條目加入緩衝 |
檔案屬性不在緩衝內且緩衝已滿並開啟緩衝到期淘汰策略 | 遍曆緩衝,刪除到期條目 |
檔案屬性不在緩衝內且緩衝已滿未開啟緩衝到期淘汰策略 | 根據LRU策略,淘汰長時間未訪問過的條目 |
使用建議
若您不關注檔案的中繼資料,建議添加
readdir_optimize
選項,可大幅提升list
和find
效能。開啟後不再支援軟連結。在多用戶端高資料更新即時性需求情境中,需謹慎啟用緩衝。可通過設定
-omax_stat_cache_size=0
禁用緩衝以維持一致性,但這可能導致效能下降及額外費用。若應用需要保證多用戶端強一致性,建議使用Cloud Storage GatewayCSG或檔案儲存體CPFS,不建議使用ossfs。
在檔案數量較多的情況下,適當增大
max_stat_cache_size
值以避免頻繁淘汰。如果操作的檔案數過多,且伺服器記憶體又不足時,建議使用ossutil或OSS SDK進行操作。如果必須採用掛載方式來掛載Object Storage Service服務(OSS),建議使用Cloud Storage GatewayCSG或者檔案儲存體CPFS。
當檔案數量較多時,可以通過建立多個ossfs掛載點來最佳化效能,每個掛載點僅掛載一個子目錄。這樣可以減少每個掛載點需要處理的檔案數量,從而提升整體使用體驗。