阿里云OSS比云硬盤要便宜很多,而且阿里云提供一個叫做ossfs的工具,可以將OSS掛載成本地文件系統,如果使用docker的話,也可以很容易實現一個docker volume的插件,豈不快哉!
測試幾種情況:
ossfs掛載成本地文件系統后:
head -c 100 會不會很快?
測試發現,不會很快,ossfs會在/tmp目錄生成一個臨時文件,免備案主機,下載的數據遠不止100字節; 所以,對于特別到的文件來講,是受制于本地磁盤的容量的。
寫入是如何實現的?寫大文件時,會不會占用大量內存或本地磁盤?
寫入大文件時,會在 /tmp 下創建一個臨時文件(該文件打開后立即刪除的,只能通過ossfs進程來看),寫完后再上傳到oss上; 所以,寫入的文件大小同樣受制于本地磁盤的容量。
總結:
ossfs 將oss掛載成本地文件系統后:
上傳和下載時總是先寫入本地磁盤 (/tmp 目錄);
整體讀寫效率較差;
對于單個的大文件的情況,要考慮本地磁盤容量是否夠用;
下載時,雖然先下載到臨時目錄,但是文件并不緩存;
再次訪問依然需要重新下載 上傳時,服務器租用 免備案服務器,雖然先寫本地文件,應用層依然要等到文件上傳完畢后才能返回(因為oss是對象存儲,寫入對象前必須先知道對象的大小);
具體表現為,fclose觸發ossfs的文件上傳,但是需要等到文件上傳完成后,fclose才算執行完;
對于 PHP 來講,文件的fclose即使不顯式調用,結束前也會隱式調用的 所以:
ossfs 需要考慮適用場景 ossfs比較適合小文件的場景 ossfs不解決單個文件超過本地磁盤容量的問題;或者說,可能通過操作多個文件,而且有可能多個文件的大小之和會超過本地磁盤容量 對象存儲畢竟是對象存儲,不能因為可以掛載到本地文件系統就變成了塊兒存儲