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