跳至主要內容
跳到課程內容
課程目錄
案例研究與考試準備 案例實戰:架構設計工作坊
0%
23 / 25 進階 120 分鐘 00:00

考試領域 Designing and planning a cloud solution architecture

案例實戰:架構設計工作坊

用需求矩陣、候選方案、ADR 與驗證計畫,完成一個不靠關鍵字猜服務的 PCA 架構案例

2026年3月13日 更新:2026年10月28日
本課目錄34 個段落

這課怎麼做?

這是本站原創的 CloudMart 合成演練,不是 Google 官方案例或唯一標準答案。先下載工作紙,寫下第一輪初稿,再用六張證據卡修訂決策,最後交付四份成果。若還不熟悉需求、遷移與 ADR,可先讀八步示範。

回合要留下的結果參考時間
第一輪事實、未知、候選與初稿假設20 分鐘
證據回合六張卡的計算、拒絕或修訂理由40 分鐘
修訂交付矩陣、方案比較、ADR、遷移/驗證計畫35 分鐘
交叉評審找出仍無證據或未核准的條件25 分鐘

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

可分兩次完成;前置補讀與真正部署演練另計。這一課只做文件與資料判讀,不需雲端帳號,不會代你建立資源、切換資料庫或核准上線。若需求分析、SLO 或 DR 還不熟,先回需求分析、可觀測性與 SRE或高可用與災難復原補強。

先準備一份可以修訂的工作紙

下載 CloudMart 工作紙(Markdown)

,用自己的編輯器填寫。工作紙帶有本輪事實、目標、全部證據與四份空白交付區,不含下方的參考判讀;先保留初稿,再新增修訂理由。

也可在架構師設計工作坊自行建立一份草稿,或寫在自己的文件裡。下載與閱讀不會替你新增、匯入或覆寫既有工作坊答案;本站課程筆記適合記錄待查事項,四份交付物請自行保存。

工作坊要交付的不是一張漂亮架構圖

這次練習要產出四樣東西:

  1. 可驗證的 requirement/constraint matrix。
  2. 至少兩個候選方案與 trade-off。
  3. 一份寫清楚理由、假設和後果的 ADR。
  4. Migration 與 production validation plan。

考試不會要求你真的提交這些文件,但這套思路能幫你看出選項少說了什麼。Architecture diagram 只能顯示元件,無法代替一致性、failure、security 和 operation semantics。

從事實、目標、假設到量化需求、候選架構、分階段遷移與驗證 ADR 的工作坊流程圖

圖解:先分開事實、目標與假設,建立可測試條件,再比較現在能落地與未來可擴展的方案;遷移分階段且可回退,資料與 AI 路徑則各自用驗證結果支撐 ADR。

模擬案例:CloudMart

CloudMart 是總部位於台灣的 online retailer,目前服務台灣與部分東南亞客戶,計畫在 18 個月內進入更多亞太市場,之後評估歐洲。

現況

  • Java monolith 跑在地端 VMware,部分 HTTP service 已能 containerize。
  • 單一 MySQL 8.0,約 2 TB,order、inventory 和 catalog 共用 schema。
  • Product image 放在 NAS,分析資料每天夜間 ETL。
  • 每月人工發布一次,回滾需由 DBA 與 application team 協調。
  • 團隊熟悉 Java、SQL 和 Docker,只有少數人維護過 Kubernetes。
  • 促銷尖峰約為平日 10 倍,最近一次因 database connection 耗盡而停止結帳。

管理層提出的目標

  • 台灣與東南亞使用者「都要很快」。
  • 促銷期間不能再停止結帳。
  • Inventory 不可超賣。
  • 半年後開始提供個人化推薦。
  • 未來進入歐洲時要符合 privacy 與 data-residency 要求。
  • 不希望一次重寫整套系統,也不能中斷現有營運。

注意,這些句子還不能直接選服務。「很快」沒有 percentile;「不可超賣」沒說 reservation workflow;歐洲的實際資料落地義務也尚未由 legal 確認。

第一輪:先寫初稿,保留未知

先不採用後面的範例 ADR。用上面的案例寫至少六列需求/限制,將每列標為「事實、目標、假設、未知」,並列出負責人與取得證據的方法。管理層說「很快」時,不能自行填入已核准的數值。

接著提出至少兩個 Phase 1 候選,列出相容性、容量、資料一致性、失敗處理、團隊與成本的待驗證條件。先將 ADR 狀態設為 Proposed/待驗證,寫下目前傾向與何時會改變決策。

保存這份初稿,再看八步示範或直接進證據回合。先寫出的答案可以不完整;要保留的是未知與推翻條件,不是堅持第一次選的產品。

第一步:把事實、目標、假設分開

類型本案例內容下一個動作
FactMySQL 2 TB、monolith、10 倍尖峰、團隊 K8s 經驗少可量測與盤點
Outcome不停止結帳、不超賣、改善 recommendation定義 KPI/SLI
Constraint不能一次重寫、不能中斷營運規劃 migration wave
Unknown「很快」、歐洲 residency、可接受 RPO/RTO找 owner 確認
Assumption新 service 可先以 API 包住 monolith用 spike/PoC 驗證

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

考試題通常會把 unknown 補成明確條件。在真實工作中,架構師不能擅自把它們變成需求。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TD
  A["案例中的一句陳述"] --> B{"它是哪一類?"}
  B -->|"Fact"| F["量測、盤點<br/>建立 current baseline"]
  B -->|"Outcome"| O["定義 KPI/SLI<br/>與 business owner"]
  B -->|"Constraint"| C["成為方案篩選條件<br/>不能被最佳化掉"]
  B -->|"Unknown"| U["找 owner 確認<br/>不擅自補答案"]
  B -->|"Assumption"| P["設 spike/PoC<br/>定義失敗條件"]
  F --> R["Requirement/constraint matrix"]
  O --> R
  C --> R
  U --> R
  P --> R
  R --> V["每一列都有範圍、數值<br/>owner 與驗證方式"]
Fact、outcome、constraint、unknown 與 assumption 的下一步不同;先分類,才不會把未確認的想像偷偷寫成架構需求。

先問這些問題

  • 哪個 user journey 最重要:browse、add to cart、checkout 還是 order tracking?
  • Latency 是 client-observed 還是 server-side,在哪個 region、哪個 percentile?
  • Inventory 是看到的數量不能過時,還是確認訂單時不能超賣?Reservation 可保留多久?
  • Payment 已成功但 order commit timeout 時,如何 reconciliation?
  • 可接受多少 downtime 和 data loss?各流程是否不同?
  • 哪些資料屬於個資?Legal 要求是儲存地、處理地,還是跨境 transfer control?
  • Peak traffic 的 request mix、duration、payload 與 database write ratio 是多少?
  • VMware lease、license、network bandwidth 和 migration deadline 有沒有硬限制?

第二步:把需求寫成可測試條件

假設 stakeholder 確認後,得到以下 initial target:

Journey/能力Initial target驗證方式
Checkout availability30 天成功率 SLO 99.95%,排除明確 user input error;5xx/未確認逾時仍計入失敗Synthetic checkout + production SLI
Checkout latency台灣/新加坡使用者在 peak load 下 p95 < 800 msRegion-based load test + RUM
Inventory integrityConfirmed order 不得讓 on-hand quantity 低於 0Concurrent reservation test + invariant query
Region outageCheckout 與本輪付款/庫存對帳於 60 分鐘內恢復,資料點落後 ≤ 5 分鐘DR game day
ReleaseCanary 失敗不影響超過 5% production trafficProgressive delivery test
Recommendation比現行熱門商品 baseline 提升指定 offline/online KPIHoldout experiment

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

這些數字只是本工作坊假設,不是通用建議。真正價值是每個目標都有 measurement。

第三步:不要把 target architecture 當第一個 migration step

CloudMart 需要兩條時間線:先移除 data-center/capacity risk,再逐步調整 application boundary。

Phase 0:盤點與建立 baseline

  • 用 dependency discovery、traffic capture、query analysis 和 cost model 了解現況。
  • 先補 application/database telemetry,量 peak、connection、slow query、failure 和 batch window。
  • 建立 landing zone、identity、network、logging、budget 和 policy guardrail。
  • 驗證 migration throughput、database compatibility、rollback 與 cutover window。

Phase 1:先搬可搬的,不承諾全面微服務化

若 monolith 能以 container 執行,候選 compute 包括:

  • Cloud Run:適合 HTTP-driven、stateless、能配合 request/instance lifecycle 的 workload,團隊 operation 負擔較低。
  • GKE Autopilot/Standard:明確需要 Kubernetes API、特定排程/叢集網路或 workload control 時再評估,並分別核對兩種模式的限制。
  • Compute Engine MIG:若 application 對 VM、OS、filesystem 或 legacy agent 有相依,可能是期限內風險較低的 rehost step。

不能只因「核心交易很重要」就選 GKE,也不能只因「Cloud Run 是 serverless」就忽略 long-running process、local state、connection 和 scaling behavior。先用 application assessment 排除不相容項。

Phase 2:逐步建立 service boundary

從變更頻率高、domain boundary 清楚且能獨立驗證的能力開始,例如 product catalog read 或 notification。用 facade/routing 將新 request 導向新 service,其餘仍回 monolith。

Order 與 inventory 共用 transaction,通常不是第一個隨意拆開的地方。拆分前要先定義 reservation、idempotency、event ordering、outbox 和 reconciliation,否則只是把 database transaction 變成 distributed inconsistency。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  P0["Phase 0<br/>dependency、traffic、query、cost baseline"] --> G["Landing zone<br/>identity、network、logging、policy"]
  G --> C["Compatibility、throughput<br/>cutover/rollback PoC"]
  C --> D{"候選 workload<br/>可安全遷移?"}
  D -->|"否"| R["保留現況或 rehost<br/>修正 blocker"]
  R --> C
  D -->|"是"| P1["Phase 1<br/>搬移 monolith/可搬 workload"]
  P1 --> V["Production-like load<br/>journey 與 failure validation"]
  V --> P2["Phase 2<br/>facade/routing 漸進抽離"]
  P2 --> B{"Domain boundary 與<br/>transaction semantics<br/>清楚?"}
  B -->|"否"| P1
  B -->|"是"| S["獨立 service<br/>canary、reconciliation、rollback"]
先解除期限與容量風險,再逐步改變 application boundary;landing architecture 可以保留 monolith,長期 target 不必在第一個 migration wave 一次完成。

第四步:資料庫要比較「現在能搬」與「未來要擴」

候選 A:Cloud SQL for MySQL

優點是 engine compatibility 較高,能縮短 migration;可先建立 regional HA、PITR/backup、connection management 和 cross-region DR plan。限制是單一 primary 的 write scale 與 cross-region asynchronous replication,無法直接滿足任何想像中的全球 multi-writer requirement。

候選 B:Spanner

Spanner 適合需要水平擴展 relational transaction、strong consistency 與符合其 configuration 的跨區可用需求。不過它不是 MySQL 的 drop-in replacement:schema、key、query、transaction 和 application access pattern 都需要評估,migration 成本可能高。

本階段的決策

根據「不能一次重寫」與 2 TB MySQL 現況,Phase 1 先以 Cloud SQL 作為低變更 migration candidate,完成 compatibility/performance/cutover PoC。這不是宣告永遠使用 Cloud SQL。

同時把 order/inventory access pattern 收集起來。若未來確認多區 write、scale 與 consistency 真的超出 Cloud SQL 能力,再為該 bounded context 評估 Spanner,並把 application rewrite、dual-run validation 和 data reconciliation 列入成本。

Inventory 不超賣可以先靠單一 authoritative transaction、reservation table、idempotency key 和正確 locking/optimistic concurrency 解決,不需要因一句「全球庫存」立即更換所有 database。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  A["現況:2 TB MySQL<br/>monolith 共用 schema"] --> B{"現在能承擔 schema<br/>與 application rewrite?"}
  B -->|"否"| C["Phase 1:Cloud SQL candidate<br/>compatibility/load/cutover PoC"]
  B -->|"是"| D{"已核准 horizontal scale、<br/>跨區 write 與 consistency requirement?"}
  D -->|"否"| C
  D -->|"是"| S["Spanner assessment<br/>key、query、transaction、topology"]
  C --> V["HA、PITR、connection<br/>cross-region DR 驗證"]
  V --> T{"Review trigger 出現?<br/>scale 或 observed RTO/RPO 不達標"}
  T -->|"否"| K["維持並持續量測"]
  T -->|"是"| S
  S --> X["Migration/dual-run<br/>reconciliation 與成本驗證"]
  X --> Y{"收益足以承擔改造?"}
  Y -->|"否"| K
  Y -->|"是"| Z["只遷移需要該能力的<br/>bounded context"]
Cloud SQL 是低變更的 Phase 1 候選,不是永久宣言;Spanner 必須由已確認的 scale/consistency 需求與重評觸發,而不是由「全球」關鍵字直接決定。

第五步:讀取路徑與寫入路徑分開設計

  • Product image 遷到 Cloud Storage,依 cacheability 搭配 external Application Load Balancer/Cloud CDN;personalized response 不進 shared cache。
  • Catalog read 可用 cache 降低 database load,但 inventory confirmation 仍回 authoritative service。
  • Public API 經 load balancer、Cloud Armor 與適合的 identity control;backend 不開 bypass path。
  • Cloud Interconnect 或 HA VPN 的選擇以 migration traffic、availability、lead time 和 cost 為依據,並建立 redundant path/route test。
  • Global frontend 能降低 edge latency,不代表 regional database write 也會變成 local latency;用 latency budget 找真正 critical path。

第六步:分析管線不能靠 application dual write

Order transaction 同時寫 operational database 和 BigQuery,任一步失敗就會不一致。較安全的方向是:

  1. Order 先在 authoritative transaction commit。
  2. 以 outbox、CDC 或支援的 integration 產生可重放 event。
  3. Pub/Sub 解耦 consumers,consumer 做 idempotency/deduplication。
  4. Dataflow 或其他 processing 將資料整理後寫入 BigQuery。
  5. 設 data quality、late event、schema evolution 和 reconciliation 指標。

BigQuery 是 analytics system,不拿來做即時扣庫存。Recommendation feature 也不直接讀 raw production tables,先建立有 consent、lineage、feature freshness 和 access control 的 training/serving data flow。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

sequenceDiagram
  autonumber
  participant A as Order service
  participant D as Operational DB
  participant O as Outbox/CDC
  participant P as Pub/Sub
  participant F as Processing
  participant B as BigQuery
  A->>D: 同一 transaction 寫 order 與 outbox record
  D-->>A: Commit authoritative state
  O->>D: 讀取 committed change
  D-->>O: 可重放 event
  O->>P: Publish event
  P->>F: At-least-once delivery
  F->>F: Idempotency、schema、late-event handling
  F->>B: 寫入 analytics table
  B-->>F: Load result
  F->>D: Reconciliation 只回報差異,不雙寫 order
Order 只在 authoritative transaction commit;outbox 或 CDC 之後產生可重放事件,consumer 透過去重、品質與 reconciliation 建立分析資料。

第七步:AI 專案先做 baseline 與 evaluation

「個人化推薦」可以是 rule-based、prebuilt search/recommendation capability、BigQuery ML,或 Gemini Enterprise Agent Platform(簡稱 Agent Platform,原 Vertex AI)上的 custom model。選擇前確認:

  • 目前有沒有足夠的 view、click、cart、purchase 和 product metadata?
  • 要最佳化 click-through、conversion、revenue,還是 customer satisfaction?
  • Cold-start、新商品、季節性和 bias 怎麼處理?
  • Online inference latency/availability 是否在 checkout critical path?
  • Personalization 是否取得適當 consent,使用者能否 opt out?

先以熱門商品或簡單 ranking 做 baseline,再進 offline evaluation、shadow/A/B test。Agent Platform Pipelines(原 Vertex AI Pipelines)可編排 training workflow,Model Registry 管理 model version,endpoint/batch prediction 則依 serving need 選擇。Model Garden 是尋找 model 的入口,不是所有 custom TensorFlow workflow 的 version registry。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  K["定義 business KPI<br/>conversion/revenue/satisfaction"] --> B["熱門商品或簡單 ranking<br/>建立 baseline"]
  B --> D["準備有 consent、lineage<br/>freshness 的資料"]
  D --> M["訓練/選擇 candidate"]
  M --> O{"Offline quality、<br/>bias<br/>與 safety 達標?"}
  O -->|"否"| D
  O -->|"是"| S["Shadow/小流量 canary<br/>驗證 latency 與 availability"]
  S --> A["A/B 或 holdout experiment"]
  A --> G{"Online KPI 顯著改善<br/>且 guardrail 正常?"}
  G -->|"否"| R["Rollback/保留 baseline<br/>記錄失敗原因"]
  R --> D
  G -->|"是"| P["逐步 rollout<br/>監控 drift、品質與成本"]
先證明 candidate 勝過簡單 baseline,再依序通過 offline、serving 與 online experiment;模型平台不能取代 KPI、privacy、fallback 與 rollback。

第八步:可靠性、安全與成本放進同一份決策

Reliability

  • Checkout、database、payment 與 queue 分別定義 SLO/failure behavior。
  • Autoscaling 設 maximum 與 downstream connection budget,促銷前跑 peak/soak test。
  • Cloud SQL HA 處理 zone failure;region DR 用 replica/backup、runbook 和 game day 驗證 observed RTO/RPO。
  • Release 用 immutable artifact、canary、synthetic checkout 和 database-compatible rollback。

Security/privacy

  • Human 與 workload identity 分開,使用 least privilege 和短效 credential。
  • 個資先分類;log、analytics 和 AI dataset 各有 purpose、retention 與 access policy。
  • CMEK 只有在 control/regulation 需要時使用,並設 key availability、rotation 和 recovery。
  • VPC Service Controls 適用於支援服務的 data exfiltration defense,不會取代 IAM、application authorization 或 internet egress control。
  • 歐洲資料設計等 legal 釐清後再定案,不自行把 GDPR 解讀為所有資料必須留在歐洲。

Cost

  • 用 billing export 把成本分到 environment/service/journey,並計算每筆成功訂單成本。
  • 比較 migration、parallel run、egress、support、license 和 training,不只看 compute list price。
  • CUD 只套在已觀察到的穩定 baseline;promo burst 保留彈性 capacity。

範例 ADR:Phase 1 database

**評審前草案:**這是第一輪候選,不是已通過證據回合的決策。

Status: Proposed — 待相容性、容量、DR 與切換/回復證據核對。
Decision: Phase 1 將 MySQL workload 遷到 Cloud SQL for MySQL,暫不直接改為 Spanner。

Context:
- 2 TB MySQL 與 monolith 共用 schema。
- 18 個月內要擴張,但目前沒有已核准的全球 multi-writer requirement。
- 團隊不能承擔一次 application/database rewrite。

Alternatives:
- Cloud SQL: compatibility 較高,write-scale 與跨區 DR 有限制。
- Spanner: 長期 scale/consistency 能力較強,需 schema 與 application 改造。
- Self-managed MySQL on Compute Engine: control 高,operation burden 也高。

Consequences:
- 先完成 compatibility、load、DMS/cutover 和 rollback PoC。
- 設 regional HA、backup/PITR、cross-region DR 與 restore test。
- 收集 order/inventory access pattern,於 expansion gate 重新評估 Spanner。

Review trigger:
- Sustained write/storage growth超過已驗證容量。
- 核准跨區 write 與 consistency requirement。
- Observed RTO/RPO 無法滿足業務目標。

好的 ADR 不假裝選擇沒有缺點,也會寫明何時重新評估。這份是收到後面 E1–E6 之前的候選草案;讀完新證據,必須修訂狀態、未通過條件與後續驗證,不能原封不動當成已核准答案。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  C["Context<br/>事實、目標、constraints"] --> A["Alternatives<br/>至少兩個可行候選"]
  A --> T["Trade-off<br/>能力、風險、成本、operation"]
  T --> D["Decision<br/>理由與 assumptions"]
  D --> Q["Consequences<br/>接受的限制與後續工作"]
  Q --> V["Validation plan<br/>PoC、load、cutover、rollback"]
  V --> E{"Evidence 支持決策?"}
  E -->|"否"| A
  E -->|"是"| M["Monitor review triggers<br/>scale、requirement、<br/>RTO/RPO"]
  M -->|"trigger 出現"| C
  M -->|"未出現"| K["維持決策並持續記錄"]
ADR 不是選型結案文件;它把限制與驗證寫清楚,並用 review trigger 決定何時應重新比較候選方案。

第二輪:用證據修訂決策

CloudMart、所有量測值、事件與目標都是本站編寫的合成演練,不是 Google 官方案例、產品效能、SLA 或真實部署紀錄。本練習不需要雲端帳號,也不執行切換或建立資源。

本輪資料與目標

以下是評審回合提供的補充條件;已核准目標與未知要分開記錄。E1、E2、E4 的時間窗各自獨立;不能把不同批次混成一份 production 成績。

案例事實

  • 台灣電商,服務台灣與部分東南亞客戶,18 個月內規劃擴張亞太市場。
  • 地端 VMware 上的 Java 單體、2 TB MySQL 8.0;訂單、庫存與商品共用 schema。
  • 團隊熟悉 Java、SQL、Docker,Kubernetes 經驗有限;不能一次重寫整套應用。
  • 促銷尖峰約為平日十倍;曾因資料庫連線耗盡停止結帳。
  • 下列證據是不同測試或決策回合,E1 與 E2 不是同一批流量,不能合併分母。

本輪已核准的演練目標

  • 成功率:30 天有效邏輯結帳的 99.95%。以 checkout_id 去重,明確使用者輸入錯誤才排除;5xx 與尚未確認結果的逾時仍納入失敗。
  • 延遲:尖峰時台灣與新加坡各自的端到端結帳 p95 都小於 800 ms。E2 使用 nearest-rank:將 n 筆排序,取第 ceil(0.95 × n) 筆。
  • 資料完整性:確認訂單不得讓權威庫存低於零;付款、訂單與庫存結果需可對帳。
  • 區域災害:故障後 60 分鐘內恢復新單,且完成本輪定義的未決付款/庫存對帳;可復原資料點落後故障時刻不超過 5 分鐘。
  • 上述是本次假設業務負責人已核准的演練條件。資料落地、法規適用、變更窗口與新市場細部延遲仍須另行確認,不能推定已核准。

E1:成功率的分母與驗證視窗

一小時合成負載測試;每列互斥且已依 checkout_id 去重,所有結果均在本輪觀察期限結束後分類。

結果邏輯結帳數是否納入有效事件
成功完成97,880納入成功
服務 5xx70納入失敗
逾時且結果尚未確認50納入失敗,另需付款/訂單對帳
明確使用者輸入錯誤2,000依已核准規則排除

先留下判斷:算出有效事件、成功率與同樣本量下的錯誤預算。能否由這一小時宣告達成 30 天 SLO?ADR 的上線條件要改什麼?

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E1 的參考判讀
  • 有效事件為 98,000;成功率為 99.878%。同樣本量、99.95% 門檻的錯誤預算是 49 筆,實際失敗 120 筆,超出 71 筆。
  • 不能刪掉 5xx 或逾時來美化分母,也不能把 HTTP 重試當成新的邏輯結帳重複計數。這批測試未達相同門檻,且不能代替 30 天 production SLI。
  • 應在 ADR 留下未通過的證據、排查及重測條件;沒有獲准的例外就先保留發布閘門,而非以架構圖宣告可靠性已達標。

E2:總體 p95 掩蓋小區域

另一輪尖峰負載的 10,000 筆完整結帳觀測;每筆有效事件各觀測一次且本輪全部完成。表格以相同延遲分組,不能把兩地的 p95 直接平均。

使用者位置筆數每筆端到端延遲
台灣8,900650 ms
台灣100900 ms
新加坡900500 ms
新加坡1001,200 ms

先留下判斷:依 nearest-rank 算出台灣、新加坡與合併 p95。若只展示合併值,能否證明兩地都滿足 < 800 ms?接下來應量哪一段?

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E2 的參考判讀
  • 台灣 p95 = 650 ms;新加坡 p95 = 1200 ms;合併 p95 = 650 ms。新加坡未達標,即使合併值小於 800 ms。
  • 分母分別為 9,000、1,000 與 10,000,排序後取第 8,550、950 與 9,500 筆。不是平均兩個 percentile,也不是讓較大的台灣樣本抵銷新加坡。
  • 先拆使用者網路、入口、應用、資料庫與付款的 latency budget,再驗證瓶頸。加 global frontend 或換資料庫都不能取代同地點、同負載下的重測。

E3:擴容前先算下游連線預算

以下上限是這次容量評估的合成配置,不是任何 Cloud SQL 規格的通用值;每個應用 instance 的所有 worker 合計最多 25 個連線。

配置/預算數值
資料庫本輪核准連線預算300
保留給管理、遷移及其他工作80
每 instance 的應用 pool 上界25
原方案規劃的 instance 上限40
待評估的較小 instance 上限8

先留下判斷:原配置在 pool 都用滿時會發生什麼?改成 8 個 instance 是否就能宣告促銷容量足夠?列出必要的防護與重測。

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E3 的參考判讀
  • 應用可用預算為 220;原配置最多需求 1,000。8 個 instance 的算術上界為 200,雖低於預算,仍不證明吞吐、等待時間或尖峰結帳延遲合格。
  • 需要 pool/timeout、流量限制或排隊、容量餘裕及尖峰/持續負載重測。也要盤點其他 revision、工作程序與重連突波,不能只計一個設定。
  • Cloud Run 的 maximum instances 在特定情況可短暫超出,不能將 8 × 25 當成絕對防線。應用與資料庫端仍需連線管理和保護。

E4:服務可連線不等於業務已復原

合成的區域故障演練,時間均為同日 UTC;依本輪事前定義,RTO 結束點包含新單恢復與未決付款/庫存對帳完成。

事件UTC 時刻
復原資料中最後確認一致的資料點09:52
主要區域故障10:00
次要區域資料庫可寫10:22
應用路由切換完成10:29
新結帳檢查通過10:47
未決付款/庫存對帳完成11:05

先留下判斷:分開計算新單恢復、業務 RTO 與資料點落後時間。是否通過 60 分鐘/5 分鐘目標?還缺什麼證據才能推算遺失訂單?

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E4 的參考判讀
  • 新單於故障後 47 分鐘恢復;依本輪定義,業務 RTO 為 65 分鐘,超過 60 分鐘。可復原資料點落後 8 分鐘,亦超過 5 分鐘目標。
  • 不能在 DB 可寫的 22 分鐘或新單恢復的 47 分鐘就宣告本輪 RTO 達標。8 分鐘也不是確定遺失的訂單筆數,仍需交易 ID、付款及庫存對帳。
  • 區內 HA 與跨區 DR 是不同故障範圍;非同步副本要核對接收與套用進度、應用切換、資料完整性與回切,不能由「已設 HA」推定區域故障演練通過。

E5:開始寫新資料之後怎麼回復

這是評審提供的切換情境,不是可執行操作指令;任何正式變更仍需核准窗口與測試過的程序。

時點/條件合成紀錄
切換前來源停止寫入,目標已追平至核對點;來源保留唯讀
切換後新目標已接受 15 筆新訂單及相關庫存異動
可用備份只有切換前備份;沒有已驗證的反向同步/重播程序
候選回復步驟只將 DNS 指回舊應用與舊資料庫

先留下判斷:可否把候選步驟寫成「一鍵回滾」?區分新目標寫入前後的回復界線,列出停止條件、對帳與核准人。

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E5 的參考判讀
  • 不能只切回 DNS;舊資料庫沒有那 15 筆新訂單及庫存狀態,可能造成狀態回退、重複處理或付款不一致。切換前備份也不包含這些新寫入。
  • 先保護資料與控制寫入邊界,再由已測試的反向同步/重播與對帳流程回復,或採修復前進;是否可用必須由演練證明。付款處理還需冪等與外部結果核對。
  • 在遷移計畫分開寫「新目標尚未接收寫入」及「已接收寫入」兩套條件;未證實可安全回復時,ADR 應標為未就緒,交由業務與變更負責人處理風險。

E6:新需求觸發重評,不抹掉舊證據

另一個決策回合:業務核准未來兩地同時接單、同一份庫存仍不得超賣。尚未核准跨區交易延遲、故障時接受的行為或改造預算。

狀態新增資訊
已核准未來兩地同時寫入訂單,庫存仍需一致且不得超賣
仍未知可接受跨區寫入延遲、區域失聯時是否暫停接單、改造預算
現有 ADR低變更 Phase 1 以 Cloud SQL 為候選,未承諾全球 multi-writer

先留下判斷:哪些舊決策仍有依據,哪些必須重開 ADR?是否能只憑這張卡立即核准全面改用 Spanner?

記錄「計算或證據 → 哪個主張不能成立 → 修訂哪份交付物 → 下一個驗證與負責人」,再展開參考。保留原初稿與修訂理由。

做完再看:E6 的參考判讀
  • 新增跨區寫入需求已觸發既有 ADR 的 review trigger,需重新比較訂單/庫存這個邊界的方案;不能把原本未要求的能力宣稱為 Phase 1 已具備。
  • 不代表必須立刻搬完所有 schema,也不等於某個產品名稱已解決跨區延遲、故障行為或遷移。先補齊未知,再用交易、相容性、切換/回復與成本驗證比較候選。
  • 保留舊 ADR、這次變更來源、被取代的部分與新驗證閘門。原先盤點、身分與觀測工作可能仍成立,不能因換方案就刪掉不利的 E1–E5 證據。

產品行為核對

本輪的數字是合成資料;產品能力另依第一方文件確認:

最後交付:四份成果都要對回證據

1:需求與證據矩陣

  • 至少六列需求;標出事實、已核准目標、假設與未知
  • 每列有範圍、負責人、驗證方法與 E1–E6 證據/缺口

2:兩個候選與取捨

  • 分開 Phase 1 與長期目標,不以產品名稱代替限制比較
  • 至少兩個候選對照容量、資料一致性、故障、團隊與成本假設

3:有狀態的 ADR

  • 狀態、情境、候選、決策、後果、證據與未通過條件
  • 寫出何時重評;E6 後標出保留、修訂及取代的部分

4:遷移與驗證計畫

  • 切換前後各有 go/no-go、核准人、觀測點與停止條件
  • 區分新寫入前後的回復;包含付款/庫存對帳及復原後回切
交付前展開:怎麼做交叉評審?

請同伴或隔天的自己只看交付物,不先看產品名稱,檢查:

  • 能否從每個結論找到需求、證據 ID 或明確標記的待驗證假設?
  • 是否保留 E1 的不利成功率、E2 的新加坡問題,以及 E4 未達標的兩個時間目標?
  • 是否把 E3 的連線算術當成已完成容量驗證,或把 E5 的 DNS 切回當成完整資料回復?
  • E6 後能否說清楚哪些決策保留、哪些重評,而非刪掉舊資料或直接宣告換產品就完成?
  • 每個未達標條件是否有負責人、下一個驗證、停止/暫緩條件與核准邊界?

若上述仍說不清楚,將狀態保留為待驗證,回對應證據卡補寫。本輪驗收看的是推理與證據鏈;選到同一個產品名稱、讀完解答或下載工作紙,都不能代替這四份成果。

考試中怎麼縮短這套流程

不必在腦中畫完整 CloudMart。只做四件事:

  1. 找動詞:題目要你 assess、migrate、design、secure 還是 troubleshoot?
  2. 找硬約束:existing skill、deadline、protocol、RTO/RPO、consistency、compliance。
  3. 每個選項問一句:它滿足哪個約束,又新增什麼沒有被要求的負擔?
  4. 最後檢查:是否把未提供的假設當成事實?

若題目要求「先做什麼」,正確答案可能是 assessment,也可能是立即隔離 compromised credential。順序取決於風險與題目狀態,沒有「FIRST 永遠先規劃」這種規則。

課後檢查

先確認四份成果與 E1–E6 的修訂都已保存,再回答這幾題;答不出來,括號裡是該回去重讀的那一節。只有讀解答或尚未完成的部署驗證,請另外記在待補證據中。

  • 一條 requirement 要補上哪些東西,才算可以測試?(回〈第二步:把需求寫成可測試條件〉)
  • 為什麼不讓 application 同時寫 operational database 和 BigQuery?(回〈第六步:分析管線不能靠 application dual write〉)
  • Phase 1 為什麼先用 Cloud SQL、暫不改 Spanner?什麼訊號出現要重新評估?(回〈範例 ADR:Phase 1 database〉)

本課重點

  • Fact、outcome、constraint、unknown 和 assumption 要分開。
  • Requirement 要有 owner、範圍、數值與驗證方法。
  • Migration landing architecture 與長期 target architecture 可以不同。
  • GKE、Cloud Run 和 Compute Engine 按 workload/team/control 選,不按重要性排序。
  • Cloud SQL compatibility 較高;Spanner 能力不同但需要 migration/application 成本。
  • Inventory integrity 先定義 transaction、reservation、idempotency 和 reconciliation。
  • Analytics 用可重放 pipeline,不讓 application 對 operational/warehouse 雙寫。
  • AI 先做 baseline、evaluation、privacy 和 fallback,再談 model platform。
  • ADR 要記 alternative、consequence、validation 和 review trigger。

下一步

想拿自己的案例從頭走一遍,站內的 架構師設計工作坊 有 13 個步驟可以逐步填寫。

下一課會把這套決策方法帶進考場:先核對官方考試規格,再用原創題練習如何排除「技術上能做、但不符合題目」的選項。

恭喜完成課程!

你已完成所有課程內容,做得太棒了!

25 課完成
22 小時 25 分鐘 預估課程時數
— 天連續學習

鍵盤快捷鍵

先關閉此說明再使用快捷鍵;輸入筆記時不會觸發。

導覽
← / j 上一課
→ / k 下一課
操作
c 標記完成 / 取消完成
n 展開 / 收合筆記
b 收藏 / 取消收藏
f 專注模式
其他
? 快捷鍵說明
Esc 關閉彈窗

課程目錄

徽章解鎖!
Nimbus

學習教練 Nimbus

你的雲端學習夥伴

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

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