2005與2015軟件應用部署方式的比較
近期攜程網(wǎng)站由于程序員登錄生產(chǎn)現(xiàn)場誤操作導致整個網(wǎng)站長期無法訪問,這些現(xiàn)象反映了國內(nèi)很多大型網(wǎng)站的應用部署運營還是停留在2005年的階段,該文展示了2015年的生產(chǎn)現(xiàn)場運營現(xiàn)狀。
在過去十年中,構(gòu)建和發(fā)布應用程序的方式已經(jīng)發(fā)生顯著變化,這篇文章比較了2005年和2015在Java/JVM上應用部署的不同。
2005 = Multi-App Containers / App Servers / Monolithic Apps
2015 = Microservices / Docker Containers / Containerless Apps
2005 年我們基本都是以WAR文件作為項目結(jié)果,其包含Java的Web應用和有關(guān)依賴庫包,這個應用被部署到一個單個的應用服務(wù)器,稱為容器,因為它包含一個或多個應用,這個應用服務(wù)器提供了很多基礎(chǔ)服務(wù)比如HTTP服務(wù)器,服務(wù)目錄或共享庫包等等,不幸的是部署多個應用在一個容器中在擴展性 部署性和資源使用上有很多磕磕絆絆,應用服務(wù)器將應用和底層系統(tǒng)依賴隔離開來,這樣避免“it works on my machine” 問題(只在我機器上能夠運行),但是事情變得不是很平滑,因為系統(tǒng)依賴和配置游離于應用服務(wù)器也就是容器之外。
在2015年,應用能夠以作為自我包容單元的方式部署,應用自身包含一切,它直接運行在標準的系統(tǒng)依賴之上就可以,在Java世界,一個無容器containerless應用是一個ZIP文件,其包含包含基于JVM運行需要的一切依賴庫包,大多數(shù)開發(fā)框架已經(jīng)切換到這種containerless方式,比如Play框架, Dropwizard和Spring Boot等等。
系統(tǒng)級別的更完整可移植的自我包容單元有 Docker 和 LXC,不同于過去將很多應用部署到一個應用服務(wù)器容器中,一個個單個應用加入到Docker image,然后可以部署到一個或多個服務(wù)器中。
微服務(wù)在這里扮演了重要角色,因為以一個個微服務(wù)部署可以分離獨立,而傳統(tǒng)的應用服務(wù)器當部署其中一個應用時需要重啟整個服務(wù)器,這也就是企業(yè)部署速度是蝸牛的原因,部署應用是一件非常危險的工作,必須提前幾個月與眾多團隊協(xié)調(diào)好,熱部署只是一個承諾,從來沒有在生產(chǎn)環(huán)境實現(xiàn)過。
而微服務(wù)激活了獨立團隊部署自己的應用的愿望,微服務(wù)能夠快速準備 快速部署和擴展服務(wù)的能力,這些需求正好能夠?qū)ontainerless應用運行在底層Docker容器中實現(xiàn)。
2005 = 手工部署
2015 = 持續(xù)提交 /持續(xù)部署
2005年是手工部署,多個整體單一monolithic應用捆綁在一起,通過手工配置上傳到生產(chǎn)環(huán)境。
2015是持續(xù)遞交和持續(xù)部署,每天可以部署提交幾百次。
2005 = Persistent Servers / “祈禱它不會當機”
2015 = 不變的基礎(chǔ)設(shè)施/ Ephemeral Servers
今天,Netflix的Chaos Monkey能夠隨機關(guān)閉服務(wù)器,以確保我們各自準備工作完成就緒,然后啟動,可以瞬間進行應用實例的增加和減少,因為基礎(chǔ)設(shè)施的不變性,我們解決生產(chǎn)問題再也不需要SSH登錄到主機(banq注:近期攜程停機事件是由于程序員登錄生產(chǎn)環(huán)境誤操作導致,采取微服務(wù)+Docker+不變基礎(chǔ)設(shè)施環(huán)境,這種情況能夠避免),日志服務(wù)被導出到外部服務(wù),能夠以實時流方式查看。
2005 = Ops Team運營團隊
2015 = DevOps 開發(fā)運營合一
在2005年運營團隊拿到WAR文件,負責部署 管理和監(jiān)控它,開發(fā)人員手機無需24小時開機,因為運營人員可以在生產(chǎn)環(huán)境凌晨3點出現(xiàn)問題時做一些事情解決,但是***的風險就是在軟件交接時造成了很大的緩慢。
今天開發(fā)人員將會對投入生產(chǎn)的代碼一直負責到底,類似New Relic, VictorOps, 和 Slack這樣服務(wù)能夠幫助開發(fā)人員負責起運營職責,DevOps文化正在逐漸普及。