項目架構的演進

一 概述

隨着軟件行業的發展,軟件架構的發展經過了從單體架構->垂直架構->SOA架構->微服務架構的演進。

二 單體架構

單體架構是Web應用程序發展早期的一種架構,這種架構的特點就是所有的功能模塊都打成一個war包,並放在同一個web容器中,而且所有的功能模塊使用同一個數據庫。

              

單體架構的特點:

  1. 該架構下會將所有的功能集成在一個項目工程中。
  2. 所有的功能打成一個war包部署到服務器。
  3. 通過部署應用集羣和數據庫集羣來提高系統的性能。

單體架構的優點:

  1. 項目架構簡單,前期開發成本低,週期短,適合小型項目。
  2. 單體架構項目開發效率高,模塊之間交互採用本地方法調用。
  3. 項目部署方便,運維成本小,直接打包成一個完整的包並拷貝到web容器的某個目錄下即可。
  4. 容易測試,單體應用本地啓動方便,從而測試功能方便。

單體架構的缺點:

  1. 全部功能集成在一個項目中,對於大型項目不易開發,擴展及維護。
  2. 版本迭代速度逐漸變慢,修改一個地方就要將整個應用全部編譯,部署,啓動,開發和測試周期長。
  3. 無法按需伸縮,通過集羣的方式來實現水平擴展,無法針對某業務按需伸縮。

三 分佈式架構

在Web應用程序的發展過程中,爲了適應大型項目的開發需求,開發者需要將一個單體系統按業務垂直拆分爲若干個系統,系統之間通過網絡交互完成用戶的業務處理,每個系統可分佈式部署,所以就出現了分佈式架構。

分佈式架構的特點:

  1. 分佈式架構按業務垂直拆分成一個一個的單體系統,被稱爲垂直架構。
  2. 分佈式架構中,系統與系統之間存在數據冗餘,耦合性較大,如上圖三個項目都存在客戶信息。
  3. 分佈式架構中,系統之間的接口多爲實現數據同步,如上圖三個項目要求客戶信息同步。

分佈式架構的優點:

  1. 分佈式架構將系統進行垂直拆分,每個子系統都變成小型系統,功能簡單,前期開發成本低,週期短。
  2. 每個系統可按需伸縮,且可以按需採用不同的技術。

分佈式架構的缺點:

  1. 分佈式架構中存在數據冗餘,功能冗餘,耦合性高。
  2. 分佈式架構垂直拆分的子系統可以按需伸縮,但是伸縮的粒度不夠,對於一個子系統中的不同業務無法實現,比如訂單管理和用戶管理。

四 SOA架構

SOA架構是一種面向服務的架構,基於分佈式系統,將不同業務功能按服務進行拆分,並通過這些服務之間定義良好的接口和協議聯繫起來。

SOA架構的特點:

  1. 基於SOA的架構思想,將重複公用的功能抽取爲組件,以服務的方式爲不同的系統提供服務。
  2. 不同系統與服務之間採用webservice,rpc等方式進行通信。
  3. ESB(Enterprise Service BUS)企業級服務總線作爲不同系統與服務之間的橋樑。

SOA架構的優點:

  1. SOA架構將重複的功能抽取爲服務,提高開發效率,提高系統的可重用性,可維護性。
  2. 可以針對不同服務的特點按需伸縮。
  3. 採用ESB減少系統中的接口耦合。

SOA架構的缺點:

  1. 系統和服務之間界限模糊,會導致抽取的服務的粒度過大,系統與服務之間耦合性高。
  2. 雖然使用ESB,但是服務的接口協議不固定,種類繁多,不利於系統維護。

五 微服務架構

基於SOA架構的思想,爲了滿足移動互聯網對大型項目及多客戶端的需求,對服務層進行細粒度的拆分,所拆分的每個服務只能完成某個特定的業務功能,如訂單服務只能實現定單相關的業務,用戶服務實現用戶管理相關的業務等等,服務的粒度很小,所以稱作微服務架構。

微服務架構的特點:

  1. 服務層按業務拆分爲一個一個微服務,每個微服務的職責單一。
  2. 微服務之間採用RESTful,RPC等輕量級協議傳輸。
  3. 有利於採用前後端分離架構。

微服務架構的優點:

  1. 微服務架構中的服務拆分粒度更細,有利於資源的重複利用,提高開發效率。
  2. 可以更加精準的指定每個服務的優化方案,按需伸縮。
  3. 適用於互聯網時代,產品迭代週期更短。

微服務架構缺點:

  1. 由於每個業務流程需要多個微服務通過網絡交互來完成,所以微服務架構系統開發的複雜度增加。
  2. 微服務過多,服務治理的成本高,不利於系統的維護。