軟體系統的架構演進以及叢集和分散式

努力--坚持發表於2024-07-11

  一、單體架構:

  將四個模組ABCD放到一個專案中,功能模組不進行拆分,專案整體搭建叢集叫做多機單體架構,專案不搭建叢集叫單機單體架構。


  單體架構的優點:
    簡單:開發部署都很方便,小型專案首選


  單體架構的缺點:

  隨著業務增長,時間推移,數量量越來越大,使用者越來越多,單體架構會存在問題:
    -- 專案啟動慢: ABCDEF 很多專案導致專案啟動慢。
    -- 可靠性差 : D模組出現問題,會影響ABC, D一旦掛了,其他模組也不能用了。

    -- 可伸縮性差:
    -- 擴充套件性和可維護性差:
    -- 效能低:

  二、垂直架構
    概念:某一個領域細分 稱為垂直,像早期淘寶什麼都賣,隨後出現了很多垂直的網站,如京東 唯品會,聚美優品 ,電商方面的垂直。

    垂直架構是指將單體架構中的多個模組拆分為多個獨立的專案。形成多個獨立的單體架構。

    如下圖:專案1 部署ABE,專案2 部署CDE

  (1)垂直結構解決了單體架構 中存在的問題:

    - 專案啟動慢 :專案拆分,啟動2個專案;

    - 可靠性差 : 模組D掛了,AB不受影響;

    - 可伸縮性差:如CD訪問人數多,那麼CD搭建叢集;

    - 擴充套件性和可維護性差:CD 模組新增E,AB不受影響;

    - 效能低

  (2)垂直架構存在的問題: 重複功能太多

    如:公共元件,如使用者管理,假如AB模組是電商訂單專案, 要獲取使用者資訊(E), CD模組是 購物車模組,也要獲取使用者資訊(E),使用者管理模組E,都需要用,都需要寫。


  三、分散式架構


    分散式架構:是指在垂直架構的基礎上,將公共業務模組抽取出來,作為獨立的服務供其他呼叫者消費,以實現服務的共享和重用。底層透過RPC(遠端過程呼叫實現)
    RPC: Remote Procedure Call遠端過程呼叫。有非常多的協議和技術來都實現了RPC的過程。比如: HTTP REST風格,Java RMI規範、WebService SOAP協議Hession等等。

  如下圖:AB,CD 是服務消費者,服務提供者是E。


  (1)分散式架構解決垂直架構存在的問題:
    -- 重複功能太多: 已解決,但是有很多服務提供者,服務交叉呼叫會存在問題。

  (2)分散式架構存在的問題:服務統一管理;
​      -- 服務提供方- 一旦產生變更,所有消費方都需要變更。

  如:網路呼叫的三要素為:協議,IP,埠。如果服務提供者 E的IP發生變化 ,AB和CD需要手動修改呼叫。


  四、面向服務的架構(SOA)

    SOA: (Service- Oriented Architecture,面向服務的架構):是一個元件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,並透過這些服務之間定義良好的介面和契約聯絡起來。

    ESB: (Enterparise Servce Bus):企業服務匯流排,服務中介。主要是提供了一一個服務於服務之間的互動。ESB包含的功能如:負載均衡,流量控制,加密處理,服務的監控,異常處理,監控告急等等。

  如下圖:模組和服務之間透過ESB通訊


  (1)面向服務架構解決了分散式架構存在的問題:(服務之間的呼叫透過ESB管理)
​      --服務提供方- -旦產生變更,所有消費方都需要變更:服務之間不再直接呼叫,而是透過ESB通訊。

  五、微服務架構:
    微服務架構和麵向服務的架構基本是一回事。

    微服務架構是在SOA上做的昇華,微服務架構強調的一個重點是“業務需要徹底的元件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、執行的小應用。這些小應用之間透過服務完成互動和整合。

    微服務架構= 80%的SOA服務架構思想+ 100%的元件化架構思想+ 80%的領域建模思想

  如下圖:ABC三個服務,ABC訪問自己的資料庫,他們相互之間是獨立的,A不能訪問B的資料庫,客戶端透過統一元件-閘道器訪問資料庫。

  特點:

    -- 服務實現元件化,開發者可以自由選擇開發技術,也不需要協調其他團隊;
    -- 服務之間互動一般使用REST API
    -- 去中心化,每個微服務有自己私有的資料庫持久化業務資料
    -- 自動化部署:把應用拆分成為一個一個獨立的單個服務,方便自動化部署、測試、運維

  六、叢集和分散式


    在一般專案中,叢集和分散式並不是分開的,叢集和分散式是並存的。

    叢集:一個業務模組,部署在多臺伺服器上。通俗解釋就是:很多“人”一起,幹一樣的事。

      如:部署三個單體專案, 透過Nginx 實現負載均衡,請求轉發。

    分散式:一個大的業務系統,拆分成小的業務模組,分別部署在不同的機器上。通俗解釋就是:很多"人”一起,幹不一樣的事。這些不一樣的事, 合起來是一件大事。

相關文章