文章目錄
-
- 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其實是一種網絡傳輸協定,基于TCP,規定了資料傳輸的格式。現在用戶端浏覽器與服務端通信基本都是采用HTTP協定。也可以用來進行遠端服務調用。缺點是消息封裝臃腫。現在熱門的REST風格,就可以通過HTTP協定來實作。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微服務簡單案例