GCP 存儲服務(一): Cloud Storage/ Datastore / Bigtable / SQL 介紹與比較

GCP 的儲存空間與資料庫 – 各產品介紹

Google 根據不同的類型及需求,在 GCP 上提供了多種不同的存儲服務。本文將根據產品特性來介紹 Cloud Storage/ Cloud Datastore / Cloud Bigtable / Cloud SQL。

Google Cloud Storage

Google Cloud Storage(GCS)是 Object storage,易於管理、耐久性好、實用性高。為了能讓您更了解 GCS,以下是 GCS 服務的架構。(示意圖如下)
• GCP Project:收費的單位
• Bucket:用於存儲資料的容器
• Object:要被存儲的資料

當您新增一個 bucket 來存儲資料時,可同時指定此 bucket 的名字、資料存放的地點、預設的 bucket 的 storage class。(之後您也可以為每一個 object 更改 storage class)
Google Cloud Storage 裡總共有四種類別。根據不同的 class, 可用性, 最短保留期限,計價方式皆有所不同。(如下表)

 

可用性 最短保留期限 計價方式(GB /月) 存取頻率
Multi-regional 99.95% $ 0.026 *

Data retrieval:免費

高,在regional之間
Regional 99.9% $0.02 *

Data retrieval:免費

高,在一個regional之內
Nearline 99.0% 30天 $0.01 *

Data retrieval:$ 0.01 / GB

約 1 次/月
Coldline 99.0% 90天 $0.007 *

Data retrieval:$ 0.05 / GB

約 1 次/年

*依台灣地區(asia-east1)計算。資料來源

不論是哪一種類型,都支援以下幾點:
• 
透過一樣的工具和 API 去存取資料 (XML API、JSON API、GCP console等)
• 資料保護:皆具備相同的 OAuth ,對於資料存取有嚴謹的控制
• 以保持高耐久性為設計初衷(99.999999999% 的可持續性)。
• 低延遲性(第一個 byte 的傳輸時間約為幾十毫秒)
使用加密來提高存儲相同資料的安全性

Performance
每個 bucket 最初的 IO 容量約為每秒 1000 個 write request 和 5,000個 read request。這代表對於1 MB的 object,每月總共可以寫入 2.5 PB 和 讀取 13 PB。如果特定的 bucket 讀寫需求提高,Cloud Storage 會自動的此 bucket 的 IO 容量分散到多個伺服器之中。

存取控制
您可以透過結合以下選項來了解 Google Cloud Storage 的存取控制。
• IAM權限:允許存取 Project 裡的所有 bucket 和 object。透過 IAM,您可以控制對整個 project 所有 bucket 和 object 的存取權限, 但是無法針對個別 bucket 或是 object 做控制
• Access control list(ACL):允許對各個 bucket 和 objects 進行讀寫的存取。當您需詳細地控制個別的資源時,可以使用 ACL。
• Signed URL:透過被產生的 URL 網址可以進行存取和讀寫。無論取得共享網址的人是否擁有Google 帳戶,每個取得共享網址的人皆可在特定的時間存取 object。
• Signed policy document:指定可以上傳到 bucket 的內容。在政策文件中,可以比 Signed URL 更精準地掌握像是檔案大小、內容類型等上傳特徵。網站擁有者可透過 Signed policy document 允許訪問者將檔案上傳到 Google Cloud Storage。

Google Cloud Bigtable

Cloud Bigtable 是高擴展性的 NoSQL 資料庫,適用於低延遲性和高生產量的工作負載。它是一個分散式儲存的資料庫,可以擴展到數十億行和數千列,這讓您可以儲存數 TB 和數 PB 的資料。它也同時具備高實用性,當您寫入資料時,它將被同步複製到 3 個(或以上) 的伺服器。

如下圖所示,當您使用 BigTable 時,客戶端的請求將通過前端伺服器發送到 Bigtable node。(Bigtable node> Bigtable cluster> Bigtable instance)。一個 cluster 的請求分別會由多個 node 所各自處理,所以在 cluster 上增加越多的 node 就可處理更多的請求。

從 Bigtable 表格內部可分為多個 “tablets”,tablets 存儲在 Google 的資料系統中。每個 tablets 皆與個別的 Bigtable node 相關。資料並非存儲在 node 上,但每個 node 都有一個指向一組 tablets 的 pointer。因此,將如下圖所呈現:
• Tablet 在 nodes 之間的移動(重新調整)很快。
→實際資料不會被複製,只會更新每個 node 的 pointer。
Node 從 failure 中恢復得很快。
→如果您要取代一個 node,您只要將 metadata 移動至新的 node 即可。
即使 node 發生故障,資料也不會遺失。


當您要使用 Bigtable 時,請新建一個 Bigtable VM。它預設是 3 個 node,但您也可以透過新增 node 來增加生產量和 QPS(每秒 queries 的次數)。

在 Bigtable 中,資料存儲在一個高擴展性的表格中。這個表格是由行跟列所組成,每一行中都有一個值註冊在 index 中,該值將成為該行的關鍵字。您可以掃描關鍵字但不能掃描列的名稱。

此外,Bigtable 僅支援對單一個 row 的 transaction,不支援跨 row 的 transaction。 Bigtable 在設計上藉由限制資料一致性 (consistency) 的範圍 (只確保對單一個 row 的 consistency 而不支援跨 row 的 consistency),來增加服務的可擴展性(scalability)。也就是說因為兩個 row 可能在不同機器上所以做不到 consistency。但是因為 row 可以分散到很多不同機器上,所以擴展性會比較好。

Performance
如果運作正常,下表是每個 node 的 performance 數據。它可能會因 loading 和行列的規模而有所差異。

 

存儲類型 Read Write Scan
SSD 10,000 QPS * @ 6毫秒 10,000 QPS @ 6毫秒 220 MB / s
HDD 500 QPS @ 200毫秒 10,000 QPS @ 50毫秒 180 MB / s

*QPS(每秒查詢次數)

Google Cloud Datastore

Datastore是一個高擴展性且完全代管的 NoSQL 資料庫,可以使用在應用程式的後端。它是個可自動處理被存放於多個伺服器資料的資料庫,也會根據應用程式的 loading 進行自動的複製和調節。這項功能也同時被用在 Google App Engine 的資料庫中。
Datastore 是基於 Bigtable 的架構進行設計,同時也補足了 Bigtable 中所欠缺的功能。資料會被轉換成 byte array 並儲存於 Bigtable 中。
ACID transaction:transaction 是可選擇的。和 Bigtable 相比,Bigtable僅支援一行的 transaction,Datastore 最多可支援到 25 行。
SQL 類的查詢:Datastore 可利用索引 (index) 來取得符合特定條件的 object。但需注意的是,在使用索引查詢時有些限制 (例如:吻合部分字元串、不支援全文搜索..等)。
索引:Datastore 的 queries 是透過一至多個索引來計算在 datastore 中, 你可以根據某一類 entity 的一連串 property 定義 index。
*註:在 datastore 中,property 代表著一般 SQL database 的 field (某個欄位),entity 則是對應到 row。

Google Cloud SQL

Google Cloud SQL 在 GCP 上提供了完全代管的 My SQL 和 PostgreSQL 資料庫。在 MySQL 功能上,Cloud SQL 與那些提供本地代管服務幾乎相同。Cloud SQL 具備高效能和高擴展性,每個 VM 提供高達 10 TB 的存儲容量、25,000 IOPS、208 GB 的記憶體。
Google Cloud SQL 可以自動完成像是備份、複製、修改程序、更新等功能。也因為它使用 Google Compute Engine,您可以通過即時搬遷來保障高可用性。當然它也可以輕鬆地與 Google Compute Engine 和 Google APP Engine 等 GCP 其他服務合作。

統整 GCP 各存儲服務

經過上述的介紹,以下為您統整了 GCP 上的各存儲服務。

 

Cloud Storage Bigtable Datastore Cloud SQL
儲存類型 Object (BLOB) Store NoSQL
Wide column
NoSQL
Document
Relational SQL
要儲存的資料類型 二進制資料
object data
RAW byte
character string
整數、小數點、文字串、日期、二進制資料 MySQL支援的資料類型如:整數、小數點、文字串、日期、二進制資料、BLOB類型
延遲 小於約5毫秒(針對同一地區的網絡延遲)
Transaction管理 × ×
資料儲存區域 -Multi-Regional:
US / EU / Asia
-Regional:
US / EU / Asia
Select only zone.
(US / EU / Asia)
-Multi-Regional:US / EU
-Regional:
US / EU / Asia
-Regional:
US / EU / Asia
可選擇台灣地區 ×
(亞太區僅有東京、雪梨)
Complex query × × ×
資料加密


瞭解更多:該為您的資料選擇哪一個 GCP 存儲服務
下一篇將為您介紹 Google 各項存儲服務的計價方式和應用。
想知道更多 GCP 的內容嗎?趕快聯絡 GCP 專門家了解更多資訊吧。
(原文改寫自:https://www.apps-gcp.com/gcp-storage-service/)

連絡我們