2026/11/02

12-Factor App

12-Factor App 是 Cloud Based 軟體開發的方法。它最初由 Heroku 的共同創辦人 Adam Wiggins 於 2011 年提出,總結當時在該平台上開發與部署應用程式後所獲得的寶貴經驗。2010 年代,系統正在從傳統伺服器,轉向 PaaS 與 SaaS。Heroku 的工程團隊整理出這套規範,讓開發者能建構出更具 Scalability 及 Portability 易於維護的應用程式。

方法的目標:

  • 標準化

    以宣告方式 declarative,建立自動配置,減輕新的開發人員初次參與專案的時間與成本

  • 可移植性

    有clean contract 明確的定義,確認作業系統,並能提供在不同執行環境運作的最大彈性

  • 可部署在 cloud platforms

    適合部署在先進的雲端系統,減少伺服器與系統的管理問題

  • 持續部署

    減少開發與正式環境的差異,能夠持續部署,以達成 agility 最大化

  • scale up

    不需要改變工具、架構、開發環境,就能快速因應大流量

1. Codebase

One codebase tracked in revision control, many deploys

一份在 vevision control 管理的程式碼,可部署在多個執行環境

2. Dependencies

Explicitly declare and isolate dependencies

明確地宣告及隔離相依性

3. Config

Store config in the environment

在執行環境中儲存設定配置,不要寫在程式裡面

4. Backing services

Treat backing services as attached resources

把DB,Cache, MQ,SMTP 等等外部資源,透過 URI 的方式存取

5. Build, release, run

Strictly separate build and run stages

嚴格分離 Build, Release, Run 階段

  • build 是編譯成服務元件

  • release 是將元件發佈到 registry,提供給外部執行環境下載

  • run 是在執行環境取得元件,搭配部署設定執行該元件

6. Processes

Execute the app as one or more stateless processes

以一到多個無狀態程序執行app

7. Port binding

Export services via port binding

透過 service port binding 對外提供服務

8. Concurrency

Scale out via the process model

透過 process model 水平擴充

  • 每一個 service app 都是獨立的 process,可啟動多個 thread 分散 process 性能壓力

  • 同一個 service app 也可以啟動多個 instances

9. Disposability

Maximize robustness with fast startup and graceful shutdown

快速啟動/優雅終止 app,最大化系統穩定度

10. Dev/prod parity

Keep development, staging, and production as similar as possible

盡可能保持dev、pre-release、prod環境相同

11. Logs

Treat logs as event streams

將 logs 視為事件串流

  • 微服務應該建立統一的服務來管理日誌(ELK、Graylog、Cloudwatch...)

  • 每個運行的微服務都直接透過Stdout和Stderr來輸出日誌。開發時期透過console來查看時間排序下的Event log。正式環境,則是透過 log 管理服務,來收集、聚合、索引、分析這些Log

12. Admin processes

Run admin/management tasks as one-off processes

把維護/管理任務當作一次性process執行

  • 例如 db migration, db snapshot, schema/table更動,定期renew憑證等等

  • 把這些一次性作業寫成腳本或是Shell,當成一般程式來執行,也進到Git做版控

References

The Twelve-Factor App

[12 Factor原則簡介

沒有留言:

張貼留言