系統層次劃分
任何一個系統按照邏輯部署次元都可以劃分成應用層與基礎設施層,開發的應用軟體還有使用第三方的應用可以抽象成一些元件的集合,為了運作這些元件需要基礎設施層來提供支撐,基礎設施層有實體機、存儲、虛拟機、容器這些元素。
基礎設施層中最基本的是實體機,随着技術的發展慢慢出現了虛拟機和容器。
我們先來看看基礎設施架構的演進。
基礎設施架構演進
基礎設施架構不是一步到位的事情,是需要循環漸進不斷完善,随着系統複雜度的提升和業務發展不斷的演進。接下來我們以Ngnix+web+db這樣最基礎的架構看看一個系統的基礎設施從簡單到複雜的演變的過程:
一台主機運作多個元件
在系統上線初期使用者量比較小,對系統的可用性要求也比較低。這樣我們可以将所有元件都部署在一台主機上。
一台主機運作一個元件
随着系統業務發展,系統有了性能方面的要求,這時候就需要獨立部署,一個元件部署到一台機器上,每台機器的配置也不盡相同,比如資料庫和web伺服器配置會更高點。
一個元件運作在多台主機上
随着業務的繼續發展,系統有了可用性方面的要求,這時候就需要将元件進行多執行個體部署,每個執行個體部署在不同的機器上,通過叢集軟體來支援主備切換,這樣就形成了既保證性能又保證可用性的架構。
主機有多台,每台運作多個元件,有負載均衡和主備切換機制
随着系統複雜度的提升,部署的元件越來越多。如果再采用一台機器部署一個元件的話會導緻營運成本上升過快,考慮到資源成本這時候就會考慮交叉式的部署架構。一台機器部署多個元件,但是他們之間是交叉進行部署。這樣既保證了元件有多執行個體又保證了任何一台機器挂了的話最少還有一個執行個體能提供服務。
一個元件用一台虛拟機運作,一台實體機運作多個虛拟機
實體機的性能相對都比較高,如果一台實體機隻部署幾個元件實際上是對實體機的浪費。為了提高實體機的資源使用率這時候我們将實體機拆分成虛拟機來對外提供部署能力。
一台實體機首先劃分出若幹個虛拟機,這些元件分别部署在這些虛拟機裡。這樣就實作了資源的充分利用也提升了系統的可用性還有運維的便利度。
一個元件用一個容器運作,一台實體機上運作多個容器
再往後我們可以将虛拟機替換成容器實作,容器是更輕量的技術,使用容器可以有更高的資源使用率
這就是一個系統基礎設施演進的過程,當然這些方案并不是說隻能選擇其中一種,可以根據實際場景組合使用,演變成既有實體機也有虛拟機、容器的混合狀态。
基礎架構核心問題
基礎設施原則上是解決元件到運作環境的映射問題,基礎設施架構需要考慮下面十個方面的核心問題:
-
主機硬體配置
需要選擇什麼樣的配置來支撐元件部署?
-
主機與元件的對應關系
主機與元件之間是什麼關系?哪些元件部署在哪些主機上?
-
主機管理
如何管理這些主機?
-
元件管理
如何管理衆多的元件?
-
環境隔離
不同開發環境之間如何隔離?
-
資源隔離
一個元件占用太多資源的話勢必會導緻其他元件資源變少?如何給元件配置設定合适的資源?
-
總體資源使用率
系統的使用率是否處在一個合理的狀态?
-
性能
部署架構下各個元件的性能是否能得到保障?會不會出現瓶頸?
-
可用性
主機挂了系統的可用性能否得到保障?
-
成本
如何在有限的預算下去支撐所有元件的運作,或者說是能否通過一些好的設計去節省預算?
考慮了上面幾個核心問題做出的基礎設施架構才是良好的架構,這些核心問題的解決又需要架構師對伺服器、網絡、存儲等知識有一定的了解,關注本系列文章,幫你解決這些問題。