哈囉大家好,我是古古
上一篇文章有先簡短提到了 Google Cloud 中的數據儲存服務分成三種分類,分別是「一般檔案的儲存服務」、「SQL 的儲存服務」以及「NoSQL 的儲存服務」這三大類
所以這篇文章,就會接著來介紹第一種分類「一般檔案的儲存服務」,也就是 Cloud Storage
Cloud Storage 是 Google Cloud 中的一般檔案儲存服務,舉凡要儲存的檔案是影片、圖片、或是任何的二進制檔案 (Blob),就是會使用 Cloud Storage 來存
Blob 的全稱是 Binary Large Object,中文翻譯為「二進制檔案」,舉凡一般最常見的影片、圖片、文件、ppt...等等,這些都是屬於 Blob 的一員
除了上述這些檔案之外,其實像是系統備份檔案、log 備份、build 好的 docker image、甚至程式運行過程中產生的檔案....等等,這些也都是屬於 Blob 的一員,所以 Blob 其實比想像中還常出現在我們的身邊
因此如果要分類的話,舉凡那些 「沒辦法使用 SQL 和 NoSQL 來儲存的資料」,就通通可以算是 Blob 的一員
而只要你是屬於 Blob 的檔案,在 Google Cloud 裡面就都是透過 Cloud Storage 來儲存,所以換句話說的話,非 SQL 和非 NoSQL 的那些數據們,就全部都塞進 Cloud Storage 就對了!
補充:這邊有提到 Structured data 和 Unstructured data 的定義
- Structured data:指那些有被組織化過、很好進行分析的數據,像是 SQL 和 NoSQL 的數據都是屬於這一類
- Unstructured data:和上面的相反,舉凡那些不是 SQL 和 NoSQL 的,像是影片圖片這種 Blob 二進制檔案,就都是屬於 unstructured data
在 Cloud Storage 服務中,我們可以創建許多個 bucket (桶子) 來儲存數據,而每一個 Blob 二進制檔案 (ex: 圖片),就可以儲存在指定的 bucket 裡面
這裡大家可以先把 bucket 想像成是資料夾的概念,每一個 bucket 就是一個資料夾,根據不同的 bucket,我們可以設定該 bucket 的權限和等級,分別進行管理
所以在 Cloud Storage 中,基本上就是以 bucket 為單位在進行管理的,不同用途的檔案,就會放在不同的 bucket 中來管理
有了 Bucket 的概念之後,我們可以先跳來介紹 Cloud Storage 中的四種儲存等級,後續再回頭細講 Bucket 的相關設定
在前面有提到,Cloud Storage 中儲存的都是 Blob 的二進制檔案 (ex: 圖片),而每一個檔案,都必須要指定要存在哪一個 bucket 桶子裡面
針對每一個 Bucket,Cloud Storage 設計了四種儲存等級,依照 「該數據被存取的頻繁程度」 來區別,因此我們是可以根據數據存取的頻繁程度,去選擇該 bucket 想要套用什麼樣的等級的
Cloud Storage 中的四種儲存等級分別為:Standard Storage、Nearline Storage、Coldline Storage、Archive Storage
適合那些每 90 天才會想存取一次的數據
第三貴,也是有低消,data 要放滿 90 天才能被刪除
要查看 data 同樣需要等 Google 撈 data 回來,也需要多付一筆費用
適合那些每 365 天才會想存取一次的數據
最便宜,也是有低消,data 要放滿 365 天才能被刪除
要查看 data 要等最久,也要付最多錢
從上述 Cloud Storage 提供的這四種儲存等級來看,基本上可以發現 Cloud Storage 就是 以「數據存取的容易程度」來決定他貴不貴,越方便存取的就越貴,越難存取的就越便宜
因此大家想要省錢的話,在 data 的管理上面就非常重要,像是以前自架主機的時候不會想那麼多,檔案創下去之後後續就不管了,但是用了雲端服務之後就要切的特別細
舉例來說,光是 log 這件事,就可以切成好幾個階段來儲存:
透過上面的介紹,可以看到在 Cloud Storage 裡面,基本上就是以 bucket 為單位來進行管理和設定,而 bucket 在設定上,也是有一些注意事項的
一定得先創建一個 bucket 出來,才能夠將檔案上傳到 Cloud Storage 中的 bucket 裡面,所以沒有先創建 bucket 的話是沒辦法上傳檔案的
在創建 bucket 時,我們可以自己取這個 bucket 的名字,但是要注意的是,這個名字必須得是「全世界唯一」,所以不可以和其他 bucket 撞名就對了
另外在 Cloud Storage 中的所有 bucket,都是會出現在公開的列表上的,所以 bucket 的名字是所有人都看得到的,因此建議就不要將敏感資訊放在 bucket 的名字上面,以免洩漏敏感資訊
如上一個篇幅所述,bucket 是可以依照 「數據被存取的頻繁程度」,來選擇想要套用哪個儲存等級的
像是我們可以創建兩個 bucket,一個是 my1、另一個是 my2,my1 就設定成 Standard Storage,負責裝需要即時存取的 data,而 my2 則可以設定成 Nearline Storage,負責裝沒那麼需要即時存取的 data
因此到時候再上傳檔案時,就可以根據該檔案的使用情境,決定要上傳到 my1 還是 my2 bucket 裡面
在創建 bucket 時,可以選擇該 bucket 要創建成 region、multi-region 還是 dual-region 的
bucket 本身沒有限制上傳的檔案大小,所以要上傳多大的檔案都是可以的
可以使用 IAM 來設定整個 bucket 能讓誰存取(有關 IAM 的部分後續的系列文中會介紹),不過 bucket 也有保留彈性,可以單獨設定裡面的某一個檔案權限
所以換句話說的話,就算我們設定了這個 bucket 只能讓內部的人存取,但是仍舊可以保留彈性,單獨設定這個 bucket 中的某個檔案,將他開放給外部人士存取的
每個檔案上傳到 Cloud Storage 中之後,就不能夠被修改,只能被覆蓋或刪除,也因為如此,所以在 bucket 中是支援檔案的版本控制,讓我們找回被覆蓋或是被刪除的檔案的
舉例來說,假設在 bucket 中已經有一個圖片 white.png,這時有人又硬要上傳一個同名的 white.png,並且在上傳時選擇覆蓋圖片的話,這時 bucket 中的 white.png 就會變成新的那張,但是如果我們回頭去查看 white.png 的歷史紀錄的話,仍舊是可以找到原本那張 white.png 的圖片的
但也因為 bucket 預設是把該檔案的所有歷史紀錄給存起來,因此如果保留太多歷史紀錄的話,反而會佔太多空間,所以大家如果不需要這麼多歷史紀錄版本,是可以去調整 bucket 的設定的(詳見下面第 8 點)
bucket 本身是支援許多種清理空間的方式的,譬如說我們可以將 bucket 設定成:
以上這些設定是可以同時一起套用的,所以透過這些設定,就可以定時定期的去管理 bucket 裡面的檔案內容,最大化管理空間出來(雲端上的每個 byte 都是錢啊!!)
在 Cloud Storage 中,最直覺的使用方式就是直接手動上傳檔案到 bucket 裡面,不過 Cloud Storage 真正強大的地方,是他可以和 Google Cloud 中的其他服務互動
譬如說當使用者透過 Compute Engine 中運行後端程式,去使用了上傳圖片的功能,那麼 Compute Engine 是可以將該圖片的資料轉存在 Cloud Storage 裡面,達到統一管理圖片的目的
或是說 Compute Engine 中的程式所產生的報表資料,也是可以放到 Cloud Storage 裡面儲存的,這樣就可以方便後續非工程的人員,直接透過 Cloud Storage 的介面查看該檔案,所以我們就不用再開發一個前端介面給他們下載檔案了,讚!
這篇文章介紹了 Cloud Storage 提供的是什麼樣的數據儲存服務,並且也介紹了他儲存數據的四種等級,最後也詳細介紹了 Bucket 的設定以及用法,讓大家對 Cloud Storage 中的 Bucket 運作邏輯有更多的認識
那麼下一篇文章,我們就會來介紹另一大分類「SQL 的儲存服務」中的第一個服務,也就是 Cloud SQL,那我們就下一篇文章見啦!
十分感恩。
譬如說當使用者透過 Compute Engine 中運行後端程式,去使用了上傳圖片的功能,那麼 Compute Engine 是可以將該圖片的資料轉存在 Cloud Storage 裡面,達到統一管理圖片的目的
請問,這是要用 api 方式去存取嗎?還是可以 mount 某一個 Bucket 到虛擬機的資料夾?
如果可以的話,要怎麼下指令?或者,在 /etc/fstab 可以直接做設定連結 Bucket ?
哇抱歉我只有用過 API 的方式去存取,沒用過 mount 或是 /etc/fstab 的用法😂,在 Google 的官方教學影片中好像也沒有特別提到這一塊,提供給你參考~
感恩,我自行研究看看。