跳至主要內容
ESC
PCA 雲端架構師之旅 — 第 8/13 篇

PCA 雲端架構師之旅 08 — GCP 儲存服務選擇

PCA 雲端架構師之旅 08 — GCP 儲存服務選擇
Updated: 2026-07-17

上一篇我們把資料的脾氣摸清楚了:要存多久、多大、讀寫比例、能忍多少延遲。這一篇就是收割的時候——把這些特性對應到實際的 GCP 服務名字。

聽起來像查表就好,對吧?偏偏這是整份 PCA case study 最會咬人的地方。GCP 一字排開七個儲存服務,每一個旁邊都站著一個「長得超像但其實不對」的替身。Cloud SQL 旁邊站著 Spanner,Firestore 旁邊站著 Bigtable,選錯一個,那整題就跟著陪葬。

這是 13 步驟 PCA 雲端架構師之旅 的第 8 站。前面把需求收乾淨了,現在輪到動真格的選型。

依物件或資料庫、交易或分析、資料模型與全球規模,選擇 Cloud Storage、Cloud SQL、Spanner、Firestore、Bigtable 或 BigQuery 的決策圖

圖解:先問資料是不是檔案,再分交易與分析;交易資料接著看關聯模型、存取方式與是否需要全球強一致。檔案進 Cloud Storage、一般關聯交易先看 Cloud SQL、全球關聯交易看 Spanner、文件看 Firestore、大量低延遲 key-range 存取看 Bigtable、分析則進 BigQuery。

題目從來不會直接報服務名給你

考試最壞心的地方在於:它幾乎不會寫「請選用 Spanner」。它會丟一段業務描述,等你自己翻譯。像這樣:

  • 「全球用戶、強一致、金流交易、每秒數千筆寫入」——這是在點名 Spanner。
  • 「百 PB 時序資料、單鍵查詢 < 10ms」——這是 Bigtable 的主場。
  • 「分析師要用 SQL 查半年內的訂單」——這在喊 BigQuery。

你的工作,就是把這些形容詞翻成服務名。而我看過太多人栽在三個地方:

第一種,把 Cloud SQL 當成萬用解。看到「資料庫」三個字眼睛一亮就選 Cloud SQL,完全沒看後面那句「全球」或「每秒上萬筆」。Cloud SQL 是好東西,但它有它的天花板。

第二種,Firestore 跟 Bigtable 分不清。兩個都掛著 NoSQL 的招牌,新手就以為可以互換。實際上這兩個的設計哲學差到不行——一個是給前端 App 即時同步用的,一個是給每秒灌幾萬筆時序資料用的,硬湊在一起就是災難。

第三種,忘記 BigQuery 不接前端交易。BigQuery 能做的事情太多了,多到讓人忘記它「不能」做什麼。它不是拿來接使用者每一次下單點擊的。

這三個雷之所以致命,是因為它們在現實裡也天天有人踩。我看過不少團隊一開始把什麼都塞進 Cloud SQL,連分析查詢都直接打上去,結果一跑大報表就把線上交易拖垮——OLTP 跟 OLAP 共用一個庫,遲早出事。考試只是把這種痛濃縮成一道選擇題而已。

📝 考場提點

拿到儲存題,先不要急著看選項,先在描述裡圈關鍵詞:圈出「全球 / global」「強一致 / strong consistency」「每秒 N 筆」「時序 / time-series」「分析 / analytics」「檔案 / 物件」這幾類字眼。這些字幾乎都是服務名的暗號。選項裡那個「技術上也行得通、但規模或成本不對」的選擇,通常就是專門設計來騙沒圈關鍵詞的人。

七個服務,一張表先記在腦子裡

選型前,這張對照表得先燒進記憶。考場上你沒時間現推,得能反射性地說出每個服務的定位、一致性模型跟規模天花板。

服務類型最適場景一致性規模上限
Persistent Disk (PD)BlockVM 掛載磁碟、資料庫底層單盤 64 TB
Cloud Storage (GCS)Object圖片、備份、資料湖、靜態網站強(物件層級)無限
Cloud SQL關聯式(區域)中小型 OLTP、單區域交易單實例 64 TB
Spanner關聯式(全球)全球交易、金融、多區強一致全球外部一致PB 級
Firestore文件 NoSQL行動 App、即時同步、低寫入量強(文件層級)PB 級
Bigtable寬列 NoSQL時序、IoT、廣告、推薦系統單叢集強一致;跨叢集複寫為最終PB 級,高吞吐
BigQuery資料倉儲分析型查詢、報表、ML 訓練資料EB 級

表格背歸背,但真正幫你做決定的是底下這幾條分水嶺。每一條都是一刀,砍下去就排除掉一半選項:

交易型還是分析型? 也就是常聽到的 OLTP 對 OLAP。要接使用者一筆一筆的交易(下單、改個資、更新庫存),走 Cloud SQL、Spanner 或 Firestore;要做事後的聚合分析、跑報表、餵 ML 訓練,那是 BigQuery 的活。這條搞錯,後面全錯。

一個 region 夠不夠? 服務只在台灣一個 region 跑,Cloud SQL 綽綽有餘;要做到跨 region 還要強一致——同一筆訂單在台北寫、東京馬上讀得到正確值——那才輪到 Spanner 出場。Spanner 的全球外部一致(external consistency)是它最值錢的賣點,也是它最貴的原因。

有沒有 schema? 結構化、有欄位定義的資料走資料庫;圖片、影片、日誌、備份這種非結構化的檔案,丟 Cloud Storage。

要低延遲小量,還是高吞吐大量? Firestore 擅長前端那種「讀一筆寫一筆、但要快」的場景;Bigtable 擅長「每秒灌幾萬筆、之後要快速掃時序」的場景。同樣掛 NoSQL,這兩個其實活在不同的世界。

一個需求進來,我腦子裡跑的順序

實務上我拿到一個儲存需求,腦子裡會像過篩子一樣一層一層往下篩,幾秒鐘就能定位。你也可以照這個順序走:

先看它是檔案還是結構化資料。是圖片、影片、備份這類檔案,直接 Cloud Storage,收工。是有結構的資料,繼續往下。

接著問它是要拿來交易還是拿來分析。如果這份資料的用途是讀很多、做聚合、出報表,那它屬於 BigQuery,不要硬塞進交易型資料庫。

確定是交易型之後,問它需不需要跨 region 強一致。需要,Spanner;不需要,繼續篩。

再來分關聯式還是 NoSQL。需要 JOIN、有複雜關聯、要跑交易,關聯式,走 Cloud SQL。是 NoSQL,最後一刀——

寫入量是不是又大又偏時序 / IoT? 是,Bigtable;不是,Firestore。

這條主線之外,還有兩個常被忘記的旁支。一個是冷資料:要存超過一年但幾乎不讀的東西(合規歸檔、舊備份),別放在熱儲存燒錢,丟 Cloud Storage 的 Nearline / Coldline / Archive,依讀取頻率挑級別。另一個是掛載磁碟:純粹要給 VM 當本地磁碟用的,那是 Persistent Disk(或新一點的 Hyperdisk)的事,跟前面那條主線是兩回事。

📝 考場提點

這套篩選順序的價值在於「越早砍掉越省時間」。第一刀「檔案 vs 結構化」最該先問,因為它一刀就能把 Cloud Storage 的題目跟資料庫的題目分開。我看過考生在資料庫五個選項裡糾結老半天,回頭才發現題目講的根本是一堆使用者上傳的影片——那壓根不是資料庫題。先問大方向,再鑽細節,時間才夠用。

走一遍範例 — 登雲書店

老朋友登雲書店又上場了。它是電商平台,會員、訂單、商品、圖片、瀏覽紀錄、報表,全都要找地方存。我們把每一類資料丟進前面那台篩子,看它各自落在哪:

資料選擇為什麼
商品圖片、封面圖Cloud Storage Standard非結構化檔案、需 CDN 分發
舊版封面、檔案歸檔Cloud Storage Coldline30 天後幾乎不讀、成本最低
會員資料、訂單主檔Cloud SQL for PostgreSQL台灣單 region、讀寫比 7:3、關聯式 JOIN
購物車、即時推播 tokenFirestore低延遲、前端 SDK 直連、文件結構彈性
瀏覽紀錄、點擊串流Bigtable每秒數萬筆寫入、時序查詢
每日營收、用戶行為分析BigQuery分析師寫 SQL、跨月聚合
Cloud SQL 底層磁碟Persistent Disk SSD由 Cloud SQL 自動管理

這張表裡有兩格,正是試題最愛拿來下套的位置。

第一個,會員跟訂單資料為什麼不丟 Firestore。Firestore 是 NoSQL,看起來「現代」,新手很容易被吸過去。但登雲書店的訂單要去 JOIN 商品表、用戶表、物流表——這種跨表關聯的查詢用關聯式做才直觀,Firestore 天生就不擅長跨文件 JOIN。題目要是把 Firestore 放進選項,就是在等你只看到「NoSQL 很潮」就跳坑。

第二個,瀏覽紀錄為什麼不直接寫進 BigQuery。每秒數萬筆的點擊串流如果直接走 BigQuery 串流 insert,會撞上 quota,延遲也撐不住接前端。正確的做法是分兩段:Bigtable 先扛住高吞吐寫入,再每天 batch 一份到 BigQuery 給分析師查。一收一算分開,這是時序資料的標準姿勢,現實專案也是這樣搭的。

BigQuery 查詢編輯器貼上 SELECT * FROM bigquery-public-data.thelook_ecommerce.order_items 並以 WHERE created_at 篩選 2026-01-01 之後的資料,查詢尚未執行,編輯器下方已出現綠色勾勾與「這項查詢會在執行時處理 12.99 MB 的資料」的預估訊息

還沒按執行,BigQuery 就先亮出綠色勾勾告訴你「這趟會掃 12.99 MB」——別小看這行小字,它是 PCA 成本題的命脈。BigQuery 計費看的是查詢掃過多少位元組,不是回傳幾列,所以 SELECT * 會把整張表每一欄都掃一遍,帳單自然貴。只挑真正要的欄位、再拿分區欄位當 WHERE 條件,這個數字就會肉眼可見地往下掉;考場一看到「降低 BigQuery 查詢成本」,腦子第一個該閃過的就是這一格。

那 Spanner 呢?這題裡它一格都沒佔到,原因很單純:登雲書店現在只在台灣一個 region。Spanner 的價值要等到跨國電商階段才浮現——哪天台日韓共用同一個帳號、同一張訂單表、而且每一筆都要全球強一致,那才是 Spanner 該登場的時候。在單一 region 的此刻,Cloud SQL 的成本效益遠遠勝過 Spanner,硬上 Spanner 反而是燒錢。這個取捨點,後面的成本章節還會再回來算一次帳。

幾個「看起來合理、其實扣分」的選擇

把上面的篩選跑熟之後,剩下的就是認得出那些常見的誤判。這幾個我特別提出來,因為它們不只是考點,現實裡也是真金白銀的學費。

為了顯得專業而上 Spanner。 這大概是最常見的過度設計。題目根本沒提跨 region、沒提全球強一致,有人偏要選 Spanner,覺得「比 Cloud SQL 高級」。問題是 Spanner 的成本比 Cloud SQL 高一大截,而 PCA 考題超愛拿成本當排除條件——題目裡只要出現「財務長要求控制成本」「預算有限」這類句子,那個過度設計的選項基本上就是設計來淘汰你的。需求沒講的東西,不要自己腦補上去。

拿 BigQuery 當即時交易後端。 BigQuery 的強項是 scan PB 級資料做聚合,它不是設計來接每秒上千筆 UPDATE 的。看到「即時訂單狀態更新」「即時庫存扣減」這種字眼,第一反應就該把 BigQuery 從選項裡劃掉。

以為 Persistent Disk 跟 Cloud Storage 可以互換。 這兩個根本不是同一種東西。PD 是掛在 VM 上、給作業系統當區塊磁碟用的;GCS 是透過 HTTP 存取的物件儲存,自帶生命週期管理、能直接接 CDN。把使用者上傳的圖片塞進 PD,等於白白丟掉 CDN 分發跟自動分層降溫這些能力,又貴又難擴展。我看過有人圖方便把上傳檔案全堆在 VM 的磁碟上,後來流量一大、跨機器要共享檔案時,整個架構動彈不得——這種坑現實裡比考試裡還痛。

延伸閱讀


下一步:資料各就各位之後,下一篇要處理怎麼把流量穩穩送進來——網路與 Load Balancing

系列導航

🎯 換你練習

理論讀完,換自己來。到 架構師設計工作坊 · 步驟 8 填入你的 case study,邊寫邊內化。

PCA 雲端架構師之旅 — 8/13 完成 查看系列全覽 →

留言討論

徽章解鎖!