架構師之路 -- 基礎設施架構

系統層次劃分

任何一個系統按照邏輯部署維度都可以劃分成應用層與基礎設施層,開發的應用軟件還有使用第三方的應用可以抽象成一些組件的集合,爲了運行這些組件需要基礎設施層來提供支撐,基礎設施層有物理機、存儲、虛擬機、容器這些元素。

 

image.png

 

 

基礎設施層中最基本的是物理機,隨着技術的發展慢慢出現了虛擬機和容器。

我們先來看看基礎設施架構的演進。

基礎設施架構演進

基礎設施架構不是一步到位的事情,是需要循環漸進不斷完善,隨着系統複雜度的提升和業務發展不斷的演進。接下來我們以Ngnix+web+db這樣最基礎的架構看看一個系統的基礎設施從簡單到複雜的演變的過程:

一臺主機運行多個組件

在系統上線初期用戶量比較小,對系統的可用性要求也比較低。這樣我們可以將所有組件都部署在一臺主機上。

image.png

 

 

一臺主機運行一個組件

隨着系統業務發展,系統有了性能方面的要求,這時候就需要獨立部署,一個組件部署到一臺機器上,每臺機器的配置也不盡相同,比如數據庫和web服務器配置會更高點。

image.png

 

 

一個組件運行在多臺主機上

隨着業務的繼續發展,系統有了可用性方面的要求,這時候就需要將組件進行多實例部署,每個實例部署在不同的機器上,通過集羣軟件來支持主備切換,這樣就形成了既保證性能又保證可用性的架構。

image.png

 

 

主機有多臺,每臺運行多個組件,有負載均衡和主備切換機制

隨着系統複雜度的提升,部署的組件越來越多。如果再採用一臺機器部署一個組件的話會導致運營成本上升過快,考慮到資源成本這時候就會考慮交叉式的部署架構。一臺機器部署多個組件,但是他們之間是交叉進行部署。這樣既保證了組件有多實例又保證了任何一臺機器掛了的話最少還有一個實例能提供服務。

image.png

 

 

一個組件用一臺虛擬機運行,一臺物理機運行多個虛擬機

物理機的性能相對都比較高,如果一臺物理機只部署幾個組件實際上是對物理機的浪費。爲了提高物理機的資源利用率這時候我們將物理機拆分成虛擬機來對外提供部署能力。

image.png

 

 

一臺物理機首先劃分出若干個虛擬機,這些組件分別部署在這些虛擬機裏。這樣就實現了資源的充分利用也提升了系統的可用性還有運維的便利度。

一個組件用一個容器運行,一臺物理機上運行多個容器

再往後我們可以將虛擬機替換成容器實現,容器是更輕量的技術,使用容器可以有更高的資源使用率

image.png

 

 

這就是一個系統基礎設施演進的過程,當然這些方案並不是說只能選擇其中一種,可以根據實際場景組合使用,演變成既有物理機也有虛擬機、容器的混合狀態。

基礎架構核心問題

基礎設施原則上是解決組件到運行環境的映射問題,基礎設施架構需要考慮下面十個方面的核心問題:

  • 主機硬件配置 需要選擇什麼樣的配置來支撐組件部署?
  • 主機與組件的對應關係 主機與組件之間是什麼關係?哪些組件部署在哪些主機上?
  • 主機管理 如何管理這些主機?
  • 組件管理 如何管理衆多的組件?
  • 環境隔離 不同開發環境之間如何隔離?
  • 資源隔離 一個組件佔用太多資源的話勢必會導致其他組件資源變少?如何給組件分配合適的資源?
  • 總體資源利用率 系統的利用率是否處在一個合理的狀態?
  • 性能 部署架構下各個組件的性能是否能得到保障?會不會出現瓶頸?
  • 可用性 主機掛了系統的可用性能否得到保障?
  • 成本 如何在有限的預算下去支撐所有組件的運行,或者說是能否通過一些好的設計去節省預算?

考慮了上面幾個核心問題做出的基礎設施架構纔是良好的架構,這些核心問題的解決又需要架構師對服務器、網絡、存儲等知識有一定的瞭解,關注本系列文章,幫你解決這些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章