1. 程式人生 > >應用部署技術發展簡史

應用部署技術發展簡史

  網際網路企業生產環境的應用部署所經歷的過程,大致可分三個階段:

  • 物理機部署
  • 虛擬機器部署
  • 容器化部署

一、物理機部署時代

這裡寫圖片描述

  用純粹的物理機部署應用,這是所有早期物聯網公司必然經歷的一個階段。一臺伺服器,至少32核CPU、64G記憶體,如果只部署一個應用,那就太浪費了。於是,多個應用程序,DB,快取程序等等都部署在同一個機器上。這樣部署固然能高效的利用好昂貴的物理機,但是這種簡單粗暴的方式有一個最大的痛點:程序間資源搶佔。如果某個程序耗用了100%的CPU資源,其他的程序無法提供服務。或者如果一個程序因為突發異常很多,日誌把磁碟打滿了,所有的程序都要掛掉。程序間搶佔資源導致其他程序無法提供服務所導致的血案數不勝數。這樣的問題相信很多同學的遇到過。

  既然因為資源共享導致的問題,那麼解決方式就是:程序間硬體資源隔離。虛擬機器技術的出現解決了這個棘手的問題。

二、 虛擬機器部署時代

這裡寫圖片描述
  虛擬機器通過硬體虛擬化,即每臺虛擬機器事先從物理機分配好cpu核數,記憶體, 磁碟,每臺虛擬機器一般只部署一個應用。從而解決了程序間資源隔離的問題。不同的程序在不同的虛擬機器上跑,大家相安無事,老死不相往來,自然沒有資源衝突。一臺物理機會部署多臺虛擬機器,物理機裡的所有虛擬機器則依靠虛擬機器管理系統進行管理。
  虛擬機器技術解決了物理機部署的痛點。但是虛擬機器並不是完美的,他也有自己的缺點。大叢集部署情況下,軟體的版本容易混亂
  大應用叢集的虛擬機器第一次安裝時,由於作業系統映象是一樣的,所以剛開始,軟體的版本和庫依賴是統一的。隨著時間的推移,開源的軟體(tomcat, jdk, nginx)需要逐步升級,於是運維同學開始批量升級叢集的軟體版本,批量升級可能有遺漏或升級失敗。同時有些開發同學會自己登陸機器修改軟體的版本或者配置,以滿足自己的需求。長此以往,一個應用的叢集的虛擬機器的軟體版本和配置逐漸碎片化。當線上出現問題,需要排查到基礎軟體層面時,由於軟體版本碎片化的問題,導致排查變得很棘手。
  為了解決虛擬機器部署的痛點,容器技術應運而生。

三、 容器部署時代

這裡寫圖片描述

  容器技術不僅限於docker,但是docker目前最為流行,我以docker為例講容器。docker容器技術的核心之一在於映象檔案。

映象檔案,通俗的理解就是一個程序執行時依賴的軟體檔案的集裝箱。

  應用叢集部署時,每臺機器首先會拉取指定版本的映象檔案。安裝映象後產生了docker容器。由於所有機器的映象檔案一樣,容器的軟體版本故而一樣。即使開發或運維中途修改了容器的軟體版本,但是容器銷燬時,軟體的改動會隨容器的銷燬一起湮滅
  容器如果要升級軟體版本,那就修改映象檔案。這樣部署時叢集內所有的機器重新拉取新的映象,軟體因此跟著一起升級。軟體版本混亂的問題,到docker這裡,也就得到了完美的解決。

一個疑問:有了容器技術,生產環境為何還需要部署虛擬機器?

  虛擬機器能做到硬體資源的徹底隔離,docker不行。虛擬機器 和 docker各取長處,最佳CP。

四、小結

  每個新技術的產生並風行,根本原因一定是因為了解決某個廣泛的問題,並提高了整個業界的生產力。