跳至主要內容
ESC

架構師設計工作坊 — PCA 13 步驟實戰

這是一份為 Professional Cloud Architect 認證設計的動手式工作坊。挑一個虛構的業務情境,跟著 13 個步驟從商業需求、服務拆分、儲存選型、網路、可靠性、災難復原走到安全與成本—把架構思考的流程練成肌肉記憶。所有填寫的內容都會自動存在你的瀏覽器,隨時可以繼續,完成後可匯出成 Markdown。

0 / 13 步完成 建議 60–90 分鐘 原創教材

選擇案例情境

挑一個你覺得好發揮的情境,整份工作坊都會圍繞它展開。三個都是虛構案例、歡迎改寫。

想用考試級 case 練習?試試 PCA 案例研究庫 ,挑一個當作 workbook 的情境。

定義案例情境

學習目標

選一個貼近生活的營運場景,用三段文字把業務範圍、使用者組成與核心功能寫清楚,讓後續所有設計決策都能回到這份情境文件作依據。

思考提示
  • 這個系統要解決誰的哪個問題?業務目標用一句話講完是什麼?
  • 主要的使用者角色有哪些?他們之間會怎麼互動?
  • 需要哪些不可或缺的核心功能?排除哪些周邊功能先不處理?
  • 成功長什麼樣子?用一個 KPI 或可量化指標描述。
  • 目前是全新系統、還是要從傳統地端搬到雲端?這會決定你是綠地還是棕地設計。
走一遍範例(登雲書店)

以登雲書店為例:這是一個線上電商平台,讓讀者瀏覽書籍、加入購物車、結帳並追蹤訂單;核心角色是「讀者」與「書店營運人員」;目標是以穩定、低維運成本支撐每日約三萬筆瀏覽與兩千筆訂單。

你的答案

0 字 建議至少 120 字
0 字 建議至少 60 字
0 字 建議至少 40 字

描繪 User Personas

學習目標

把抽象的「使用者」具體化為兩個帶有個性、工作情境與痛點的 Persona,避免設計時只想到 happy path。

思考提示
  • 這位使用者一天的流程長什麼樣子?他最常在什麼時間、從哪個裝置進來?
  • 他最大的痛點是什麼?過去用類似系統時卡在哪裡?
  • 哪些功能對他來說是「不用等就要有」、哪些是「有更好」?
  • 他的技術熟悉度?需要為他設計多少學習曲線?
  • 如果系統只能保證對一個 Persona 好用,你會先保誰?
走一遍範例(登雲書店)

登雲書店 Persona A — 小陳,35 歲上班族,每週通勤時滑手機找書,最在意搜尋速度與推薦精準度;Persona B — 書店營運助理小葉,每天用後台批次上架新書,最怕圖檔上傳與庫存同步出錯。

你的答案

0 字 建議至少 100 字
0 字 建議至少 100 字

撰寫 User Stories

學習目標

把 Persona 的需求拆成 3 個「身為 X,我想要 Y,以便 Z」格式的故事,讓每個故事都可以轉成一個測試情境。

思考提示
  • 每個故事是否都描述了「誰 / 做什麼 / 為了什麼」三段?
  • 故事背後的 acceptance criteria 能不能用 2–3 句話列出來?
  • 這個故事會觸發哪些系統動作?哪些是同步、哪些可非同步?
  • 如果這個故事失敗,使用者會怎麼感受到?
  • 故事之間是否有相依性?要先做哪一個?
走一遍範例(登雲書店)

例如:身為登雲書店讀者小陳,我想要在首頁看到依我歷史偏好排序的書單,以便三秒內決定今天要不要加入購物車—驗收條件包含首頁回應 < 1 秒、至少呈現 10 本書、登入狀態下顯示個人化結果。

你的答案

0 字 建議至少 60 字
0 字 建議至少 60 字
0 字 建議至少 60 字

定義 SLI 與 SLO

學習目標

把上一步的 User Story 映射到可量測的指標(SLI)與目標(SLO),例如「99% 的搜尋回應 < 500ms」。沒有數字的可靠性目標等於沒有目標。

思考提示
  • 這個功能最讓使用者「有感」的指標是什麼?延遲、成功率、還是一致性?
  • 你要量的是從哪一端開始?瀏覽器端、CDN 邊緣、還是應用入口?
  • SLO 數字怎麼訂才不會過度保守(成本高)也不會太寬鬆(使用者有感)?
  • 誤差預算(error budget)怎麼分配給例行部署與緊急修補?
  • 量測資料要存在哪裡?多久彙整一次?
走一遍範例(登雲書店)

以登雲書店搜尋 API 為例:SLI = 回應時間,SLO = 每 28 天內 95% 請求 < 500ms;SLI = 請求成功率,SLO = 99.5% 2xx/3xx。

你的答案

0 字 建議至少 100 字

Microservices 服務拆分

學習目標

從功能清單反推出服務邊界。每個服務應有獨立職責、獨立資料所有權,並能獨立部署。

思考提示
  • 這個服務的單一職責是什麼?能不能用一句話說完?
  • 兩個服務之間的耦合度高嗎?有沒有共用資料庫?
  • 哪些服務需要同步呼叫?哪些可以走事件驅動?
  • 服務拆太細會讓運維複雜、拆太粗又變成單體;你的團隊規模適合哪種顆粒度?
  • 每個服務誰是 owner?部署節奏與技術棧可以自由選嗎?
走一遍範例(登雲書店)

登雲書店拆為:Catalog Service(商品與搜尋)、Cart Service、Order Service、Payment Service、User Service、Recommendation Service、Notification Service,共七個服務,彼此以 REST + Pub/Sub 事件連接。

你的答案

0 字 建議至少 120 字
0 字 建議至少 80 字

設計 REST API

學習目標

為每個服務定義核心資源(collection)與標準 HTTP 方法。好的 API 讓新工程師一看就懂。

思考提示
  • 你的資源用名詞還是動詞命名?URL 是否正規化(複數名詞、階層清楚)?
  • 每個 collection 支援哪些方法?GET / POST / PUT / PATCH / DELETE 的用法是否區分清楚?
  • 身分驗證走哪種機制?OAuth、API Key、還是 IAM?
  • 錯誤回應的格式統一嗎?會回哪些 status code?
  • 版本化策略怎麼做?URL 路徑、header 還是不版本化?
走一遍範例(登雲書店)

以 Catalog Service 為例:GET /v1/books 列出、GET /v1/books/{id} 取單本、POST /v1/books 新增(僅後台)、PATCH /v1/books/{id} 修改、DELETE 用軟刪除。

你的答案

0 字 建議至少 120 字

儲存特性分析

學習目標

先描述每個服務的資料「長什麼樣」,再選擇 GCP 產品。特性優先、產品在後。

思考提示
  • 資料是高度結構化(表格)、半結構化(JSON)還是非結構化(檔案、影片)?
  • 讀寫比例是讀多寫少、還是寫入為主?尖峰 QPS 多少?
  • 需要跨區域一致性(strong)、還是可以最終一致(eventual)?
  • 資料量今年、三年、五年會長到多大?成長曲線線性還是爆炸?
  • 有沒有時間序列、地理資訊、關聯查詢等特殊需求?
走一遍範例(登雲書店)

登雲書店 Order Service:結構化、需要交易(ACID)、讀寫比例約 1:1、資料量中等(每年約 10GB 成長)、必須跨區高可用—指向關聯式資料庫。

你的答案

0 字 建議至少 120 字

GCP 儲存服務選擇

學習目標

根據上一步的特性表,把每個服務對應到具體的 GCP 產品,並解釋選擇理由。

思考提示
  • Cloud SQL vs Spanner:你需要水平擴展與全球一致嗎?
  • Firestore vs Bigtable:低延遲文件查詢、還是超大量時序寫入?
  • Cloud Storage 的類別(Standard / Nearline / Coldline / Archive)哪個符合存取頻率?
  • Memorystore(Redis / Memcached)要放在前面當快取嗎?
  • 備份策略:Point-in-time recovery、跨區備份、還是匯出到 GCS?
走一遍範例(登雲書店)

登雲書店示例:Order → Cloud SQL(PostgreSQL, HA 配置);Catalog → Firestore;書籍封面圖 → Cloud Storage Standard;推薦快取 → Memorystore for Redis。

你的答案

0 字 建議至少 100 字
0 字 建議至少 120 字

網路與 Load Balancing

學習目標

判斷每個服務是否需對外暴露、要用哪種 Load Balancer、是否需跨區。網路決定你的延遲與成本。

思考提示
  • 這個服務會直接被網際網路存取嗎?還是只服務內部?
  • L4 TCP/UDP 還是 L7 HTTP(S) 就夠?需不需要 SSL termination?
  • 流量需要分散到多個 region 嗎?還是單 region 就夠?
  • 是否要加 Cloud CDN?哪些路徑可以快取?
  • 是否需要 Cloud Armor 防 DDoS、WAF 規則?
走一遍範例(登雲書店)

登雲書店:前端 Web(面向網際網路)→ Global HTTPS LB + Cloud CDN + Cloud Armor;Order API → Regional Internal HTTPS LB;背景工作服務 → 不需 LB,由 Pub/Sub 觸發。

你的答案

0 字 建議至少 100 字

繪製網路拓樸

學習目標

用文字/ASCII 把整張網路圖畫出來,至少包含 VPC、Subnet、Region、LB、主要服務與外部連線。圖畫得出來,架構才清楚。

思考提示
  • VPC 是共用 VPC(Shared VPC)還是各專案獨立?
  • 每個 region 內的 subnet 如何切分?Private Google Access 有開嗎?
  • 對外流量出口是 Cloud NAT 還是直連?
  • 跨 region 或跨 VPC 連線用 VPC Peering、Interconnect 還是 VPN?
  • IP 範圍規劃有沒有保留給未來擴充?
走一遍範例(登雲書店)

登雲書店拓樸簡化示例:Global HTTPS LB → GKE Cluster(asia-east1)→ Cloud SQL(asia-east1, 私有 IP)+ Firestore + Cloud Storage;跨區域備援到 asia-northeast1。

你的答案

0 字 建議至少 100 字
0 字 建議至少 60 字

可靠性與擴展性

學習目標

回到 SLO,規劃高可用、自動擴展與延遲控制三大策略,確保系統在尖峰與故障時仍能達標。

思考提示
  • 單點故障(SPOF)在哪裡?如何透過冗餘消除?
  • 水平擴展靠誰觸發?CPU、QPS、還是自訂 metric?
  • 尖峰時段要不要預先暖機(pre-warm)?
  • 延遲熱區在哪?資料庫、跨服務呼叫、還是冷啟動?
  • 降級(graceful degradation)機制:當某服務掛了,系統還能做什麼?
走一遍範例(登雲書店)

登雲書店:Web 層用 GKE Regional Cluster(跨 3 個 zone)+ HPA(CPU 60%);Order DB 用 Cloud SQL HA;熱門商品快取在 Memorystore,降級時仍可顯示靜態資料。

你的答案

0 字 建議至少 100 字
0 字 建議至少 80 字
0 字 建議至少 80 字

災難復原(DR)

學習目標

針對各種故障情境,明確寫下 RPO / RTO 與復原動作。沒有 Runbook 的 DR 等於紙上談兵。

思考提示
  • 哪些情境要列入:單機、單 zone、單 region、資料誤刪、外部依賴失效?
  • 每個服務可接受遺失多久的資料(RPO)?復原要多快(RTO)?
  • 備份頻率、保留期、驗證策略(你真的會定期還原測試嗎)?
  • 跨區備援是 hot-standby、warm、還是 cold?成本能接受嗎?
  • Runbook 寫到能讓值班工程師半夜被叫醒就能執行嗎?
走一遍範例(登雲書店)

登雲書店 DR 範例:Cloud SQL 設定 PITR + 每日匯出到另一 region 的 GCS;Order 服務 RPO = 5 分鐘、RTO = 30 分鐘;Runbook 含 failover 指令與通訊樹。

你的答案

0 字 建議至少 100 字
0 字 建議至少 80 字
0 字 建議至少 120 字

安全與成本最佳化

學習目標

把縱深防禦(IAM、VPC、防火牆、Cloud Armor)與成本估算綁在一起。安全是底線、成本是天花板。

思考提示
  • IAM 採最小權限嗎?有沒有 service account 權限過大?
  • VPC firewall 規則是白名單還是黑名單?跨服務呼叫走 private IP 嗎?
  • Cloud Armor 的 WAF 規則有沒有覆蓋 OWASP Top 10?
  • 金鑰與憑證存在哪?Secret Manager 還是散落 env?
  • 成本三大吃量:Compute、Egress、License—哪個會先爆?有沒有 commit discount 或 Savings Plan 可用?
走一遍範例(登雲書店)

登雲書店:前端上 Cloud Armor(OWASP preconfigured rules),Order 服務獨立 service account 僅能讀寫自己的 DB;估算每月約 GKE $280 + Cloud SQL $210 + Cloud Storage $35 + LB/CDN $80 ≈ 約 $650 USD。

你的答案

0 字 建議至少 120 字
0 字 建議至少 120 字

完成了 13 步,下一步呢?

匯出這份設計文件,拿去跟同事或學習夥伴對焦,或是印出來在讀書會上討論。把同一份草稿換個情境重做一次,你會驚訝地發現自己選擇開始不一樣。

徽章解鎖!