今天(2025年5月5日),我們再次目睹了全台金融系統的集體脆弱:多家銀行網路銀行與 App 因為新台幣急升、用戶瘋狂換匯,導致系統癱瘓、用戶無法登入。這不是第一次,也不會是最後一次。
作為工程師,我們必須開始思考:如何打造一個「反脆弱」(Antifragile)系統,在壓力下不僅能倖存,還能變得更強。
什麼是反脆弱系統?
Nassim Taleb 在《反脆弱》一書中指出:「脆弱的系統在壓力下崩潰,強壯的系統能撐住,而反脆弱的系統會在壓力下成長。」
而我們今天看到的網銀系統,仍處於「脆弱 → 強壯」的防禦思維。本文提出 5 層技術架構與設計面建議,幫助台灣金融系統邁向真正的反脆弱。
一、技術架構層:從 Monolith 到分散與彈性
微服務架構+事件導向
- 將換匯、轉帳、查詢等服務切分為獨立微服務,避免高流量操作阻塞整體系統。
- 以 EDA(Event-Driven Architecture) 為基礎,搭配 Kafka / NATS 等訊息中介,實現非同步處理。
[API Gateway]
│
[Command Bus] → [Exchange Service] → Kafka → [Settlement Worker]
│
↳ Redis Cache for FX Quotes
彈性擴展與容錯設計
- GCP/AWS 上設定 auto-scaling group 與 multi-zone 負載均衡。
- 引入 Circuit Breaker(Hystrix 或 Resilience4J) 保護關鍵資源,避免雪崩效應。
二、資料一致性策略:從強一致到延遲一致
延遲一致性(Eventual Consistency)
高頻匯兌交易不適合直接進行 ACID 操作。使用 SAGA 模式,結合分散式佇列與狀態回補邏輯(Compensation Handler)。
Query Write 分離(CQRS)
讓用戶操作立即產生「可見回應」,而實際寫入與處理交由後端 worker 處理,提升回應速度。
三、行為導向壓力分流:用戶不是一體適用
根據行為進行動態分流
- 對於查詢為主的用戶,回傳 Redis 或 Edge Cache 資料。
- 對於換匯操作,用 WAF 實作動態 rate limit 機制(例如:單用戶每 3 分鐘限一次操作)。
- 使用灰色策略,想盡辦法留住用戶,而不是讓用戶一直 reload 或是反覆啟動 App
離線模式備援
- 高峰期間開啟「只讀模式」,阻止所有換匯、跨行功能。
- 提供報價推播、行情通知等非互動式服務,降低 API 負載。
四、DevOps與災難備援:活用雲資源與彈性架構
Traffic Shadowing 測試策略
- 將生產環境流量 clone 到 staging,模擬擁塞負載預測。
- 可利用 Istio / Linkerd 進行 traffic mirroring。
多雲與冷備援部署
- 雲端間設定 GCP ⇆ Azure 雙向熱備,利用 Cloud DNS 動態轉向。
- 將換匯/帳戶查詢服務設為低耦合模組,於災難模式下直接切換。
混合雲架構(Hybrid Cloud):用錢買自由,用設計省錢
台灣多數銀行為了資安與法規要求,仍大量部署在地端機房(on-premise),但在高併發流量(如今日換匯事件)來襲時,缺乏彈性擴容能力。混合雲設計能達成以下三大目標:

成本彈性剖析(以 GCP/AWS 為例)
- 日常部署成本(base load):集中在地端或 Reserved Instance → 成本低。
- 高峰流量啟動(surge compute):使用 Spot / Preemptible VM → 成本可低至一般 VM 的 30%。
- 配合 CDN 或 API Gateway(如 Cloud Run / Lambda)可大幅減少內部呼叫流量,降低傳輸費用。
🔧 技術實踐建議
- 使用 Anthos(GCP) 或 AWS Outposts 整合管理地端與雲端資源。
- 實作 Kubernetes Federation(KubeFed) 或 Terraform-based 多雲調度模組。
- 整合 GitOps 流程,讓 infra as code 成為部署一致性與審計基礎。
小結:混合雲不只是「備胎」,而是反脆弱設計的主力
混合雲能讓我們在「成本 ≠ 韌性」的框架下,取得雙贏。
五、Erlang 架構思想:為金融系統量身打造的反脆弱典範
若我們從根本探討「如何設計一個天生反脆弱的系統」,Erlang 與 Elixir 架構思想幾乎完美契合金融系統需求:
核心挑戰Erlang 架構特性高併發Actor Model + Process 輕量獨立執行容錯恢復Supervisor Tree 自動重啟與隔離錯誤高可用Let it crash 哲學 + 熱升級(Hot Swap)分散式服務原生支援節點通訊、分布式部署
對金融應用的啟示
- 每一筆交易可獨立為一個 actor(Process),天生並行,互不干擾。
- Crash 不是問題,只要你有 supervisor,可以瞬間復原。
- 清算系統與客戶前端狀態同步可用 OTP(Open Telecom Platform)設計方式強化穩定性。
國際應用實例
- Klarna:用 Erlang 處理數百萬筆交易與風控模型
- Goldman Sachs:用 Elixir 快速建模高頻交易後台
- WhatsApp:每秒千萬級訊息穩定處理,與金融處理邏輯高度相似
Erlang 實作建議(不直接用 BEAM VM 時)
- Golang + NATS:模擬輕量 Process 與非同步訊息通訊
- Rust + Tokio:實現 actor 式隔離與非同步保證
- Node.js + RabbitMQ:搭配 cluster 模式模擬 supervisor tree
這些設計方法讓我們即使不用 Erlang 語言本身,也能以「Erlang 精神」建立反脆弱的交易與帳務系統。
六、制度與監管對接:打造平台級共享基礎設施
金融雲(FinTech Cloud)平台
- 由金管會主導建立「公有雲備援資源池」,供中小銀行擴容。
- 共享 Kafka Cluster、監控中心與攻擊緩解資源。
系統性壓力監控 API
- 所有銀行需設置
/system_status
API,公開系統壓力(CPU、佇列長度、回應時間),政府機關可即時掌握風險。
結論
反脆弱不是一次性的專案,而是一種設計哲學、一種技術文化,我們不該只是把服務修好,而是打造「愈打愈強」的系統。
金融是國安問題,工程架構則是這場國安戰爭的防火牆。
若您對本文有共鳴,也歡迎討論:
- 您的金融平台是否具備非同步與彈性設計?
- 您是否有建構 traffic shadowing 或 cold standby 的經驗?
- 您認為台灣是否該建立公共金融雲平台?