2005與2015軟體應用部署方式的比較
近期攜程網站由於程式設計師登入生產現場誤操作導致整個網站長期無法訪問,這些現象反映了國內很多大型網站的應用部署運營還是停留在2005年的階段,該文展示了2015年的生產現場運營現狀。
在過去十年中,構建和釋出應用程式的方式已經發生顯著變化,這篇文章比較了2005年和2015在Java/JVM上應用部署的不同。
2005 = Multi-App Containers / App Servers / Monolithic Apps
2015 = Microservices / Docker Containers / Containerless Apps
2005年我們基本都是以WAR檔案作為專案結果,其包含Java的Web應用和有關依賴庫包,這個應用被部署到一個單個的應用伺服器,稱為容器,因為它包含一個或多個應用,這個應用伺服器提供了很多基礎服務比如HTTP伺服器,服務目錄或共享庫包等等,不幸的是部署多個應用在一個容器中在擴充套件性 部署性和資源使用上有很多磕磕絆絆,應用伺服器將應用和底層系統依賴隔離開來,這樣避免“it works on my machine” 問題(只在我機器上能夠執行),但是事情變得不是很平滑,因為系統依賴和配置遊離於應用伺服器也就是容器之外。
在2015年,應用能夠以作為自我包容單元的方式部署,應用自身包含一切,它直接執行在標準的系統依賴之上就可以,在Java世界,一個無容器containerless應用是一個ZIP檔案,其包含包含基於JVM執行需要的一切依賴庫包,大多數開發框架已經切換到這種containerless方式,比如Play框架, Dropwizard和Spring Boot等等。
系統級別的更完整可移植的自我包容單元有 Docker 和 LXC,不同於過去將很多應用部署到一個應用伺服器容器中,一個個單個應用加入到Docker image,然後可以部署到一個或多個伺服器中。
微服務在這裡扮演了重要角色,因為以一個個微服務部署可以分離獨立,而傳統的應用伺服器當部署其中一個應用時需要重啟整個伺服器,這也就是企業部署速度是蝸牛的原因,部署應用是一件非常危險的工作,必須提前幾個月與眾多團隊協調好,熱部署只是一個承諾,從來沒有在生產環境實現過。
而微服務啟用了獨立團隊部署自己的應用的願望,微服務能夠快速準備 快速部署和擴充套件服務的能力,這些需求正好能夠將containerless應用執行在底層Docker容器中實現。
2005 = 手工部署
2015 = 持續提交 /持續部署
2005年是手工部署,多個整體單一monolithic應用捆綁在一起,透過手工配置上傳到生產環境。
2015是持續遞交和持續部署,每天可以部署提交幾百次。
2005 = Persistent Servers / “祈禱它不會當機”
2015 = 不變的基礎設施/ Ephemeral Servers
今天,Netflix的Chaos Monkey能夠隨機關閉伺服器,以確保我們各自準備工作完成就緒,然後啟動,可以瞬間進行應用例項的增加和減少,因為基礎設施的不變性,我們解決生產問題再也不需要SSH登入到主機(banq注:近期攜程停機事件是由於程式設計師登入生產環境誤操作導致,採取微服務+Docker+不變基礎設施環境,這種情況能夠避免),日誌服務被匯出到外部服務,能夠以實時流方式檢視。
2005 = Ops Team運營團隊
2015 = DevOps 開發運營合一
在2005年運營團隊拿到WAR檔案,負責部署 管理和監控它,開發人員手機無需24小時開機,因為運營人員可以在生產環境凌晨3點出現問題時做一些事情解決,但是最大的風險就是在軟體交接時造成了很大的緩慢。
今天開發人員將會對投入生產的程式碼一直負責到底,類似New Relic, VictorOps, 和 Slack這樣服務能夠幫助開發人員負責起運營職責,DevOps文化正在逐漸普及。
在過去十年中,構建和釋出應用程式的方式已經發生顯著變化,這篇文章比較了2005年和2015在Java/JVM上應用部署的不同。
2005 = Multi-App Containers / App Servers / Monolithic Apps
2015 = Microservices / Docker Containers / Containerless Apps
2005年我們基本都是以WAR檔案作為專案結果,其包含Java的Web應用和有關依賴庫包,這個應用被部署到一個單個的應用伺服器,稱為容器,因為它包含一個或多個應用,這個應用伺服器提供了很多基礎服務比如HTTP伺服器,服務目錄或共享庫包等等,不幸的是部署多個應用在一個容器中在擴充套件性 部署性和資源使用上有很多磕磕絆絆,應用伺服器將應用和底層系統依賴隔離開來,這樣避免“it works on my machine” 問題(只在我機器上能夠執行),但是事情變得不是很平滑,因為系統依賴和配置遊離於應用伺服器也就是容器之外。
在2015年,應用能夠以作為自我包容單元的方式部署,應用自身包含一切,它直接執行在標準的系統依賴之上就可以,在Java世界,一個無容器containerless應用是一個ZIP檔案,其包含包含基於JVM執行需要的一切依賴庫包,大多數開發框架已經切換到這種containerless方式,比如Play框架, Dropwizard和Spring Boot等等。
系統級別的更完整可移植的自我包容單元有 Docker 和 LXC,不同於過去將很多應用部署到一個應用伺服器容器中,一個個單個應用加入到Docker image,然後可以部署到一個或多個伺服器中。
微服務在這裡扮演了重要角色,因為以一個個微服務部署可以分離獨立,而傳統的應用伺服器當部署其中一個應用時需要重啟整個伺服器,這也就是企業部署速度是蝸牛的原因,部署應用是一件非常危險的工作,必須提前幾個月與眾多團隊協調好,熱部署只是一個承諾,從來沒有在生產環境實現過。
而微服務啟用了獨立團隊部署自己的應用的願望,微服務能夠快速準備 快速部署和擴充套件服務的能力,這些需求正好能夠將containerless應用執行在底層Docker容器中實現。
2005 = 手工部署
2015 = 持續提交 /持續部署
2005年是手工部署,多個整體單一monolithic應用捆綁在一起,透過手工配置上傳到生產環境。
2015是持續遞交和持續部署,每天可以部署提交幾百次。
2005 = Persistent Servers / “祈禱它不會當機”
2015 = 不變的基礎設施/ Ephemeral Servers
今天,Netflix的Chaos Monkey能夠隨機關閉伺服器,以確保我們各自準備工作完成就緒,然後啟動,可以瞬間進行應用例項的增加和減少,因為基礎設施的不變性,我們解決生產問題再也不需要SSH登入到主機(banq注:近期攜程停機事件是由於程式設計師登入生產環境誤操作導致,採取微服務+Docker+不變基礎設施環境,這種情況能夠避免),日誌服務被匯出到外部服務,能夠以實時流方式檢視。
2005 = Ops Team運營團隊
2015 = DevOps 開發運營合一
在2005年運營團隊拿到WAR檔案,負責部署 管理和監控它,開發人員手機無需24小時開機,因為運營人員可以在生產環境凌晨3點出現問題時做一些事情解決,但是最大的風險就是在軟體交接時造成了很大的緩慢。
今天開發人員將會對投入生產的程式碼一直負責到底,類似New Relic, VictorOps, 和 Slack這樣服務能夠幫助開發人員負責起運營職責,DevOps文化正在逐漸普及。
相關文章
- HNOI2015 實驗比較
- OS課 Level 2 實驗(2):軟體的部署與應用
- Xflow軟體與傳統CFD軟體比較有哪些優勢
- 訊息佇列中介軟體的選型與比較佇列
- Langchain 與 LlamaIndex:LLM 應用開發框架的比較與選用建議LangChainIndex框架
- 學Java的軟體哪些比較好用Java
- 比較適用的js日期物件定義方式JS物件
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- Rust與Go在區塊鏈中的應用比較 - definoobsRustGo區塊鏈
- 原生移動應用框架React Native與Flutter比較框架React NativeFlutter
- 一款資料庫比較與同步軟體的設計與實現資料庫
- 一對一直播軟體原始碼,比較常用的陣列排序方式有哪些?原始碼陣列排序
- 學Java有哪些比較好用的軟體呢?Java
- 企業用什麼團隊協作軟體比較多?
- JS嵌入html的方式及各種方式的比較JSHTML
- WPF應用中一種比較完美的許可權控制設計方式
- flatpak 和 snap 是 Linux 上的應用軟體打包方式Linux
- 訂單量多,用什麼智慧軟體彙總比較好
- 有什麼比較好用的影片錄影軟體
- 哪款軟體的資源管理功能比較好?
- 比較正規的買球軟體 可以買球賽的軟體推薦
- 訊息中介軟體(RabbitMq、Kafka)分析比較MQKafka
- 關於應用整合:同步與非同步通訊模式之間的比較非同步模式
- volatile與Atomic的比較
- Java字串建立方式比較Java字串
- ==與equals比較
- Java鎖與非阻塞演算法的效能比較與分析+原子變數類的應用Java演算法變數
- kubernetes ingress 在物理機上的nodePort和hostNetwork兩種部署方式解析及比較
- iOS:原生應用 VS Flutter VS GICXMLLayout 比較iOSFlutterXML
- 如何快速繪製基本網路圖?用什麼軟體比較好?
- 什麼樣的訂單系統軟體比較好用?
- 推薦個比較好用的協同辦公軟體?
- CRM軟體比較表(評分最高的前10名)
- 報表工具都有哪些應用部署方式?
- 基於Ubuntu下以Docker方式gitlab軟體的部署UbuntuDockerGitlab
- 你的 Mac 用對了嗎?推薦一些 Mac 上比較好用的軟體Mac
- SAP CRM,Cloud for Customer和Fiori應用的direct navigation比較CloudNavigation
- 簽名體制的比較
- MVVM與MVC模式的比較MVVMMVC模式