云計算時代應用設計十二要素
什么樣的軟件才是可用性和可維護性好的軟件?
什么樣的代碼才能避免后續開發的上手障礙?
什么樣的實行才能穩定的運行在分布式的環境中?
Heroku (一家 PaaS 服務提供者,2010 年被 Salesforce 收購)平臺創始人 Adam Winggins,對我們在云時代的應用設計設計和實現提出了十二種風格,對設計高效的應用,特別是在 PaaS 和 SaaS都有很好的參考意義。
一、代碼
每個子系統都用一個代碼庫管理,使用版本管理,實現獨立的部署。
二、依賴
顯式聲明依賴,通過環境來嚴格隔離不同依賴。
三、配置
在環境變量中保存配置信息,而避免放在源碼或配置文件中。
四、后端服務
后端服務作為可掛載資源來使用,這樣系統跟外部依賴盡量松耦合。
五、生命周期
區分不同聲明周期的運行環境,包括創建、發布、部署,各個步驟要相互隔離。
六、進程
以一個或多個無狀態的進程來運行應用,即盡量實現無狀態,不要在進程中保存數據。
七、端口
通過端口綁定來對外提供服務。
八、并發
通過進程控制來擴展,即以多進程模型進行擴展。
九、可丟棄性
快速啟動,優雅關閉,并盡量魯棒(隨時 kill,隨時 crash)。
十、開發與生產環境的差異性
盡量保持從開發到生產部署環境的相似性。
十一、日志
將日志當作事件流來進行統一的管理和維護(使用 Logstash 等工具)。
十二、管理
將管理作為一次性的系統服務來使用。