任何一個系統按照邏輯部署維度均可以劃分紅應用層與基礎設施層,開發的應用軟件還有使用第三方的應用能夠抽象成一些組件的集合,爲了運行這些組件須要基礎設施層來提供支撐,基礎設施層有物理機、存儲、虛擬機、容器這些元素。web
基礎設施層中最基本的是物理機,隨着技術的發展慢慢出現了虛擬機和容器。數據庫
咱們先來看看基礎設施架構的演進。服務器
基礎設施架構不是一步到位的事情,是須要循環漸進不斷完善,隨着系統複雜度的提高和業務發展不斷的演進。接下來咱們以Ngnix+web+db這樣最基礎的架構看看一個系統的基礎設施從簡單到複雜的演變的過程:網絡
一臺主機運行多個組件架構
在系統上線初期用戶量比較小,對系統的可用性要求也比較低。這樣咱們能夠將全部組件都部署在一臺主機上。 負載均衡
一臺主機運行一個組件運維
隨着系統業務發展,系統有了性能方面的要求,這時候就須要獨立部署,一個組件部署到一臺機器上,每臺機器的配置也不盡相同,好比數據庫和web服務器配置會更高點。 性能
一個組件運行在多臺主機上設計
隨着業務的繼續發展,系統有了可用性方面的要求,這時候就須要將組件進行多實例部署,每一個實例部署在不一樣的機器上,經過集羣軟件來支持主備切換,這樣就造成了既保證性能又保證可用性的架構。 3d
主機有多臺,每臺運行多個組件,有負載均衡和主備切換機制
隨着系統複雜度的提高,部署的組件愈來愈多。若是再採用一臺機器部署一個組件的話會致使運營成本上升過快,考慮到資源成本這時候就會考慮交叉式的部署架構。一臺機器部署多個組件,可是他們之間是交叉進行部署。這樣既保證了組件有多實例又保證了任何一臺機器掛了的話最少還有一個實例能提供服務。
一個組件用一臺虛擬機運行,一臺物理機運行多個虛擬機
物理機的性能相對都比較高,若是一臺物理機只部署幾個組件其實是對物理機的浪費。爲了提升物理機的資源利用率這時候咱們將物理機拆分紅虛擬機來對外提供部署能力。
一臺物理機首先劃分出若干個虛擬機,這些組件分別部署在這些虛擬機裏。這樣就實現了資源的充分利用也提高了系統的可用性還有運維的便利度。
一個組件用一個容器運行,一臺物理機上運行多個容器
再日後咱們能夠將虛擬機替換成容器實現,容器是更輕量的技術,使用容器能夠有更高的資源使用率
這就是一個系統基礎設施演進的過程,固然這些方案並非說只能選擇其中一種,能夠根據實際場景組合使用,演變成既有物理機也有虛擬機、容器的混合狀態。
基礎設施原則上是解決組件到運行環境的映射問題,基礎設施架構須要考慮下面十個方面的核心問題:
考慮了上面幾個核心問題作出的基礎設施架構纔是良好的架構,這些核心問題的解決又須要架構師對服務器、網絡、存儲等知識有必定的瞭解,關注本系列文章,幫你解決這些問題。