跳至主要內容

GCP 架構範本庫

6 個常見場景的參考架構,從設計決策到實作步驟,幫你快速建構 GCP 解決方案

6 架構範本
21 GCP 服務
3 難度等級

建議先讀架構圖與設計決策,再自行回答情境,最後核對參考判斷、驗證證據與官方來源。 六份範本各附查核範圍與日期;實作步驟是規劃指引,費用須依實際配置與用量另行試算。

電商平台架構

入門 依 Run、SQL、LB/CDN、儲存與網路用量試算

以公開商品圖片、私人訂單 API 與 PostgreSQL 交易為例,拆分可快取內容和使用者資料。Cloud Run 的擴縮仍受資料庫連線、應用設計與預算限制,不能由每日訂單量直接保證效能。

架構圖
使用者:先由 DNS 取得 LB 位址
          │ HTTPS
          ▼
global external Application LB
       URL map 依路徑分流
       ┌────────┴────────┐
       ▼                 ▼
/assets/*             /api/*
Cloud CDN             API 不啟用 CDN
backend bucket        serverless NEG
       │                 │
       ▼                 ▼
Storage 公開商品素材   Cloud Run API
(私有 origin 亦可)   (逐次驗證與授權)
                         │ VPC 路徑
                         ▼
                   Cloud SQL 私人 IP
                   (連線池與交易)

私人上傳 → 獨立 bucket+存取授權
(不放入公開素材或共用快取路徑)

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

Cloud Run 執行有身分驗證與逐次授權的 API;連線池、並行數與擴縮需配合 SQL 容量。
Cloud SQL (PostgreSQL) 儲存訂單與帳戶交易;規劃私人 IP 路徑、TLS/資料庫身分、連線預算及備份還原。
Cloud Storage 公開商品素材與私人上傳分開管理;耐久性、可用性、備份及使用者授權分別設計。
Cloud CDN 本例僅快取公開素材 backend;不把帳戶、購物車與私人訂單當成可共用內容。
Cloud Load Balancing global external Application Load Balancer 終止 HTTPS,以 URL map 導向素材 backend bucket 或 API serverless NEG;不保證單區域後端自動跨區復原。
設計決策(為什麼這樣選?)

本例以 Cloud Run 執行容器化 API;先量測延遲、並行請求、啟動與下游容量,再設定擴縮。縮至零不代表 SQL、負載平衡器、網路或儲存一起零費用。

Cloud SQL 用於本例的 PostgreSQL 交易與既有生態;是否改用 Spanner 取決於交易分布、擴展、延遲與營運需求,不由「電商」或日訂單數直接決定。

將公開素材路徑導向啟用 CDN 的 backend bucket,API 導向另一個 serverless NEG backend,本例不對 API 啟用 CDN。帳戶、購物車與訂單回應設定 no-store,逐次驗證身分與物件權限。

不要把 FORCE_CACHE_ALL 套到私人內容;它可能忽略 private/no-store。若未來對 Cloud Run 的公開回應啟用 CDN,須另查快取模式、標頭、cache key 與簽名 URL 的行為。

Private IP 需要 Cloud Run 到 VPC 的實際網路路徑。本例採 Direct VPC egress 或相容的 Serverless VPC Access,再依官方路徑使用 private IP/TCP 與所需 TLS;Auth Proxy 不會替應用建立 VPC 路由。

以實例數乘上每實例連線池大小作連線預算起點,另留發布、重試、其他服務與管理連線餘裕。maximum instances 可能短暫超出設定,不能當成資料庫總連線的硬保證。

商品圖片與私人上傳採分開的 bucket/權限與 URL 路徑;物件儲存與 BLOB 的成本依大小、讀寫、快取和網路估算,不宣稱固定便宜十倍。CORS 控制瀏覽器跨來源行為,不是使用者授權。

實作步驟(9 步)
  1. 先定義公開素材、私人檔案、帳戶與訂單的路徑、授權規則、延遲目標、尖峰負載及完整費用假設
  2. 建立 Cloud SQL PostgreSQL,規劃私人 IP 網路、資料庫身分、所需 SSL/TLS、備份與還原;依可用性需求選配置
  3. 設定 Cloud Run 到 SQL 所在 VPC 的 Direct VPC egress 或相容 connector,驗證 private IP/TCP 可達及 TLS 伺服器驗證;Proxy 與 IAM 不能取代路由
  4. 部署 Cloud Run API,設定最小服務身分、秘密存取、連線池、逾時與擴縮;記錄資料庫可用連線預算及保留餘裕
  5. 建立公開素材與私人上傳的獨立 bucket;若選 private bucket access 作素材 origin,依官方文件設定回源身分,不因此省略私人檔案的使用者授權
  6. 建立 global external Application Load Balancer,以 URL map 將素材導向 CDN backend bucket、API 導向同區域 Cloud Run 的 serverless NEG;API backend 不啟用 CDN
  7. 設定 HTTPS 憑證及 Cloud Run ingress,依需求限制外部直接連到 run.app;內部來源、IAM 與應用授權仍分開驗證
  8. 以兩個測試帳號驗證購物車、訂單與下載不會共用快取或跨帳號,檢查 CDN/瀏覽器/應用快取及 no-store;不得對私人內容使用 FORCE_CACHE_ALL
  9. 以尖峰、重試、發布及 SQL 中斷情境檢查連線池、退避與應用恢復;量測延遲、錯誤率、資料庫連線及費用,再調整容量

電商的快取、連線與檔案檢核

用下列情境檢查讀寫路徑與失敗情況。數字只是容量規劃練習,並非效能或費用保證。

展開 3 個設計情境

01 · CDN 會不會把 A 的購物車交給 B?

工程師把 /api/cart 與公開圖片放在同一個啟用 FORCE_CACHE_ALL 的 backend,認為 API 回應有 no-store 就不會被快取。

參考判斷與驗證證據

本例把 API 與公開素材分到不同 backend,API 不啟用 CDN。私人回應的 no-store 仍需保留,但不能拿它抵銷 FORCE_CACHE_ALL 或簽名 URL 的特殊快取行為;應用每次仍須授權。

應提出的驗證證據

以 A/B 與未登入狀態重複讀取同一路徑,檢查本文、快取標頭、CDN 日誌及瀏覽器快取;確認 A 的訂單/購物車從未成為 B 的共用回應。

02 · 100 個實例,每個 pool 10 條連線?

Cloud SQL 分配給應用的連線預算是 300,Cloud Run 規劃 100 個實例,每個連線池上限 10。部署 Proxy 就能解決嗎?

參考判斷與驗證證據

100 × 10 已是 1,000 條潛在連線的規劃值,超過這個練習的 300 預算。Proxy 不會擴大資料庫容量,也不會建立 private IP 路由。協調 pool、並行數與擴縮,保留發布和其他工作負載餘裕。

應提出的驗證證據

在測試環境分開驗證 VPC 可達、TLS/身分與連線池飽和;以發布、重試和尖峰量測實際連線。maximum instances 可能短暫超出,不能只靠乘法或單一上限宣稱絕不超載。

03 · 設了 CORS,私人檔案就安全?

收據與商品圖片混在同一個可公開讀取的 bucket。團隊把 CORS 的來源限制成官網,打算以此保護收據。

參考判斷與驗證證據

CORS 不會授權下載者,也不會阻止非瀏覽器直接請求。將私人上傳與公開素材分開,先驗證使用者與物件權限,再提供受控下載;不要讓私人檔案進入公開 URL 或共用快取路徑。

應提出的驗證證據

測試未登入、另一個帳號與直接物件 URL 的讀取,確認不能取得收據;也測試快取、已發行下載連結的有效範圍與到期行為。

查核日期:

本範例的素材/API 分流、私人回應快取、Cloud SQL 連線路徑、連線預算與檔案授權。情境為依來源推導的練習,未實測雲端效能或帳單。

查核來源(9)
選型與複習重點
  • Cloud CDN 快取公開且可共用的內容;帳戶、購物車與訂單需要獨立的授權與快取規則
  • Private IP、VPC 可達、連線加密、IAM 與資料庫身分是不同層;Auth Proxy 不會自動打通 VPC
  • Cloud Run 擴縮不會擴大 Cloud SQL 的連線預算,需協調 pool、並行數、實例上限與發布餘裕
  • CORS 不是檔案授權;公開商品素材與私人上傳要分開設計
  • 效能與費用都要有負載假設,不用「無伺服器」推導無限制擴展或整個方案免費

SaaS 多租戶應用架構

專家 依隔離模式、區域、容量與流量試算

以需要 Kubernetes 控制與分散式交易的 B2B SaaS 為例,使用 GKE、Spanner 與 Pub/Sub。先驗證負載、資料位置及隔離需求;多租戶本身不代表一定需要這組服務。

架構圖
租戶 A / B / C
      │ HTTPS
      ▼
Load Balancer + Cloud Armor
      │
      ▼
應用 API(GKE):驗證身分與租戶資格
      │ 伺服器建立租戶脈絡
      ├────────► Pub/Sub
      │             │
      │             ▼
      │       Worker:驗證工作範圍
      │             │
      ▼             ▼
    資料存取層:逐操作授權
             │
             ▼
          Spanner
  shared rows 或獨立 database
 (依隔離、CMEK、還原需求選擇)

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

GKE (Autopilot) 運行 Kubernetes 微服務,Google 管理節點;應用部署、RBAC、工作負載身分與網路規則仍需自行設計
Cloud Spanner 提供分散式關聯交易與水平擴展。資料隔離取決於 row/table/database/instance 模式及授權設計;SLA 需依實際配置查核
Pub/Sub 非同步處理通知與報表;訊息須帶有可信來源的租戶與工作脈絡,Worker 驗證範圍並以租戶加工作 ID 實作冪等
Cloud Armor 邊緣 WAF 與近似限流。IP 或 HTTP header 的聚合鍵不等於已授權租戶;精確的租戶配額需在驗證身分後處理
Cloud KMS 在需求成立時管理 Spanner database 的 CMEK;共用表不能按 tenant_id 指派原生 CMEK。金鑰控制不取代應用授權或合規驗證
設計決策(為什麼這樣選?)

本例選 GKE Autopilot 是因為需要 Kubernetes API 與工作負載控制。Cloud Run 也支援 WebSocket 和 gRPC,應比較逾時、重連、並行數與部署需求,不能只因使用這兩種協定就排除 Cloud Run。

只有在負載與分散式交易需求支持時才選 Spanner;一般 SaaS 也可評估 Cloud SQL。以實際配置的 SLA、應用 SLO、延遲、資料位置與成本驗證選型。

共用資料表的 tenant_id 主鍵前綴有助資料分組與存取局部性,並非自動 row-level security。先驗證身分與租戶成員資格,再由資料存取層對每次讀寫、join、批次與匯出限制租戶範圍。

Spanner 原生 CMEK 是 database 的加密設定;多個區域金鑰也不是逐列的租戶金鑰。需要每租戶獨立 CMEK 或原生備份/還原邊界時,優先評估每租戶一個 database;同一 instance 仍共用運算資源。

Cloud Armor 處理邊緣濫用流量,限流是近似值。不要直接信任客戶端可改寫的 tenant header;應用在驗證後依可信租戶脈絡執行配額、並行限制與稽核。

非同步工作延續租戶邊界:限制發布者 IAM、驗證訊息來源與工作授權範圍,Worker 不得只因訊息帶 tenant_id 就信任它。重送、快取、物件儲存及下載連結也須驗證不會跨租戶。

實作步驟(10 步)
  1. 先記錄租戶數、負載、資料位置、個別還原、金鑰與隔離需求,再決定 row/table/database/instance 模式及費用假設
  2. 建立 GKE Autopilot 工作負載,規劃 Kubernetes RBAC、Workload Identity Federation for GKE 與最小網路權限;這些控制不代替 SaaS 使用者授權
  3. 在 API 驗證身分及租戶成員資格,建立伺服器信任的租戶脈絡;檢查每個物件的動作權限,拒絕未授權租戶切換
  4. 依資料模式建立 Spanner schema;共用表的讀取、寫入、join、批次與匯出均限制租戶範圍,驗證索引與快取鍵也包含正確脈絡
  5. 限制 Pub/Sub 發布與訂閱身分,讓 Worker 驗證工作租戶與授權範圍,並測試重送及跨租戶同名工作 ID
  6. Cloud Armor 先以 preview 與日誌驗證 WAF/限流;租戶配額由應用在身分驗證後執行,測試偽造 header、共用 IP 與並行流量
  7. 若需要 CMEK,在建立 database 時規劃金鑰、位置與服務代理權限;在測試環境演練金鑰不可用與備份還原,不把金鑰停用當成逐租戶資料刪除
  8. 以租戶 A 的身分嘗試存取租戶 B 的測試資料,涵蓋 API、Worker、快取、匯出與下載;未授權操作均應拒絕且無資料副作用
  9. 依租戶需求演練還原、離租刪除與搬移;共用表須設計租戶資料擷取,原生整庫備份不能直接當作逐租戶還原
  10. 用 CI/CD 阻擋隔離回歸,量測 noisy neighbor 與應用 SLO,再驗證區域故障、復原時間與成本

多租戶設計檢核

先決定授權、金鑰、還原與資源的邊界,再選資料模式。以下是本範例的設計練習;請說出如何驗證,並回看下方查核來源。

比較四種 Spanner 資料模式

Row:共用資料表

資料與授權
每列帶 tenant_id;應用對每次操作授權並限制租戶範圍。
金鑰
共用 database 的原生 CMEK 設定,不能逐列指定租戶金鑰。
營運取捨
共享資源較有效率;逐租戶匯出、還原與搬移需另設計。

Table:每租戶一組表

資料與授權
表名/named schema 區分資料;可另設 FGAC,表名本身不是權限。
金鑰
仍共用 database 的原生 CMEK 設定。
營運取捨
要管理各組 schema 變更、表數限制與逐租戶還原工具。

Database:每租戶一個資料庫

資料與授權
可分開 database IAM、原生備份與還原;連線路由仍要授權。
金鑰
可為各 database 規劃自己的 CMEK。
營運取捨
同一 instance 仍共享運算;需管理配額、佈建與 noisy neighbor。

Instance:每租戶一個執行個體

資料與授權
Spanner 資源分開,亦可規劃不同 project 與管理邊界。
金鑰
在各自 database 規劃 CMEK、備份與位置需求。
營運取捨
隔離程度提高,資源與維運成本也增加;應用授權仍需實作。
用三個情境驗證隔離設計

01 · 換一個物件 ID,會讀到誰的資料?

租戶 A 已登入,資料表主鍵是 (tenant_id, invoice_id)。API 依網址的 invoice_id 讀取發票,工程師認為主鍵已經提供隔離。你要驗證什麼?

展開參考判斷與驗證證據

主鍵不會替這個 API 授權。伺服器先驗證使用者的租戶成員資格與發票操作權限,資料存取層再將租戶與物件範圍一起限制;不得只採用客戶端傳來的 tenant_id。

應提出的驗證證據

用 A 的身分讀取、修改、刪除 B 的測試發票,包含 join、批次、匯出與快取命中路徑。均不得取得 B 的資料,拒絕的寫入不得產生副作用。

02 · 一個 database,能逐租戶切換原生 CMEK 嗎?

A 與 B 共用 Spanner 資料表。A 要求獨立控制金鑰,且能獨立還原;設計者提議多建兩把 KMS key,再用 tenant_id 選 key。

展開參考判斷與驗證證據

Spanner 原生 CMEK 設定在 database,並不以 tenant_id 選金鑰。可先評估每租戶一個 database;若還需獨立運算或管理邊界,再評估 instance/project。應用層加密是另一套設計,會影響查詢與金鑰管理,不能當成同一功能。

應提出的驗證證據

在隔離的測試環境驗證各 database 的金鑰依賴與備份還原,並盤點共用 Worker、快取與匯出路徑。金鑰不可用可能影響資料庫可用性,不把停用金鑰當成逐租戶資料刪除。

03 · 改 tenant header,就能重置配額?

Cloud Armor 以 X-Tenant-ID header 限流,但客戶端可任意修改 header。背景工作也直接信任訊息中的 tenant_id。這兩處要如何補強?

展開參考判斷與驗證證據

把邊緣濫用保護、已驗證租戶的應用配額,以及背景工作的授權分開。Armor 限流是近似值;應用依驗證後的可信租戶脈絡記帳,Worker 檢查來源與工作範圍,冪等鍵包含租戶和工作 ID。

應提出的驗證證據

測試偽造/缺少 header、共用 IP、並行請求、重送訊息,以及 A/B 相同工作 ID。確認不能冒用另一租戶、借用其額度或讓合法工作互相去重。

查核日期:

本範例的租戶授權、Spanner 隔離/CMEK、邊緣限流與運算選型。情境檢核是依來源推導的設計練習,未驗證實際雲端部署。

查核來源(7)
選型與複習重點
  • Autopilot 管理節點,不會自動替應用實作租戶授權;WebSocket/gRPC 也不是 GKE 的專屬能力
  • Spanner 選型要有分散式交易與規模需求;SaaS、多租戶或高可用這些詞本身不足以決定產品
  • tenant_id 主鍵前綴是資料配置方式,不是自動 row-level security;每次物件操作都要授權
  • 每租戶獨立 database 可規劃各自的 CMEK 與原生備份,但同一 instance 的運算仍共享
  • Cloud Armor 近似限流與已驗證租戶的應用配額是不同控制;非同步工作仍要維持租戶邊界

資料分析管線架構

進階 依訊息保留、處理資源、寫入、查詢與儲存用量試算

以事件分析為例,從 Pub/Sub、Dataflow 到 BigQuery 與 Data Studio。先定義事件時間、重複資料與復原目標,再決定處理及寫入模式;串流寫入不代表儀表板每次讀取都會立即更新。

架構圖
來源:event_id+事件時間+schema 版本
  │ 發布確認/重試
  ▼
Pub/Sub topic
  │ 專用 subscription
  ▼
Dataflow streaming:驗證 → 視窗/彙總
  ├─► BigQuery(分析結果)
  │     └─► Data Studio
  │           (另有資料新鮮度設定)
  ├─► Storage(原始封存)
  │     └─► 獨立重播/核對流程
  └─► 錯誤資料目的地(管線明確分流)

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

Pub/Sub 解耦發布者與消費者;保留期限、重播設定及積壓監控決定可復原範圍。不同用途使用不同 subscription。
Dataflow 以 Apache Beam 處理事件時間、視窗與轉換;明確選擇處理模式、去重鍵及錯誤資料分流。
BigQuery 儲存分析結果;確認 connector 寫入語義,依查詢使用分區與叢集,量測掃描量及延遲。
Cloud Storage 依明確的封存路徑保留原始事件及 schema,供獨立重播;雙輸出不構成跨儲存交易。
Data Studio 原 Looker Studio,連接分析結果;資料新鮮度與快取影響可見時間,底層 BigQuery 查詢仍可能計費。
設計決策(為什麼這樣選?)

事件採穩定 event_id,區分事件發生時間與到達時間。Pub/Sub 預設至少一次且不保證排序;發布者重試與重播都可能讓業務事件重複。

Pub/Sub 可緩衝暫時中斷,但保留有期限;事先規劃 topic/subscription 保留及部署前 snapshot。已確認訊息的時間重播需要相應保留設定,不以緩衝層宣稱永不遺失。

Dataflow 的 exactly-once 處理不保證外部 API 副作用恰好一次。寫 BigQuery 時區分 STORAGE_WRITE_API 與 STORAGE_API_AT_LEAST_ONCE 等模式;選用後者就要接受或處理重複,不能只看管線名稱。

在管線內把解析/驗證失敗及 sink 可回報的失敗分流到錯誤目的地,保留原因與事件 ID。官方不建議將 Pub/Sub dead-letter topic 當作 Dataflow 管線錯誤處理的替代品。

BigQuery 與 Storage 是獨立輸出,不保證同時提交。封存、分析及重播都須記錄版本並核對筆數/ID;單一分支成功不代表另一份原始資料已保存。

依來源與業務定義 event-time 視窗、allowed lateness 與遲到修正策略。Data Studio 的資料新鮮度與查詢快取另計,端到端延遲應從來源事件量到畫面可見。

費用包含訊息傳輸與保留、Dataflow 執行資源、BigQuery 寫入/儲存/查詢、Storage 及跨區流量。分區只有在查詢能裁剪相應範圍時才減少掃描,不能保證固定月費或秒級查詢。

實作步驟(9 步)
  1. 定義事件 schema、event_id、事件時間、遲到容忍、延遲目標及可接受遺失/重複範圍
  2. 規劃資料位置與最小服務權限,建立 topic 及 Dataflow 專用 subscription,設定保留、重播與積壓告警
  3. 以固定測試事件涵蓋正常、重複、遲到與格式錯誤;發布端核對成功確認並保留重試識別
  4. 開發 Beam 轉換與視窗邏輯,明確分流錯誤資料;不要只設定 Pub/Sub dead-letter topic 期待捕捉所有管線失敗
  5. 依一致性需求選 Dataflow 處理模式及 BigQuery connector 寫入方式,對外部副作用設計冪等
  6. 分別建立 BigQuery 結果與 Storage 原始封存路徑,記錄事件 ID/schema/處理版本,演練單一輸出失敗後核對與補寫
  7. 依查詢建立分區及叢集,使用查詢計畫、掃描量與實測延遲驗證,設定用量與費用監控
  8. 連接 Data Studio,設定資料新鮮度與讀取權限,確認可見延遲及重新查詢費用
  9. 在測試環境演練中斷、部署、保留範圍內重播與遲到修正,核對遺失/重複並記錄復原時間

資料管線的復原與一致性檢核

先寫下資料可能在哪裡重複、遺失或延後,再展開參考判斷。這些是設計練習,沒有執行雲端故障測試。

展開 3 個設計情境

01 · 有 Pub/Sub 就能在任何時候重播?

管線停擺超過保留範圍,團隊想從一個月前重播所有已確認事件,但沒有事先保留或有效 snapshot。

參考判斷與驗證證據

Pub/Sub 不是無限期備份;先查實際保留、確認狀態與 snapshot 可用範圍。超出可用資料不能靠 seek 還原,需要另有可驗證的原始封存。

應提出的驗證證據

列出保留/snapshot 設定及最早可重播時間;在測試環境重播一段已知 ID,核對筆數、重複及遺失,不把 seek 成功當成歷史完整。

02 · 管線 exactly-once,通知就只發一次?

Dataflow transform 呼叫外部通知 API,開啟 exactly-once 處理後就移除通知去重。

參考判斷與驗證證據

transform 可能重試,外部副作用不在此保證內。以穩定業務 ID 設計通知冪等,另確認 BigQuery sink 的實際寫入模式;重新發布也不能只靠傳輸 ID 去重。

應提出的驗證證據

注入同 ID 重複事件與外部 API 逾時,查收件紀錄和結果表;證明業務通知沒有重複,並能辨識尚未完成的操作。

03 · 結果表成功,原始封存也成功?

BigQuery 已有結果,但 Storage 寫入遇到錯誤;團隊把兩個分支當成同一筆交易,直接刪掉來源。

參考判斷與驗證證據

兩個目的地沒有自動原子提交。先定義權威原始資料、核對與補寫流程,保留足夠復原窗口;也要處理分析端成功但原始封存缺漏的情況。

應提出的驗證證據

以已知事件集合測試其中一個輸出失敗,對照各目的地 ID 與版本,補寫後核對完整性;檢查錯誤分流與告警,而非只看 job 仍在執行。

查核日期:

本範例的訊息保留/重播、Dataflow 處理與錯誤分流、BigQuery 寫入、雙輸出及儀表板新鮮度。情境為依來源推導的練習,未實測雲端效能、故障或費用。

查核來源(8)
選型與複習重點
  • 至少一次傳遞、Dataflow 處理語義、sink 寫入語義及業務冪等是不同層次
  • Pub/Sub 緩衝有保留邊界;已確認資料的重播要事先規劃保留或 snapshot
  • Dataflow 管線錯誤應明確分流,不用 Pub/Sub dead-letter topic 代替
  • BigQuery 適合分析;分區裁剪要看查詢條件,儀表板還有資料新鮮度與查詢費用
  • 兩個輸出不是跨系統原子交易,原始封存與結果需能核對及修復

靜態網站架構

入門 依 LB 固定費、CDN、儲存、DNS 與建置用量試算

以公開官網/文件站為例,Cloud DNS 提供名稱解析,HTTPS 請求進入負載平衡器,再由 Cloud CDN 與 Cloud Storage 提供網站檔案。部署、快取、bucket 權限與費用分別設計;不是所有純靜態網站都以此方案最便宜。

架構圖
發佈流程(不在使用者請求路徑)
Git → Cloud Build → Storage 網站檔案

名稱解析(DNS 不轉送網頁內容)
使用者 → DNS 查詢 → LB 的 IP

內容請求
使用者 ── HTTPS ──► global external LB
                         │ 憑證/URL map
                         ▼
                Cloud CDN backend bucket
                         │ miss 時回源
                         ▼
                Storage 網站檔案 bucket
                  (可選私有 origin)

private bucket access:限制回源入口
不等於替網站訪客實作登入與授權

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

Cloud Storage 儲存可公開提供的網站產物;可採私有 origin 回源或依政策公開讀取,私人檔案另行管理。
Cloud CDN 在相容的 LB backend bucket 快取網站內容;回源、快取命中、瀏覽器副本與版本發布分開驗證。
Cloud DNS 提供域名解析,例如 A 記錄指向 LB IPv4;不代理 HTTPS 請求,也不是內容傳輸的下一跳。
Cloud Build 以最小部署身分建置與發布可追溯版本,保留回滾產物;成功發布不代表所有快取已更新。
Cloud Load Balancing 以 global external Application Load Balancer 提供 HTTPS frontend、憑證及 URL map,將請求導向 backend bucket。
設計決策(為什麼這樣選?)

本例使用 Cloud Storage、global external Application Load Balancer 與 Cloud CDN;不宣稱固定便宜 90% 或每月必在某個美元區間。依 LB、CDN、儲存操作、網路、DNS 與建置分項估算,低流量仍可能有固定費用。

Cloud Storage 本身不直接提供 HTTPS 自訂域名,本例由 LB 終止 HTTPS。DNS 只回傳名稱對應的位址,不會依序轉送 CDN 或網站內容;A 指向 IPv4,只有配置 IPv6 frontend 時才設定對應 AAAA。

公開網站內容不必一律讓 bucket 可公開讀取。可依相容的 LB/CDN 設定 private bucket access,以授權身分回源;這是 origin 存取控制,不等於限制哪些訪客可讀網站。

若改採公開 bucket,只放明確可公開的網站檔案;先查組織與 Public Access Prevention 政策,不為了範例逕自解除防護。私人檔案與會員內容不放入公開網站路徑。

Cloud Build 以最小部署權限發布可追溯產物,驗證後才切換版本。CI 成功不等於所有 CDN 與瀏覽器快取立即更新;需設計快取標頭、版本檔名、舊資產保留、失效與回滾。

Cloud DNS 是此方案可用的 DNS 供應者之一,既有 DNS 也能指向 LB。Cloud Build 的免費額度有適用條件,不代表 LB/CDN/儲存或整個方案免費。

實作步驟(9 步)
  1. 確認網站檔案可公開、預期流量、域名管理權、區域、恢復需求與費用項目;將機密、私人下載及建置憑證排除於網站產物
  2. 建立網站 bucket,規劃 index、404 與目錄路徑。選擇公開讀取或 private bucket access;本例可用私有 origin,先依相容 LB/CDN 文件確認身分與政策
  3. 以最小部署身分發布網站產物與正確的 Content-Type/Cache-Control;使用版本化靜態檔名,保留回滾需要的舊產物
  4. 建立 global external Application Load Balancer 的 backend bucket、URL map 與 HTTPS frontend,依 origin 模式授權回源,設定並驗證憑證
  5. 在 backend bucket 規劃 Cloud CDN 快取策略,測試 cache miss/hit、404、index、子路徑與網站更新;不要把私人回應放入共用快取
  6. 讓 DNS 的 A 記錄指向 LB IPv4;只有配置 IPv6 frontend 時才加入 AAAA。驗證解析與憑證可用後再切換正式流量
  7. 設定 Cloud Build trigger 與部署權限,先驗證版本化資產,再發布引用它們的 HTML;保留舊版本以支援仍持有舊 HTML 的瀏覽器
  8. 測試新版本、CDN 失效、瀏覽器快取與回滾;失效 CDN 不代表可清掉使用者瀏覽器已存的副本
  9. 監看網站錯誤、快取命中、傳輸量與帳單;低流量也檢查 LB 等持續配置的費用,不套用「幾美元」保證

靜態網站的請求、權限與發布檢核

先畫出真正傳輸內容的路徑,再檢查 origin、訪客與快取的邊界。每題都有可觀察的驗證證據。

展開 3 個設計情境

01 · DNS 解析成功,就代表 HTTPS 已就緒?

域名已解析到 IP,團隊認為 Cloud DNS 會把內容送進 CDN,因此沒有另外測試 HTTPS frontend、憑證與 URL map。

參考判斷與驗證證據

DNS 只提供位址。實際 HTTPS 連線必須到正確的 LB frontend,由相符憑證完成握手,再依 URL map 找到 backend bucket;各層可能分別失敗。

應提出的驗證證據

分開確認 A/必要時的 AAAA、LB frontend、憑證狀態、主機名稱與測試 URL 的回應;驗證 index、404 和子路徑,而非只看 DNS 查詢成功。

02 · 私有 bucket,就只有會員能看網站?

網站改用 private bucket access 回源,未設定登入。團隊認為 bucket 不是公開讀取,所以訪客已經得到身分與權限保護。

參考判斷與驗證證據

私有 origin 限制的是誰能直接向 bucket 取檔,不代表 CDN/LB 的訪客已登入。本例網站內容仍可公開提供;會員或私人下載須另設應用授權與相應快取政策。

應提出的驗證證據

分開測試匿名訪客經網站入口讀公開頁面,以及直接讀未授權 origin 是否被拒絕;確認私人物件不會出現在網站產物與可公開的 CDN 路徑。

03 · 上傳新檔並失效 CDN,所有人立刻更新?

CI 覆寫 app.js 後立即刪除舊產物,再執行 CDN 失效;團隊把這當作完整的發布與回滾策略。

參考判斷與驗證證據

瀏覽器可能仍持有舊 HTML/資產,CDN 失效不會清除這些副本。採版本化資產、合適 HTML 快取政策、先資產後 HTML 的發布順序與舊產物保留,再設計回滾。

應提出的驗證證據

用舊頁面、新工作階段、CDN miss/hit 與回滾版本檢查引用的檔名和快取標頭,確認不會發生舊 HTML 指到已刪除資產,也不把單次 CI 成功當成全球立即一致。

查核日期:

本範例的 DNS/HTTPS 路徑、公開內容與私有 origin、快取發布及費用假設。情境為依來源推導的練習,未部署 LB、改動 IAM 或測量實際帳單。

查核來源(8)
選型與複習重點
  • DNS 是名稱解析;HTTPS、憑證、URL map、CDN 與 bucket 才是本例的內容請求路徑
  • Cloud Storage 的 HTTPS 自訂域名需額外前端;本例採 global external Application Load Balancer
  • private bucket access 限制回源,不自動提供會員授權;公開讀取也必須符合組織與 bucket 政策
  • CI 成功、origin 更新、CDN 快取與瀏覽器快取是不同狀態,須分別驗證版本與回滾
  • 免費建置額度與低訪客量都不保證整個架構免費,需估算 LB/CDN 等費用

IoT 數據平台架構

進階 依連線、broker、訊息、分析與 Bigtable 容量試算

以 MQTT 裝置遙測為例,使用自管 broker、Pub/Sub 與分析服務。本例由 broker 終止 mTLS,分開裝置身分、topic 授權與後端 IAM;裝置管理、重連與資料復原仍需設計。

架構圖
裝置/閘道器:本地緩衝與重試
  │ MQTT over mTLS
  ▼
regional external passthrough NLB
  │ TLS 連線保留至 broker
  ▼
自管 MQTT broker 叢集
(裝置驗證+逐 topic 授權)
  │ bridge/publisher
  ▼
Pub/Sub topic
  ├─► 資料 subscription → Dataflow
  │     ├─► BigQuery(分析)
  │     └─► Bigtable(依需求選用)
  └─► 告警事件路徑(獨立訂閱/觸發器)
        └─► Cloud Run functions
              (通知冪等)

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

MQTT broker(自管) 處理裝置 mTLS 與 topic 授權;自行營運叢集、session、憑證輪替與撤銷,並設計離線/重連策略。
Cloud Load Balancing 本例用 regional external passthrough Network Load Balancer,讓 broker 終止裝置 mTLS;負載平衡不代替裝置或 topic 授權。
Pub/Sub broker 經整合 bridge/publisher 發布;分析和通知走獨立消費路徑,確認保留及重送邊界。
Dataflow 依事件時間解析、驗證與彙總遙測,明確分流無效資料,測試重複與遲到。
BigQuery 供歷史 SQL 分析與趨勢報表;不保證每筆裝置事件即時出現在儀表板。
Bigtable 有大量低延遲範圍讀寫需求時才加入;row key、流量偏斜及容量共同影響效能。
Cloud Run functions 以獨立事件路徑處理閾值通知;設計重試、事件去重及通知失敗恢復。
設計決策(為什麼這樣選?)

本例採自管 MQTT broker,不使用已退役的 Cloud IoT Core。MQTT 連線能力不包含完整裝置註冊、韌體更新與生命週期管理,需依 broker 或另建系統處理。

先決定 TLS 終止點。本例採 passthrough NLB,裝置 mTLS 到 broker 終止並檢查憑證;若改用終止 TLS 的 SSL proxy,不能假設 broker 還能直接驗證原始裝置憑證。

裝置身分、MQTT topic ACL 與 bridge 的 Google Cloud IAM 分開管理。裝置不得只靠可改寫的 device_id 宣稱身分;測試冒用 ID、跨裝置發布/訂閱、失效與撤銷憑證。

MQTT QoS 的範圍不會自動延伸到 Pub/Sub、資料庫及通知。為事件建立穩定 ID,設計 broker 到 Pub/Sub 的發布確認、重試與緩衝;在斷線、session 遷移與重連風暴下量測。

分析與告警採獨立訂閱/觸發路徑;共用同一 pull subscription 的多個 subscriber 是分攤工作,不是每個都收到一份。Pub/Sub 保留有期限,Dataflow 升級不能直接推導不遺失。

Bigtable 先由查詢決定 key。device_id#reverse_timestamp 可讓同裝置的新資料排前面,但反向時間戳本身不會分散熱點;避免時間戳開頭,也要測試單一熱門裝置。必要時評估分桶及查詢合併代價。

BigQuery/Bigtable 雙寫不是跨系統交易,只有業務需要兩種存取模式才維護兩份資料,並設核對與重播。通知以事件 ID 做冪等,避免把重送事件當成新的告警。

實作步驟(9 步)
  1. 列出裝置數、連線持續時間、事件頻率、離線窗口、查詢及通知延遲目標;規劃完整用量與容量費用
  2. 部署選定 broker 叢集與裝置憑證管理;設定 mTLS、逐 topic ACL、輪替/撤銷及 session 儲存策略
  3. 以 regional external passthrough NLB 導向 broker,驗證裝置 mTLS 實際在 broker 終止;依產品配置健康檢查、防火牆與 affinity
  4. 實作 broker 到 Pub/Sub 的 bridge/publisher,限制發布 IAM,核對發布確認、重試及緩衝;Beam MQTT 直接接 broker 是另一條整合路徑,不會自動插入 Pub/Sub
  5. 建立分析專用 subscription 與獨立告警事件路徑,設定保留及積壓告警,測試每條路徑可各自收到事件
  6. 建立 Dataflow 驗證、視窗與錯誤分流;依需求輸出 BigQuery 及 Bigtable,設計補寫及重播核對
  7. 若採 Bigtable,以 device_id 與時間範圍設計 key;測試均勻與偏斜流量,以 Key Visualizer 和延遲判斷熱點
  8. 實作通知冪等、重試及失敗恢復;重播分析資料前避免觸發不需要的歷史告警
  9. 演練無效/撤銷憑證、跨裝置 topic、broker 中斷、重連與超出保留邊界;記錄損失及恢復限制

IoT 的身分、訂閱與熱點檢核

沿裝置到儲存的路徑,找出每一段的驗證者與失敗邊界。先自行判斷,再核對應收集的證據。

展開 3 個設計情境

01 · TLS 改在負載平衡器終止,裝置驗證照舊?

原由 broker 驗證裝置憑證的 mTLS 路徑改成 target SSL proxy,團隊沒有重設 broker 驗證方式。

參考判斷與驗證證據

不能假設 broker 仍收到原始裝置 mTLS。先確認 TLS 終止點;本例使用 passthrough NLB 到 broker,並將已驗證身分綁定 topic ACL。

應提出的驗證證據

在測試環境確認 TLS 終止點,分別用有效、無效與撤銷憑證連線,再以有效裝置身分嘗試另一裝置的 topic,確認拒絕且無資料副作用。

02 · 分析與通知共用訂閱,各收一份?

兩個 pull subscriber 使用同一 subscription,一個寫分析表,一個發溫度告警。團隊期待每則訊息兩邊都收到。

參考判斷與驗證證據

同一 subscription 的消費者是分攤工作。要獨立處理,使用不同訂閱/觸發路徑,各自設保留、重試與冪等;也要測試一條路徑故障不妨礙另一條。

應提出的驗證證據

發布一組已知 ID,核對兩條路徑各自的完整集合;停掉通知端後再恢復,檢查分析持續處理、通知補送及重複抑制。

03 · 反向時間戳就不會有熱點?

所有寫入用 reverse_timestamp#device_id 開頭;壓測變慢,團隊只打算增加節點。

參考判斷與驗證證據

正向或反向時間戳開頭都可能集中寫入。先依查詢改評估高基數的裝置前綴,再測熱門裝置;反向時間戳只改變時間排序,必要分桶會增加查詢合併成本。

應提出的驗證證據

用均勻與單裝置尖峰兩組負載比較 key 方案,檢查 Key Visualizer、寫入分布及讀取延遲;同時驗證最新 N 筆與時間範圍查詢仍符合需求。

查核日期:

本範例的 broker mTLS 終止、裝置/topic 授權、Pub/Sub fan-out 與保留、Bigtable row key 及通知重送。情境為設計推導,未部署 broker 或驗證真實裝置安全性。

查核來源(7)
選型與複習重點
  • MQTT broker 是裝置協定端點;Pub/Sub 不是 MQTT broker,自管方案仍要管裝置生命週期
  • 本例 passthrough NLB 保留 TLS 到 broker;加密、裝置驗證與 topic 授權分別驗證
  • Pub/Sub fan-out 要獨立 subscription;同一訂閱的多個消費者會分攤訊息
  • Bigtable 反向時間戳用於最新優先讀取,不能單獨保證避免熱點
  • MQTT QoS、Pub/Sub 傳遞、資料寫入與通知副作用有各自邊界

ML 訓練與推論架構

專家 依訓練時數、推論容量、GPU、儲存與查詢試算

以自訂模型為例,分開資料準備、訓練、評估及推論部署。Gemini Enterprise Agent Platform(原 Vertex AI)的 endpoint、批次推論與 Cloud Run 是不同交付路徑;先依延遲、硬體與營運需求選擇。

架構圖
BigQuery 特徵/Cloud Storage 資料
  │ 固定版本與切分
  ▼
Agent Platform 訓練工作
(Custom;AutoML 另依支援流程)
  │ 模型產物+評估
  ▼
發布品質門檻
  ├─► Model Registry
  │     ├─► Endpoint(線上回應)
  │     │     (可用自訂容器)
  │     └─► Batch job(非同步輸出)
  └─► 自訂推論容器+版本化產物
        └─► Cloud Run(替代部署路徑)

Artifact Registry:訓練/推論映像
Pipelines:編排 → 評估門檻 → 核准發布

超出寬度時可左右捲動;鍵盤可聚焦文字圖後按左右方向鍵。

使用服務

Gemini Enterprise Agent Platform 原 Vertex AI;管理訓練、模型版本與推論。線上 endpoint 和非同步 batch job 依模型及功能支援選用。
Cloud Storage 保存版本化資料與模型產物;格式、讀取身分和區域須配合訓練/推論程式。
Cloud Run 替代的容器推論路徑;自行負責模型載入、HTTP、並行、版本及監控,先量測啟動與容量。
BigQuery 以 SQL 準備特徵與分析資料;查詢速度取決於資料布局、掃描量及資源,不保證比所有 Python 作業快。
Artifact Registry 保存訓練與推論映像,以固定版本/digest 對應模型與程式;映像與模型產物分別管理。
Agent Platform Pipelines 編排資料驗證、訓練、評估與發布門檻;排程重訓不等於應自動把新模型送上線。
設計決策(為什麼這樣選?)

先依問題、資料及維運需求比較 BigQuery ML、AutoML 與 Custom Training。本例走自訂模型;是否用 managed dataset 依訓練流程決定,不能當成所有 custom job 的必要步驟。資料格式也由框架與任務決定。

Endpoint 也支援自訂推論容器,包含前/後處理。需要自訂程式不會直接排除它;Cloud Run 的選擇應由模型大小、硬體、HTTP 需求、啟動、並行與營運能力支持。

線上推論是對已部署 endpoint 的同步請求;批次推論透過 batch job 非同步處理,不需要先部署線上 endpoint。Cloud Run 是替代路徑,不是 Model Registry 註冊後自動部署的目標。

將資料快照、切分、特徵程式、容器 digest、超參數及模型版本連結起來。先確認訓練與服務前處理一致,避免把評估資料混入訓練;評估門檻成立後才發布。

BigQuery 特徵工程應量測查詢計畫、掃描量、資源與匯出時間,不以 PB 級資料推導秒級完成。資料、訓練與推論區域也影響傳輸及服務支援。

監控先核對模型類型、部署位置、版本與資料收集需求;Model Monitoring 不會自動覆蓋所有 Cloud Run 模型。另追蹤服務延遲/錯誤與有標籤資料的品質,漂移告警本身不是準確率下降的證明。

費用需分開估訓練/調參、常駐推論、批次、GPU、儲存、查詢與網路。Cloud Run GPU 需要 instance-based billing,閒置的 minimum instances 仍會計費;以目標區域、配額與實測用量核算。

實作步驟(9 步)
  1. 定義任務、資料使用權、基準模型、品質/公平性指標、推論延遲與費用假設,先選線上或批次需求
  2. 建立可追溯資料快照與訓練/驗證/測試切分,固定特徵程式版本,測試前處理一致性與資料洩漏
  3. 確認區域與最小資料存取權;依選定流程使用 managed dataset 或由自訂訓練程式讀取資料
  4. 建立訓練映像並推送 Artifact Registry,記錄 digest、依賴與參數;依需求及配額選 CPU/GPU,不把 GPU 當預設必要
  5. 執行訓練並保存產物,以保留測試集與基準比較;品質未達門檻時停止發布
  6. 若走 Agent Platform,將產物與相容推論容器註冊 Model Registry;選 endpoint 同步推論或 batch job,確認模型支援
  7. 若選 Cloud Run,另外封裝版本化模型與 HTTP 容器,驗證載入、健康檢查、身分與資源上限,不依賴 Registry 自動部署
  8. 在測試流量下量測品質、延遲、冷啟動、並行與成本,規劃漸進發布及回到舊模型/容器/特徵版本的方式
  9. 以 Pipelines 編排驗證與評估門檻,按支援範圍設定模型監控及服務告警;漂移後先診斷再評估重訓與發布

ML 的推論路徑與發布檢核

先依回應時間、部署能力與驗證證據選方案,再展開參考判斷。以下情境沒有實際訓練或部署模型。

展開 3 個設計情境

01 · 有前處理就只能選 Cloud Run?

影像模型需要自訂前處理,團隊因此直接排除 Agent Platform endpoint。

參考判斷與驗證證據

Endpoint 也可使用含前/後處理的自訂容器。比較容器契約、模型大小、硬體、啟動、延遲及維運需求,再選 endpoint 或 Cloud Run。

應提出的驗證證據

用同一模型與輸入驗證前處理一致性,量測冷/熱啟動、尖峰並行、錯誤及用量;記錄各平台限制與選型理由。

02 · 每晚批次評分,需要常駐 endpoint?

每晚處理一份檔案,隔天才需要結果,團隊先部署整天常駐的線上 endpoint 再呼叫它。

參考判斷與驗證證據

這是可評估 batch job 的非同步需求;受支援模型可直接對 Model 提交批次工作,不必先部署線上 endpoint。另查格式、區域、配額、完成時限與費用。

應提出的驗證證據

以測試批次核對輸入/輸出筆數、失敗紀錄、完成時間與存取權,證明符合隔天交付需求,並與常駐服務的完整費用假設比較。

03 · 每週重訓成功,就自動切換新模型?

新模型訓練工作成功,但保留測試集分數下降;流程仍自動部署,回滾時也找不到舊特徵版本。

參考判斷與驗證證據

工作成功只代表執行完成。發布前比較基準、品質與服務指標,未達門檻就停止;保留資料、特徵、模型及容器版本,回滾需要相容的一組產物。

應提出的驗證證據

用刻意未達門檻的測試模型確認流程會阻止發布,再演練回到舊版本;核對輸出、延遲及版本紀錄,並分開檢查漂移與真實品質。

查核日期:

本範例的自訂訓練資料路徑、推論容器、線上/批次部署、版本發布、監控與費用假設。情境為設計推導,未訓練模型或驗證雲端效能/帳單。

查核來源(9)
選型與複習重點
  • AutoML、Custom Training 與 BigQuery ML 依任務及維運需求選,不用單一關鍵字決定
  • Agent Platform endpoint 也能執行含前/後處理的自訂容器
  • 線上 endpoint 與 batch job 不同;非同步批次不必先部署線上 endpoint
  • Model Registry 管版本,不代表已部署,也不會自動替 Cloud Run 建立推論服務
  • 模型品質、輸入漂移與服務可用性分別量測;重訓排程不是自動發布的理由

想看更多架構範本?

我們正在持續擴充架構範本庫。如果你有想看到的場景,歡迎到 GitHub Issues 告訴我們。

徽章解鎖!
Nimbus

學習教練 Nimbus

你的雲端學習夥伴

依已保存的資源進度與學習目標提供練習建議。完成度不代表掌握程度或應考能力。

0
連續天數
0
確認讀完
0
收藏
0%
資源完成度
練習建議
    推薦下一步
    開始