1. 程式人生 > >[轉]系統架構演變--集中式架構-垂直拆分-分散式服務-SOA(服務治理)-微服務

[轉]系統架構演變--集中式架構-垂直拆分-分散式服務-SOA(服務治理)-微服務

一.系統架構演變

1.1. 集中式架構

當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的資料訪問框架(ORM)是影響專案開發的關鍵。


存在的問題:

程式碼耦合,開發維護困難
無法針對不同模組進行鍼對性優化
無法水平擴充套件
單點容錯率低,併發能力差
1.2.垂直拆分

當訪問量逐漸增大,單一應用無法滿足需求,此時為了應對更高的併發和業務需求,我們根據業務功能對系統進行拆分:


優點:

系統拆分實現了流量分擔,解決了併發問題
可以針對不同模組進行優化
方便水平擴充套件,負載均衡,容錯率提高
系統間相互獨立
缺點:

服務之間相互呼叫,如果某個服務的埠或者ip地址發生改變,呼叫的系統得手動改變
搭建叢集之後,實現負載均衡比較複雜
1.3.分散式服務

當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的分散式呼叫是關鍵。

 

優點:

將基礎服務進行了抽取,系統間相互呼叫,提高了程式碼複用和開發效率
缺點:

系統間耦合度變高,呼叫關係錯綜複雜,難以維護
搭建叢集之後,負載均衡比較難實現
1.4.服務治理(SOA)

當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。此時,用於提高機器利用率的資源排程和治理中心(SOA)是關鍵


阿里巴巴內部目前使用的框架:HSF(好舒服),是dubbo的升級版

以前出現了什麼問題?

服務越來越多,需要管理每個服務的地址
呼叫關係錯綜複雜,難以理清依賴關係
服務過多,服務狀態難以管理,無法根據服務情況動態管理
服務治理要做什麼?

服務註冊中心,實現服務自動註冊和發現,無需人為記錄服務地址
服務自動訂閱,服務列表自動推送,服務呼叫透明化,無需關心依賴關係
動態監控服務狀態監控報告,人為控制服務狀態
缺點:

服務間會有依賴關係,一旦某個環節出錯會影響較大
服務關係複雜,運維、測試部署困難,不符合DevOps思想
1.5.微服務

OOP:面向物件

AOP:面向切面

SOA:面向服務

前面說的SOA,英文翻譯過來是面向服務的程式設計。微服務,似乎也是服務,都是對系統進行拆分。因此兩者非常容易混淆,但其實卻有一些差別:

 

微服務的特點:

單一職責:微服務中每一個服務都對應唯一的業務能力,做到單一職責
微:微服務的服務拆分粒度很小,例如一個使用者管理就可以作為一個服務。每個服務雖小,但“五臟俱全”。
面向服務:面向服務是說每個服務都要對外暴露服務介面API。並不關心服務的技術實現,做到與平臺和語言無關,也不限定用什麼技術實現,只要提供Rest的介面即可。
自治:自治是說服務間互相獨立,互不干擾
團隊獨立:每個服務都是一個獨立的開發團隊,人數不能過多。
技術獨立:因為是面向服務,提供Rest介面,使用什麼技術沒有別人干涉
前後端分離:採用前後端分離開發,提供統一Rest介面,後端不用再為PC、移動端開發不同介面
資料庫分離:每個服務都使用自己的資料來源
部署獨立,服務間雖然有呼叫,但要做到服務重啟不影響其它服務。有利於持續整合和持續交付。每個服務都是獨立的元件,可複用,可替換,降低耦合,易維護 Docker部署服務
缺點

開發人員要處理分散式系統的複雜性
部署複雜
多服務運維難度 隨著服務的增加 運維的壓力也在增大
微服務結構圖:


參考文獻:
1、原文:系統架構演變--集中式架構-垂直拆分-分散式服務-SOA(服務治理)-微服務

2、軟體架構的演進,瞭解單體架構,垂直架構,SOA架構和微服務架構的變化歷程

3、分散式架構的演進過程(詳細版)