Skip to content

End-to-End 雲原生全端架構

類別:Cloud Architecture · Serverless · CI/CD技術棧:AWS Lambda · API Gateway · DynamoDB · S3 · CloudFront · GitHub Actions · Vue.js · iOS · Flutter


背景

這個系統最大的挑戰在於資料來源的多樣性:多個 iOS AppAndroid App,以及各式各樣的 Edge Devices(例如聲音盒子)同時在場域中運作,每個裝置都會高頻率地將音檔與感測資料打上雲端。

這不是一個簡單的「API 接資料庫」問題。真正需要解決的是:

  1. 高併發承載:裝置數量多,連線請求集中,後端不能被打掛
  2. 跨平台格式對齊:iOS、Android、Edge Device 的資料格式各有差異
  3. 維運可持續性:系統要能自動更新,不能每次部署都是高風險手術

系統架構

裝置端

由於我有 iOS App 開發背景,負責制定裝置端的資料上傳規範。清楚裝置端的限制(電池、網路斷線重連、背景執行限制),讓協議設計更貼近真實場景。

  • iOS App:Swift 原生開發,負責音檔錄製與上傳
  • Android App:Flutter 跨平台實作
  • Edge Devices:自定義通訊協議,輕量化資料包設計

雲端層:純 Serverless 架構

為什麼選 Serverless? 裝置端的連線請求是突發性的,無法預測高峰時間。傳統 EC2 伺服器需要預先設定容量,高峰時可能不夠,離峰時又浪費費用。Serverless 可以根據實際請求量自動彈性擴展。

架構設計:

裝置端

API Gateway(統一入口)

Lambda(資料驗證 + 分流處理)

DynamoDB(結構化 Metadata)+ S3(音檔實體)

API Gateway 作為所有裝置的統一入口,負責請求驗證與路由。

Lambda 處理核心邏輯:

  • 接收並驗證資料格式
  • 將 Metadata 寫入 DynamoDB
  • 將音檔實體上傳至 S3

由於 Lambda 可以根據併發請求數自動擴展,高峰期的大量裝置連線可以被平滑吸收。

CI/CD 全自動化部署

CI(持續整合)— GitHub Actions 每次 Git Push 自動觸發:

  • 單元測試 + 整合測試
  • Docker Image 建置與推送至 AWS ECR
  • 測試報告與 Lint 檢查

CD(持續部署)— 自動化

  • 後端 Lambda:測試通過後自動部署至 Lambda,無停機更新
  • 前端 Vue.js:自動打包並同步至 S3,CloudFront 快取自動失效更新

整套 CI/CD 讓每次程式碼合併後,系統自動完成測試、建置、部署,維運工程師不需要手動介入。


關鍵決策:為何選擇純 Serverless

傳統方案的問題: EC2 + Load Balancer 需要預先設定機器規格,面對突發流量需要手動擴展或設置複雜的 Auto Scaling 規則。

Serverless 的優勢:

  • 按請求計費,沒有請求就沒有費用
  • 自動彈性擴展,無需手動設定容量
  • 無需管理伺服器底層,降低維運複雜度

成果

  • 系統穩定承接多種裝置的高頻資料上傳,無服務中斷事件
  • CI/CD 自動化大幅降低部署風險與維運負擔
  • Serverless 架構讓成本與流量成正比,避免了固定費用的浪費

反思

這個專案讓我最深刻的體會是:架構選型要回答的問題不是「哪個方案最先進」,而是「哪個方案最適合這個問題的形狀」。Serverless 不是萬靈丹,但對於突發性、多來源的裝置資料接收場景,它確實是最合理的選擇。