B08 · 後端架構決策 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → backend/ROADMAP.md


章節目標

Architecture decisions 是後端的大題目——單體 vs 微服務、事件驅動 vs 同步、Serverless vs Server、DDD 分層到哪、什麼時候拆什麼時候合。本章不教設計模式細節(那在 architecture-patterns/),而是「遇到真實 trade-off 時怎麼判斷」。


🌱 基本介紹

#主題SlugStage大綱
01後端架構決策是什麼01-what-is-architecture-decision🌱ADR(Architecture Decision Record)概念、決策成本、可逆性

❓ 為什麼需要

#主題SlugStage大綱
02為什麼不能抄大公司架構02-why-not-copy-faang🌱Netflix / Uber 的微服務是 100+ 人團隊 / 1B+ users 場景;你 5 人團隊硬抄只會死;conway’s law
03為什麼「微服務」常被誤解03-why-microservice-misunderstood🌱以為拆成多個 service 就是微服務;缺了 service boundary / 共用資料庫 / 沒 deploy 獨立;tight coupling 比 monolith 還嚴重
04為什麼先 Monolith 再拆比較好04-why-monolith-first🌱找不到對的 boundary 就拆 = 錯拆;Martin Fowler 的 monolith-first;proto 案例

🕰️ 演進

#主題SlugStage大綱
05後端架構演進史05-architecture-evolution🌱LAMP 單體 → SOA → Microservice(2014+)→ Serverless(2015+)→ Service Mesh → Modular Monolith 回潮(2022+)
06Monolith → Microservice 轉型⛔️ micro-service/28-monolith-to-microservice🌿跨系列

🧠 知識型

F08-A 核心架構決策

#主題SlugStage大綱
07Monolith vs Microservice⛔️ micro-service/01-why-api-stress-test / 28🌿跨系列
08什麼時候該拆微服務⛔️ micro-service/39-when-to-split🌿跨系列
09微服務拆分模式⛔️ micro-service/40-microservice-split-patterns🌿跨系列
10Modular Monolith10-modular-monolith🌱拆 module 但不拆 process、boundary 先練 code-level;shopify / basecamp 案例
11Serverless vs Server⛔️ cloud/02-serverless-vs-server🌿跨系列

F08-B 通訊模式

#主題SlugStage大綱
12同步 vs 非同步通訊12-sync-vs-async-comm🌱REST / gRPC 同步 vs Event-driven 非同步、何時選哪種
13Event-driven Architecture⛔️ micro-service/35-event-driven-basics / 36-event-driven-pitfalls🌿跨系列
14BFF(Backend for Frontend)14-bff-pattern🌱BFF 的 Why、怎麼設計、跟 API Gateway 邊界
15API Gateway 模式⛔️ infra/21-api-gateway🌿跨系列
16Service Mesh16-service-mesh🌱Istio / Linkerd、sidecar、跟 K8s 整合、2026 現況
16-2MVC vs Event-driven 架構風格(應用內部)16-2-mvc-vs-event-driven🌱應用層內部架構選擇:MVC(Controller 同步 call Service)vs Event-driven(Event Bus / 非同步 handler 處理);什麼場景該 MVC、什麼場景該 Event-driven;兩者混合模式;跟 B12 Queue #13 / B08 #13 Event-driven 的區別(application-level vs system-level)

F08-C 資料一致性

#主題SlugStage大綱
17分散式交易的真相17-distributed-transaction🌱2PC 為什麼沒人用、Saga pattern、Outbox pattern、eventual consistency 的接受
17-2資料一致性 / Saga 實戰⛔️ micro-service/46-data-consistency-saga🌿跨系列
17-3Eventual Consistency 實戰⛔️ micro-service/47-eventual-consistency🌿跨系列
18Saga Pattern18-saga🌱Choreography vs Orchestration、補償交易、失敗處理
19Outbox Pattern19-outbox🌱跟業務 tx 同一個 DB 交易寫 outbox table,後台 worker 送 MQ;避免 dual-write 一致性問題
20CQRS(Command Query Responsibility Segregation)20-cqrs🌱讀寫分離;什麼規模值得

F08-D DDD 視角(後端實用版)

#主題SlugStage大綱
21DDD 給後端工程師21-ddd-for-backend🌱Bounded Context、Aggregate、Entity / Value Object;不是必要但有助於決定服務邊界
22Bounded Context 跟微服務邊界的關係22-bounded-context-vs-service🌱1:1 是誤解;一個 context 可能多個 service、多個 context 可能在同一個 service

F08-E 實戰選型

#主題SlugStage大綱
23真實案例 anti-pattern 集合⛔️ micro-service/29-real-world-antipatterns / 30-lessons-learned🌿跨系列
24架構決策記錄(ADR)怎麼寫24-adr-writing🌱Michael Nygard ADR 模板、team 知識沉澱、決策可追溯

F08-F Monolith → Microservice 轉換準備清單

本節是 實戰 checklist——要從單體拆成微服務,這些東西必須先準備好,不然拆出去只會痛。

#主題SlugStage大綱
25結構化 Log + Log Formatter 統一25-unified-log-formatter🌱3 個 service 寫 3 種 log → 跨服務 debug 地獄;JSON 格式統一、欄位 convention、共用 logger library
26Correlation ID / Trace ID 貫穿26-correlation-id-propagation🌱HTTP header + middleware 自動注入、跨 service 傳遞、log 關聯;proto 用 request_id middleware 實作
27Error Code 與 Exception 階層統一27-unified-error-hierarchy🌱每個 service 錯誤格式要一致;client 統一處理;跟 i18n / monitoring 配合
28Shared Types / Schema 管理28-shared-types-schema🌱Internal package 抽 types / proto / OpenAPI;避免 copy-paste;版本 lock;breaking change 流程
29Shared Middleware 抽取策略29-shared-middleware-extraction🌱Auth / logging / rate limit 不要每服務重寫;shared package vs service mesh 處理;proto shared/middleware/ 11 個案例
30API Versioning 跨服務策略30-api-versioning-cross-service🌱每服務獨立 semver 還是全域版號;consumer / producer 版本相容;breaking change 傳播
31認證架構收斂31-auth-architecture-consolidation🌱誰發 token / 誰驗 / internal service auth 選型;跟 B10 #24–28 連動;常見陷阱(每服務自己發 token)
32Health Probe Standardization32-health-probe-standard🌱/health/live / /health/ready 統一規範;K8s probe 一致;跟 Gateway / LB 整合
33Service Discovery / DNS33-service-discovery🌱K8s Service / Consul / etcd;static config vs dynamic;internal DNS 慣例
34Secret / Config 集中管理34-secret-config-centralized🌱每服務自己 .env → Vault / K8s Secret / AWS Secrets Manager;rotation 跨服務;ConfigMap 分層
35Clock Skew / Time 處理35-clock-skew-handling🌱跨節點時戳不同步、NTP 的限制;JWT expiration / distributed lock TTL 都受影響
36CI/CD Per Service36-cicd-per-service🌱Monorepo vs Multirepo 選擇;selective build(只 build 改動服務);image tagging 策略
37Monitoring / Alerting Per Service37-monitoring-per-service🌱每服務獨立 dashboard、SLO / SLI、on-call rotation;alert 不淹沒
38Capacity Planning 跨服務38-cross-service-capacity🌱新服務上線前怎麼預估 resource;query rate / latency budget;跟 B19 壓測配合
39Conway’s Law + 組織配合39-conway-law🌱團隊邊界決定服務邊界;反向 Conway 刻意調組織;跨團隊協作機制

F08-G 微服務架構 Patterns

#主題SlugStage大綱
40Sidecar Pattern 深入40-sidecar-pattern🌱Istio envoy / Dapr / 自寫 sidecar;responsibility offload;跟 Service Mesh (#16) 的關係
41Ambassador / Adapter Pattern41-ambassador-adapter🌱Ambassador proxy 外部 service、Adapter 接 legacy system;跟 BFF 的區別
42BFF vs API Gateway 邊界42-bff-vs-gateway-boundary🌱Gateway 統一入口(路由 / auth)vs BFF per-client(aggregation / transformation);誰做什麼;Multi-BFF 策略(Web / Mobile / Partner)

F08-H 跨地域部署(Multi-region)

#主題SlugStage大綱
43Multi-region 架構模式43-multi-region-patterns🌱Active-Active vs Active-Passive / Pilot Light;read local write home / full replication;成本 trade-off
44Region Routing 與 Failover44-region-routing-failover🌱GeoDNS / Anycast / CloudFront;latency routing vs weight;failover RTO 驗證
45Data Residency 與跨區資料45-data-residency🌱GDPR / 中國 PIPL 資料地域限制;怎麼做跨區 replication 同時滿足法規;encryption boundary

🔧 小實作注意事項

#主題SlugStage大綱
46畫架構圖的工具跟習慣46-architecture-diagramming🌱C4 model、D2 / PlantUML / Mermaid、diagram-as-code;避免 PowerPoint 圖 rot
47用 ADR 記錄 proto 架構演進47-proto-adr-case-study🌱從單體 FastAPI 到三 service + Kong gateway 的決策過程

💣 Anti-pattern

#主題SlugStage大綱
48架構 Anti-patterns48-architecture-antipatterns🌱無 boundary 微服務(共用 DB)、Distributed Monolith(強耦合的多 service)、早期 over-engineering、沒 ADR 決策無 trace、抄大公司架構、Service 間用 DB call 而非 API

🧰 對應檢查工具

#主題SlugStage大綱
49架構相關工具49-architecture-tooling🌱ArchUnit(Java 架構 unit test)、NetArchTest(.NET)、dependency graph 工具、Structurizr / D2 / Mermaid

📎 補充

#主題SlugStage大綱
S01架構風格應用architecture-patterns/🌿跨系列
S02Conway’s Law 實戰s02-conways-law🌱組織結構決定架構、反向 Conway 刻意調組織來改架構
S03Macro vs Micro 架構s03-macro-vs-micro-architecture🌱Gregor Hohpe 提出、公司級架構 vs 單 app 架構

章節進度統計

  • 知識主題:28 + 3 補充 = 31 項
  • 🌿 growing:6(跨系列)
  • 🌱 seed:25

跨系列連結

  • architecture-patterns/(Layered / Clean / DDD / CQRS / Event Sourcing 等風格)
  • micro-service/ 01、28、35–36、39–40、46–47(微服務實戰素材 + Saga / eventual consistency)
  • backend/api-design/ B09(架構影響 API 設計)
  • cloud/02-serverless-vs-server
  • infra/21-api-gateway
  • standards/05-good-infra-setup