系統(tǒng)構架是對已確定的需求的技術實現(xiàn)構架、作好規(guī)劃,運用成套、完整的工具,在規(guī)劃的步驟下去完成任務。抽象來說,它是計算機系統(tǒng)結構,或稱計算機體系結構,是一個系統(tǒng)在其所處環(huán)境中最高層次的概念;它確定一臺計算機硬件和軟件之間的銜接。具體地說計算機體系結構指的是計算機系統(tǒng)設計的觀念與架構,描述計算機在實做的設計原則。它確定一個計算機設計的部件功能 ,部件間接口 并且計算機體系結構著重于“負責了計算機架構的中心功能:計算”的 中央處理器 內部的運行動作與存儲器的訪問。
如果一個軟件開發(fā)人員,不了解軟件架構的演進,會制約技術的選型和開發(fā)人員的生存、晉升空間。這里我列舉了目前主要的四種軟件架構以及他們的優(yōu)缺點,希望能夠幫助軟件開發(fā)人員拓展知識面。
單體架構
Web應用程序發(fā)展的早期,大部分web工程師將所有的功能模塊打包到一起并放在一個web容器中運行,所有功能模塊使用同一個數(shù)據庫。
特點:
1、所有的功能集成在一個項目工程中。
2、所有的功能打在一個war包部署到服務器。
3、通過部署應用集群和數(shù)據庫集群來提高系統(tǒng)的性能。
優(yōu)點:
1、項目架構簡單,前期開發(fā)成本低,周期短,小型項目的首選。
2、開發(fā)效率高,模塊之間交互采用本地方法調用。
3、容易部署,運維成本小,直接打包為一個完整的包,拷貝到web容器的某個目錄下即可運行。
4、容易測試:IDE都是為開發(fā)單個應用設計的、容易測試——在本地就可以啟動完整的系統(tǒng)。
缺點:
1、全部功能集成在一個工程中,對于大型項目不易開發(fā)、擴展及維護。
2、版本迭代速度逐漸變慢,修改一個地方就要將整個應用全部編譯、部署、啟動,開發(fā)及測試周期過長。
3、無法按需伸縮,通過集群的方式來實現(xiàn)水平擴展,無法針對某業(yè)務按需伸縮。
分布式架構
針對單體架構的不足,為了適應大型項目的開發(fā)需求,許多公司將一個單體系統(tǒng)按業(yè)務垂直拆分為若干系統(tǒng),系統(tǒng)之間通過網絡交互來完成用戶的業(yè)務處理,每個系統(tǒng)可分布式部署,這種架構稱為分布式架構。
特點:
1、按業(yè)務垂直拆分成一個一個的單體系統(tǒng),此架構也稱為垂直架構。
2、系統(tǒng)與系統(tǒng)之間的存在數(shù)據冗余,耦合性較大,如上圖中三個項目都存在客戶信息。
3、系統(tǒng)之間的接口多為實現(xiàn)數(shù)據同步,如上圖中三個項目要同步客戶信息。
優(yōu)點:
1、通過垂直拆分,每個子系統(tǒng)變成小型系統(tǒng),功能簡單,前期開發(fā)成本低,周期短。
2、每個子系統(tǒng)可按需伸縮。
3、每個子系統(tǒng)可采用不同的技術。
缺點:
1、子系統(tǒng)之間存在數(shù)據冗余、功能冗余,耦合性高。
2、按需伸縮粒度不夠,對同一個子系統(tǒng)中的不同的業(yè)務無法實現(xiàn),比如訂單管理和用戶管理。
SOA架構
SOA是一種面向服務的架構,基于分布式架構,它將不同業(yè)務功能按服務進行拆分,并通過這些服務之間定義良好的接口和協(xié)議聯(lián)系起來。
特點: 1、基于SOA的架構思想,將重復公用的功能抽取為組件,以服務的方式向各各系統(tǒng)提供服務。 2、各各系統(tǒng)與服務之間采用webservice、rpc等方式進行通信。 3、ESB企業(yè)服務總線作為系統(tǒng)與服務之間通信的橋梁。 優(yōu)點: 1、將重復的功能抽取為服務,提高開發(fā)效率,提高系統(tǒng)的可重用性、可維護性。 2、可以針對不同服務的特點按需伸縮。 3、采用ESB減少系統(tǒng)中的接口耦合。 缺點: 1、系統(tǒng)與服務的界限模糊,會導致抽取的服務的粒度過大,系統(tǒng)與服務之間耦合性高。 2、雖然使用了ESB,但是服務的接口協(xié)議不固定,種類繁多,不利于系統(tǒng)維護。
微服務架構
基于SOA架構的思想,為了滿足移動互聯(lián)網對大型項目及多客戶端的需求,對服務層進行細粒度的拆分,所拆分的每個服務只完成某個特定的業(yè)務功能,比如訂單服務只實現(xiàn)訂單相關的業(yè)務,用戶服務實現(xiàn)用戶管理相關的業(yè)務等等,服務的粒度很小,所以稱為微服務架構。
特點:
1、服務層按業(yè)務拆分為一個一個的微服務。
2、微服務的職責單一。
3、微服務之間采用RESTful、RPC等輕量級協(xié)議傳輸。
4、有利于采用前后端分離架構。
優(yōu)點:
1、服務拆分粒度更細,有利于資源重復利用,提高開發(fā)效率。
2、可以更加精準的制定每個服務的優(yōu)化方案,按需伸縮。
3、適用于互聯(lián)網時代,產品迭代周期更短。
缺點:
1、開發(fā)的復雜性增加,因為一個業(yè)務流程需要多個微服務通過網絡交互來完成。
2、微服務過多,服務治理成本高,不利于系統(tǒng)維護。