12因素應(yīng)用是一系列云原生應(yīng)用架構(gòu)的模式集合,最初由Heroku提出。這些模式可以用來說明什么樣的應(yīng)用才是云原生應(yīng)用巩那。它們關(guān)注速度、安全此蜈、通過聲明式配置擴(kuò)展即横、可橫向擴(kuò)展的無狀態(tài)/無共享 進(jìn)程以及部署環(huán)境的整體松耦合。如Cloud Foundry裆赵、Heroku和Amazon ElasticBeanstalk都對部署12因素應(yīng)用進(jìn)行了專門的優(yōu)化东囚。
在12因素的背景下,應(yīng)用(或者叫app)指的是獨立可部署單元战授。組織中經(jīng)常把一些互相協(xié)作的可部 署單元稱作一個應(yīng)用页藻。
12因素應(yīng)用遵循以下模式:
代碼庫
每個可部署app在版本控制系統(tǒng)中都有一個獨立的代碼庫,可以在不同的環(huán)境中部署多個實例植兰。
依賴
App應(yīng)該使用適當(dāng)?shù)墓ぞ?如Maven份帐、Bundler、NPM)來對依賴進(jìn)行顯式的聲明楣导,而不該在部署環(huán) 境中隱式的實現(xiàn)依賴废境。
配置
配置或其他隨發(fā)布環(huán)境(如部署、staging、生產(chǎn))而變更的部分應(yīng)當(dāng)作為操作系統(tǒng)級的環(huán)境變量注 入噩凹。
后端服務(wù)
后端服務(wù)巴元,例如數(shù)據(jù)庫、消息代理應(yīng)視為附加資源驮宴,并在所有環(huán)境中同等看待逮刨。
編譯、發(fā)布堵泽、運(yùn)行
構(gòu)建一個可部署的app組件并將它與配置綁定修己,根據(jù)這個組件/配置的組合來啟動一個或者多個進(jìn)程, 這兩個階段是嚴(yán)格分離的迎罗。
進(jìn)程
該app執(zhí)行一個或者多個無狀態(tài)進(jìn)程(例如master/work)睬愤,它們之間不需要共享任何東西。任何需要的狀態(tài)都置于后端服務(wù)(例如cache佳谦、對象存儲等)戴涝。
端口綁定
該應(yīng)用程序是獨立的滋戳,并通過端口綁定(包括HTTP)導(dǎo)出任何/所有服務(wù)钻蔑。
并發(fā)
并發(fā)通常通過水平擴(kuò)展應(yīng)用程序進(jìn)程來實現(xiàn)(盡管如果需要的話進(jìn)程也可以通過內(nèi)部管理的線程多路復(fù)用來實現(xiàn))。
可任意處置性
通過快速迅速啟動和優(yōu)雅的終止進(jìn)程奸鸯,可以最大程度上的實現(xiàn)魯棒性咪笑。這些方面允許快速彈性縮放、部署更改和從崩潰中恢復(fù)娄涩。
開發(fā)/生產(chǎn)平等
通過保持開發(fā)窗怒、staging和生產(chǎn)環(huán)境盡可能的相同來實現(xiàn)持續(xù)交付和部署。
日志
不管理日志文件蓄拣,將日志視為事件流扬虚,允許執(zhí)行環(huán)境通過集中式服務(wù)收集、聚合球恤、索引和分析事件辜昵。
管理進(jìn)程
行政或管理類任務(wù)(如數(shù)據(jù)庫遷移),應(yīng)該在與app長期運(yùn)行的相同的環(huán)境中一次性完成咽斧。
這些特性很適合快速部署應(yīng)用程序堪置,因為它們不需要對將要部署的環(huán)境做任何假定。對環(huán)境假設(shè)能夠 允許底層云平臺使用簡單而一致的機(jī)制张惹,輕松實現(xiàn)自動化舀锨,快速配置新環(huán)境,并部署應(yīng)用宛逗。以這種方 式坎匿,十二因素應(yīng)用模式能夠幫我們優(yōu)化應(yīng)用的部署速度。
這些特性也很好地適用于突發(fā)需求,或者低成本地“丟棄”應(yīng)用程序碑诉。應(yīng)用程序環(huán)境本身是100%一次 性的彪腔,因為任何應(yīng)用程序狀態(tài),無論是內(nèi)存還是持久性进栽,都被提取到后端服務(wù)德挣。這允許應(yīng)用程序以易 于自動化的非常簡單和彈性的方式進(jìn)行伸縮。在大多數(shù)情況下快毛,底層平臺只需將現(xiàn)有環(huán)境復(fù)制到所需 的數(shù)目并啟動進(jìn)程格嗅。縮容是通過暫停正在運(yùn)行的進(jìn)程和刪除環(huán)境來完成唠帝,無需設(shè)法地實現(xiàn)備份或以其 他方式保存這些環(huán)境的狀態(tài)屯掖。就這樣,12因素應(yīng)用模式幫助我們實現(xiàn)規(guī)模優(yōu)化襟衰。
最后贴铜,應(yīng)用程序的可處理性使得底層平臺能夠非常快速地從故障事件中恢復(fù)瀑晒。
此外绍坝,將日志作為事件流處理能夠極大程度上的增強(qiáng)應(yīng)用程序運(yùn)行時底層行為的可見性。
強(qiáng)制環(huán)境之間的等同苔悦、配置機(jī)制的一致性和后端服務(wù)管理使云平臺能夠為應(yīng)用程序運(yùn)行時架構(gòu)的各個 方面提供豐富的可見性轩褐。以這種方式,十二因素應(yīng)用模式能夠優(yōu)化安全性玖详。