1. 程式人生 > 其它 >架構發展歷史

架構發展歷史

    01.鳥瞰架構歷史

    單體應用:原始氏族時代,氏族內部有簡單分工,氏族之間沒有聯絡.

    分散式架構:封建社會,每個家庭自給自足,家庭之間有少量交換關係.

    SOA架構:前工業時代,企業提供各種成品服務,我為人人,人人為我,相互依賴.

    微服務架構:後工業時代,有些企業聚焦提供水電煤等基礎設施服務,其他企業在之上提供生活服務,依賴有層次.

    02.單體架構

    系統只有一個應用,相應地,程式碼放在一個工程裡管理;打包成一個應用;部署在一臺機器;在一個DB裡儲存資料.

    單體式應用採用分層架構,按照呼叫順序,從上到下一般為表示層,業務層,資料訪問層,DB層.

    

    優點:

    現有IDE都是整合開發環境,非常適合單體式應用,開發,編譯,除錯一站式搞定.

    一個應用包含所有功能,容易測試和部署.執行在一個物理節點,環境單一,執行穩定,故障恢復簡單.

    缺點:

    業務邊界模糊,模組職責不清晰,當系統逐漸變大,程式碼依賴複雜,難以維護.所有人同時在一個工程上開發,容易發生程式碼修改衝突,依賴複雜導致專案協調困難,並且區域性修改影響不可知,需要全覆蓋測試,需要重新部署,難以支援大團隊並行開發.

    當系統很大時,編譯和部署耗時.應用水平擴充套件難,一方面狀態在應用內部管理,無法透明路由;另一方面,不同模組對資源需求差異大,當業務量增大時,一視同仁地為所有模組增加機器導致硬體浪費.

    03.分散式架構

    在分散式應用架構中,應用相互獨立,每個應用程式碼獨立開發,獨立部署,應用通過有限的API介面互相關聯.

    API介面屬於應用一部分,一般和表示層處於同一層次,兩者共享業務邏輯層.

    API和表示層採用同樣的web端技術,通訊協議一般使用HTTP,資料格式是JSON,應用整合方式比較簡化.

    

    優點:

    分散式架構每個應用內部高內聚,獨立開發,測試和部署,支援開發敏捷,

    應用之間鬆耦合,業務邊界清晰,業務依賴明確,支援大專案並行開發,實現業務敏捷.

    缺點:

    在分散式架構中,應用的表示層和API沒有物理分離,需要同時滿足自身業務需求和關聯業務需求,相互影響,比如API介面會隨著外部應用的需求經常變化,這會導致整個應用重新部署.

    執行時,API以HTTP/REST方式通過網路對外提供介面,其通訊可靠性和資料的封裝性相對於程序內呼叫比較差,如果沒有一些可靠的技術機制,如路由保障/失敗重試/監控等,裸奔的API方式將嚴重影響系統整體可用性.

    04.SOA架構

    SOA架構提供配套的服務治理,包括服務註冊,服務路由,服務授權,服務降級,服務監控等等.這些功能通過專門的中介軟體ESB支援.SOA架構在分散式垂直切分,把原來單體應用的業務邏輯層獨立成service,做到物理上的徹底分離.

    

    優點:

    每個service都是濃縮的精華,聚焦某方面核心業務,同時以複用的方式供整個系統共享.

    服務作為獨立的應用,獨立部署,介面清晰,很容易做自動化測試和部署.

    服務是無狀態的,很容易做水平擴充套件;通過容器虛擬化技術,實現故障隔離和資源高效利用,業務量大的時候,加機器即可.

    基於SOA的系統可以根據服務執行情況,靈活調控服務資源,包括服務上下架,服務升降級等,使系統真正具備可運營的能力.

    缺點:

    系統依賴複雜,給開發/測試/部署帶來一系列挑戰.

    端到端的呼叫鏈路長,可靠性降低,依賴網路狀況,服務框架及具體service的質量.

    分散式資料一致性和分散式事務支援困難,一般通過最終一致性簡化解決.

    端到端的測試和排障複雜,SOA對運維提出更高要求.

    

    05.微服務架構

    微服務是把一個大型複雜軟體應用由一個或多個微服務組成.系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的.每個微服務僅關注於完成一件任務並很好地完成該任務.在所有情況下,每個任務代表著一個小的業務能力.

    

    優點:

    很好支撐敏捷開發,小團隊單獨開發,單獨部署.

    微服務易於被一個開發人員理解,修改和維護.

    微服務利於技術重構,允許快速融合最新技術.

    微服務是鬆耦合的,是有功能意義的服務,無論是在開發階段或部署階段都是獨立的.

    微服務能使用不同的語言開發.

    缺點:

    分散式複雜性.

    資料一致性.(各個服務的團隊,資料也是分散式治理,會出現不一致的問題)

    運維複雜性.

    測試複雜性.

    

    06.雲原生架構

    從技術的角度出發,雲原生架構是基於雲原生技術的一組架構原則和設計模式的集合,

    旨在幫助企業和開發人員充分利用雲平臺所提供的平臺化能力和彈性資源能力.

    

    從雲原生架構中,我們可以知曉,將所有的非功能性業務需求,將其轉化為基礎設施層,而不是由研發人員來處理.同時對於運維人員來說,如果以前負責業務運維的同時,還需要基礎架構的運維,此時將非功能性業務下車後,他們只需要負責業務運維就好.

    

    雲原生技術是支撐微服務架構的基礎設施架構.