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。
(延伸閱讀:4 種方法,確保 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 中,資料存儲在一個高擴展性的表格中。這個表格是由行跟列所組成,每一行中都有一個值註冊在 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 | × | × | × | ◯ |
資料加密 | ◯ | ◯ | ◯ | ◯ |
講到這邊,歡迎繼續閱讀下一篇:Google 儲存空間(二): Cloud Storage/ Datastore / Bigtable / SQL 計價方式與使用優勢了解詳細的計價方式,以及 Google Cloud 儲存空間的具體優勢吧!
瞭解更多:該為您的資料選擇哪一個 GCP 存儲服務
(原文改寫自:https://www.apps-gcp.com/gcp-storage-service/)