天天看點

系統架構演變和遠端調用

文章目錄

    • 1. 系統架構演變
      • 1.1 集中式架構
      • 1.2 垂直拆分
      • 1.3 分布式服務
      • 1.4服務治理(SOA)
      • 1.5 微服務
    • 2. 遠端調用方式
      • 2.1 RPC
      • 2.2 HTTP

1. 系統架構演變

随着網際網路的發展,網站應用的規模不斷擴大,需求的激增,随之而來的是技術上的壓力。系統架構也是以不斷的演進、更新、疊代。從單一應用,到垂直拆分,到分布式服務,到SOA,以及現在火熱的微服務架構。

1.1 集中式架構

當網站流量很小時,隻需要一個應用,将所有的功能都部署在一起,以減少部署節點和成本。

系統架構演變和遠端調用

優點:

  • 系統開發速度快
  • 維護成本低
  • 适用于并發要求較低的系統

缺點:

  • 代碼耦合度高,後期維護困難
  • 無法針對不同子產品進行優化
  • 無法水準擴充
  • 單點容錯率低,并發能力差

1.2 垂直拆分

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

系統架構演變和遠端調用

優點:

  • 系統拆分實作了流量分擔,解決了并發問題
  • 可以針對不同子產品進行優化
  • 友善水準擴充,負載均衡,容錯率提高

缺點:

  • 系統間互相獨立,會有很多重複開發工作,影響開發效率

1.3 分布式服務

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

系統架構演變和遠端調用

優點:

  • 将基礎服務進行了抽取,系統間互相調用,提高了代碼複用和開發效率

缺點:

  • 系統間耦合度變高,調用關系錯綜複雜,難以維護

1.4服務治理(SOA)

SOA(Service Oriented Architecture)面向服務的架構:它是一種設計方法,其中包含多個服務, 服務之間通過互相依賴最終提供一系列的功能。一個服務通常以獨立的形式存在于作業系統程序中。各個服務之間通過網絡調

用。

系統架構演變和遠端調用

SOA缺點:每個供應商提供的ESB産品有偏差,自身實作較為複雜;應用服務粒度較大,ESB內建整合所有服務和協定、資料轉換使得運維、測試部署困難。所有服務都通過一個通路通信,直接降低了通信速度。

1.5 微服務

微服務架構是使用一套小服務來開發單個應用的方式或途徑,每個服務基于單一業務能力建構,運作在自己的程序中,并使用輕量級機制通信,通常是HTTP API,并能夠通過自動化部署機制來獨立部署。這些服務可以使用不同的程式設計語言實作,以及不同資料存儲技術,并保持最低限度的集中式管理。 微服務結構圖 :

系統架構演變和遠端調用
API Gateway網關是一個伺服器,是系統的唯一入口。網關提供RESTful/HTTP的方式通路服務。而服務端通過服務注冊中心進行服務注冊和管理。

微服務的特點:

  • 單一職責:微服務中每一個服務都對應唯一的業務能力,做到單一職責
  • 面向服務:面向服務是說每個服務都要對外暴露服務接口API。并不關心服務的技術實作,做到與平台和語言無關,也不限定用什麼技術實作,隻要提供REST的接口即可。
  • 自治:自治是說服務間互相獨立,互不幹擾
    • 團隊獨立:每個服務都是一個獨立的開發團隊。
    • 技術獨立:因為是面向服務,提供REST接口,使用什麼技術沒有别人幹涉
    • 前後端分離:采用前後端分離開發,提供統一的REST接口,後端不用再為PC、移動端開發不同接口
    • 資料庫分離:每個服務都使用自己的資料源

微服務和SOA比較:

功能 SOA 微服務
元件大小 大塊業務邏輯 單獨任務或小塊業務邏輯
耦合 通常松耦合 總是松耦合
管理 着重中央管理 着重分散管理
目标 確定應用能夠互動操作 易維護、易擴充、更輕量級的互動

2. 遠端調用方式

無論是微服務還是SOA,都面臨着服務間的遠端調用。那麼服務間的遠端調用方式有哪些呢?

常見的遠端調用方式有以下幾種:

  • RPC

    :Remote Procedure Call遠端過程調用,類似的還有RMI。自定義資料格式,基于原生TCP通信,速度

    快,效率高。早期的Web Service,現在熱門的Dubbo,都是RPC的典型。

  • HTTP

    :HTTP其實是一種網絡傳輸協定,基于TCP,規定了資料傳輸的格式。現在用戶端浏覽器與服務端通信基本都是采用HTTP協定。也可以用來進行遠端服務調用。缺點是消息封裝臃腫。現在熱門的REST風格,就可以通過HTTP協定來實作。

2.1 RPC

RPC,即 Remote Procedure Call(遠端過程調用),是一個計算機通信協定。 該協定允許運作于一台計算機的程式調用另一台計算機的子程式,而程式員無需額外地為這個互動作用程式設計。說得通俗一點就是:A計算機提供一個服務,B計算機可以像調用本地服務那樣調用A計算機的服務。

RPC調用流程圖:

系統架構演變和遠端調用

2.2 HTTP

HTTP其實是一種網絡傳輸協定,基于TCP,工作在應用層,規定了資料傳輸的格式。現在用戶端浏覽器與服務端通信基本都是采用HTTP協定,也可以用來進行遠端服務調用。缺點是消息封裝臃腫,優勢是對服務的提供和調用方沒有任何技術限定,自由靈活,更符合微服務理念。現在熱門的REST風格,就可以通過HTTP協定來實作。

系統架構演變和遠端調用

RPC的機制是根據語言的API(language API)來定義的,而不是根據基于網絡的應用來定義的。如果你們公司全部采用Java技術棧,那麼使用Dubbo作為微服務架構是一個不錯的選擇。

相反,如果公司的技術棧多樣化,而且你更青睐Spring家族,那麼Spring Cloud搭建微服務是不二之選。會選擇Spring Cloud套件,是以會使用HTTP方式來實作服務間調用。

⏮ 上一節:SpringCloud系列目錄 ⏭下一節:SpringCloud微服務簡單案例