The Twelve-Factor
The Twelve-Factor 是由 Heroku Founder 同時也是 CTO 的 Adam Wiggins 所提出。他在參與了數以百計的軟體開發部署,加上他在 Heroku 間接見證數十萬應用軟體發展後,所構築出的理論。綜合了關於 SaaS 所有的經驗與智慧,提出理想中最佳實踐 (Best practices) 的準則。其中特別關注應用軟體如何保持良性成長,開發者之間如何進行有效的程式碼協作。
摘要
在現在的時代,軟體一般會以服務的形式來交付,稱為 軟體及服務
或 SaaS (Software-as-a-service)
,Twelve-Factor 為建構 SaaS 應用服務關注以下這些面向:
- 使用自動化的標準流程,從而使新的開發者以最少的學習成本加入這個專案
- 和作業系統之間儘可能的劃清界限,在各個系統中提供最大的可移植性
- 適合部署在現代的雲端運算平台,從而在伺服器與系統管理方面節省資源
- 將開發環境和生產環境的差異降至最低,並使用持續交付實施敏捷開發
- 可以在工具、架構和開發流程不發生明顯變化的前提下達成擴充
這套理論適用於任意語言和後端服務(資料庫、訊息佇列、記憶體快取等)開發的應用服務。
準則
基準程式碼:一份版本管理的基準程式碼,多份部署
Codebase - One codebase tracked in revision control, many deploys相依性:外顯示地宣告相依關係
Dependencies - Explicitly declare and isolate dependencies設定檔:在環境中儲存設定檔
Config - Store config in the environment後端服務:把後端服務當作附加資源
Backing services - Treat backing services as attached resources建置,發佈,執行:嚴格分離建置和執行
Build, release, run - Strictly separate build and run stages程序:以一個或多個無狀態的程序執行應用程式
Processes - Execute the app as one or more stateless processes通訊埠綁定:使用通訊埠綁定方式提供服務
Port binding - Export services via port binding併發:透過程序模型進行擴充
Concurrency - Scale out via the process model可拋棄性:快速啟動和優雅終止可最大化穩健性
Disposability - Maximize robustness with fast startup and graceful shutdown開發環境與線上環境等價:儘可能的保持開發,預發佈,線上環境相同
Dev/prod parity - Keep development, staging, and production as similar as possible日誌:把日誌當作事件流
Logs - Treat logs as event streams管理程序:後台管理任務當作一次性程序執行
Admin processes - Run admin/management tasks as one-off processes