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