云函式 SCF 存盤空間使用背景
目前 Serverless 架構已經在很多場景中落地,無論是使用 API 網關 + 云函式 SCF 實作 API 服務和 Web 服務,還是通過物件存盤 COS 觸發函式運行,進行檔案上傳事件的傳遞和檔案的處理,或者通過訊息佇列中的訊息觸發函式,進行訊息的過濾轉儲;Serverless 依靠其快速開發上線,無需復雜運維的特性,正逐步進入到更多的業務場景中,
在實際的使用程序中,云函式作為計算形態的產品,提供了計算高度的彈性擴縮容,在云函式運行時,運行環境中的檔案系統為只讀,在/tmp目錄下提供了 512MB 的臨時存盤空間;臨時存盤空間為單并發實體使用,各并發實體之間不共享;臨時空間在并發實體復用時會保留檔案,業務代碼如果有寫檔案,需要自行注意清理避免空間寫滿;同時在并發實體長時間未使用銷毀時,臨時空間也會清理,
目前,使用物件存盤 COS 進行云函式中的檔案相關操作,當用戶需要使用檔案,從物件存盤中下載到本地;在本地完成處理或生成的檔案,在函式執行結束前上傳到物件存盤中持久保存,很多場景通過使用物件存盤 COS 產品可以解決,由于這種解決方法均需要使用 SDK 來完成物件存盤的檔案操作,從檔案操作的便利性上來說,不如直接的本地檔案操作來的簡單方便,
檔案存盤 CFS 給云函式提供按需擴展的存盤空間

檔案存盤(Cloud File Storage,CFS)產品提供了安全可靠、可擴展的共享檔案存盤服務,可以為各種計算類產品提供容量和性能可彈性擴展的高性能共享存盤,通過與云函式產品的對接,CFS 可以提供按需擴展的存盤空間,并按實際的使用容量來付費,符合 Serverless 架構的特性,

從 COS 物件存盤和 CFS 檔案存盤的特性對比上,可以看到兩者均提供了充足可擴展的存盤空間,均使用按實際使用量的方式進行付費;CFS 由于通常是通過檔案系統掛載的方式使用,因此通常在 VPC 內網中提供服務,而 COS 由于通過 HTTP API 提供服務,因此在內外網中均可以提供服務;使用方式的差異,造成了我們通過代碼在實際操作檔案時,COS 要依賴 API 或 SDK 來進行檔案相關操作,而 CFS 可以和使用本地檔案系統一樣的方式,通過各種開發語言自帶的標準檔案系統庫來進行操作,
檔案存盤 CFS + 云函式 SCF 的優勢
通過 CFS 提供的共享檔案存盤服務,可以為云函式解決在實際使用程序中碰到的存盤方面的問題,并進一步擴展云函式可以支持的使用場景,從功能點上來說,對接 CFS 可以獲得的優勢包括了:
- 擴展存盤空間,函式運行環境內的存盤空間不再受限與 512 MB 的臨時存盤空間,
- 存盤空間的持久保存,CFS 提供的存盤空間,不會隨著函式并發實體的銷毀而清理,而是可以持久保存,
- 跨并發和跨函式訪問,CFS 的存盤空間,是在函式的并發實體間共享的,而如果將同一個 CFS 存盤空間掛載到多個函式上,存盤空間也可以在多個函式間共享;共享特性可以帶來很多檔案操作的便利性,但是同時也需要注意檔案讀寫的并發特性,在多并發寫同一檔案時注意寫順序或使用寫鎖來互斥,
- 標準 posix io 介面,使用各個語言自帶的 file system 檔案系統庫即可操作,無需額外的 SDK;而如果需要額外使用一些 SDK、Agent 等,也可以直接進行檔案讀寫,
檔案存盤 CFS 給云函式帶來的業務新場景
通過 CFS 檔案存盤產品獲得的優勢,可以改善和擴展現有云函式所實作的一些場景,也可以帶來很多新的場景,

如上圖所示,在使用云函式進行物件存盤檔案解壓的場景中,由 COS 物件存盤中的 ZIP 檔案上傳事件觸發函式,函式在獲取到事件后,通過下載 ZIP 檔案,在本地完成解壓并再次上傳到物件存盤中,實作 ZIP 檔案的上傳自動解壓能力,受限于函式的臨時空間 512 MB 的限制,以及原始檔案和解壓后檔案均需要放置在臨時空間中,這種時候,函式可以解壓的檔案大小受限,過大的 ZIP 檔案,要么下載壓縮檔案后沒有空間存放臨時的解壓檔案,要么無法下載超過限制的壓縮檔案,而通過 CFS 擴展存盤空間,可讀寫的空間不再受到臨時空間的大小限制,在檔案解壓縮場景下,也可以實作大壓縮檔案的解壓了,

而在有些科學計算或 AI 推理的場景中,由于函式的代碼包目前僅支持解壓后 500 MB 的大小,因此一些很大的依賴庫,無法隨著代碼包上傳,或上傳為層;在這種情況下,一些依賴庫或依賴檔案例如 AI 推理所需要的模型,需要在函式啟動運行時從外部例如物件存盤中下載到函式的臨時空間中,下載和解壓程序會大大拉長函式的啟動時間,造成初始化耗時變長,影響函式的實際執行,這個問題同時也在一些 Nodejs 的運行環境中容易出現,node 的 modules 依賴較多的情況下,很容易超過代碼包的體積大小限制,通過掛載使用 CFS 提供的共享可擴展空間,可以將依賴包放置到外部空間中,來避免受限,這種情況下,依賴包可以通過另一個掛載了同樣 CFS 空間的函式甚至是 CVM 虛擬機來進行方便的管理,在 AI 推理場景中,模型都可以通過共享的 CFS 來很容易的從訓練的環境或虛擬機中完成更新,

在使用云函式進行物件存盤檔案上傳觸發的音視頻轉碼場景中,CFS 的引入一樣可以擴展音視頻轉碼可以處理的檔案大小,在受限臨時檔案存盤空間大小的情況下,音視頻轉碼之前僅能進行小體積視頻檔案或音頻檔案的下載、轉碼和上傳,而大體積視頻的處理,需要利用物件存盤來進行分段的下載、轉碼、上傳和拼接,通過 CFS 的擴展空間,可以支持進行大體積視頻檔案的轉碼處理程序,同時,在大體積的視頻檔案處理上,通常利用云函式的多并發能力,會通過將視頻檔案分片、分別轉碼處理、再次合并轉碼后檔案的處理流程,通過這種流程,可以大大加速大檔案的處理速度,充分利用函式的多并發處理能力,在這種處理流程上,可以通過 CFS 的擴展,以及跨多并發實體多函式的能力,在同一個 CFS 的空間中,由不同函式分別來完成分片、轉碼、合并的作業,通過這種方式,大大簡化了開發方法,降低了檔案操作的復雜性,
通過對接 CFS 檔案存盤與 SCF 云函式,為云函式帶來了很多的擴展使用場景,除了上面提到的 3 種之外,還有很多方面可以去嘗試,使用 CFS 來解決 Serverless 應用開發程序中碰到的存盤問題,例如可以通過 CFS 來存盤全域的業務配置資訊,并在多個函式間共享實作配置共享;可以通過 CFS 存盤 Web 服務中用戶的 session 記錄這類狀態資料等場景,
我們也期待更多的 Serverless 應用開發者,從 CFS + SCF 的使用程序中,持續發現和探索更多的應用場景,
作者演講回放地址:Tencent Serverless Hours 第七期
One More Thing
立即體驗騰訊云 Serverless Demo,領取 Serverless 新用戶禮包 ?? serverless/start
歡迎訪問:Serverless 中文網!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169298.html
標籤:其他
