- 利用 Cloud Run 提供靜態檔案 - 1
- 這篇部落格文章介紹如何使用 Google Cloud Run 提供靜態檔案。重點放在重新導向和效能提升。
AI 翻译的文章。
durumis AI 总结的文章
- 我們整合了 Google Cloud Storage (GCS) 和 Cloud Run,建立了一個 CDN 系統,可以有效地管理影像和網頁資源,並根據網頁瀏覽器的環境提供最佳化的檔案。
- 上傳的影像會轉換成 webp、avif 等多種格式並儲存,而文字檔案則會使用 gzip、br 等方法壓縮,以提供使用者最佳化的內容。
- 我們在全球 8 個區域部署了 Cloud Storage 和 Cloud Run,根據使用者的位置從最接近的區域傳遞資源,以最大程度地減少延遲並提升使用者體驗。
上一篇中說明了 Durumis (두루미스) 如何使用 Cloud Run 提供靜態檔案服務。
但是,與 robots.txt 或 favicon.ico 等檔案不同,發佈到部落格上的圖片檔案或網頁本身的資源無法簡單地視為靜態檔案處理。
因此,此類檔案需要使用與 Google Cloud Storage(以下簡稱 GCS)整合的 Cloud Run。
基本概念很簡單。當實時上傳圖片檔案或網站更新時,新的資源會上傳到 GCS,而當外部發出請求時,Cloud Run 會檢查 GCS 中是否存在檔案,如果存在則傳送檔案。
但是,實際運作方式比這複雜得多。
在將圖片上傳到 GCS 時,Durumis (두루미스) 通常會將圖片檔案轉換為三種格式。
如果上傳的是 jpeg 或 png,則會將該圖片檔案同時轉換為 webp 和 avif 並儲存。
所有圖片檔案都會以沒有副檔名的形式透過 URL 進行請求,當發出請求時,Cloud Run 會檢查請求的網頁瀏覽器的標頭,依序檢查 avif、webp,確認網頁瀏覽器是否可以接收這兩種圖片檔案,如果這兩種檔案都無法接收,則會傳送 jpeg 或 png。此外,除了簡單的格式轉換外,還會根據網頁所需的尺寸預先調整圖片大小,並儲存/傳送。
圖表
文字檔案也是一樣的。
網站需要許多資源,除了圖片外,還有 js 和 css 等文字檔案。
js 和 css 檔案也與圖片類似,上傳時會使用 gzip 和 br 進行壓縮並儲存,並在請求時直接傳送網頁瀏覽器支援的檔案。
CDN 的作用不僅僅是快取內容。在 Google Cloud Platform(GCP)中,可以將 Cloud CDN 功能直接連接到 Google Cloud Load Balancer(GCLB),從而提供更強大的功能。
Cloud CDN 從後端服務接收數據並儲存,然後將其傳遞給用戶端。在此過程中,Cloud CDN 可以根據用戶端請求標頭傳送最佳化的檔案。藉此,即使對於相同的 URL,也可以提供不同格式的內容。
例如,對於相同的 URL '/image/tempImage',
- 如果是圖片檔案
- 會根據瀏覽器的『Accept』標頭傳送不同格式的圖片。
- Chrome 瀏覽器通常會以『image/avif,image/webp,image/apng』的順序顯示偏好。
- CDN 會依據此順序提供可能的格式,如果無法支援,則會改為 jpeg 或 png 格式。
- 同樣地,文字檔案也
- 會考慮壓縮方式的偏好。
- Chrome 瀏覽器支援『gzip, deflate, br, zstd』等壓縮方式。
- 例如,Durumis (두루미스) 服務目前支援 gzip 和 br,因此會優先傳送 br 壓縮檔案。
透過這些 CDN 的進階功能,可以提供符合使用者環境的最佳化內容,這將大幅提升網站效能和使用者體驗。
即使是 Cloud CDN,基本上也需要從 CDN 請求檔案到 Cloud Run,因此 Durumis (두루미스) 會在全球 8 個區域預先部署 Cloud Storage 和 Cloud Run,並預先配置資源,然後再傳送這些資源。因此,雖然會導致成本略微增加和工作量增加,但對使用者來說,可以體驗到大幅提升的延遲時間。
即使使用 Cloud CDN,基本上也需要從原始伺服器(在本例中為 Cloud Run)取得檔案。Durumis (두루미스) 最佳化了此架構,以提供更優質的服務給全球使用者。
Durumis (두루미스) 的全球最佳化策略:
- 在全球 8 個區域預先部署 Cloud Storage 和 Cloud Run
- 在每個區域預先部署必要的資源
- 在使用者發出請求時,從最近的區域傳送資源
這種方式雖然會導致成本略微增加和額外工作,但可以為使用者帶來以下優勢:
- 大幅提升的延遲時間
- 更快的內容載入時間
- 整體使用者體驗提升
此架構的視覺化如下所示:
透過此架構,Durumis (두루미스) 可以為全球使用者提供始終如一的快速服務。使用者無論身在何處,都可以從最近的區域取得內容,因此可以在全球各地以低延遲使用服務。
這種方法雖然需要付出更多努力進行初始設定和維護,但可以大幅提升最終使用者體驗。特別是對於提供全球服務的公司來說,此架構有助於提供具有競爭力的服務。
今天的 CDN 說明僅涵蓋基本概念。
事實上,也可以討論設定的細節,但由於各個雲端供應商(GCP、Azure、AWS)的設定方式不同,而且有點無聊,因此我選擇說明概念。
如果有機會,以後會進一步說明更詳細的部分。
那麼,下次說明將會探討如何同步多個(我們有 8 個!)區域的 Cloud Storage…敬請期待!
感謝您。