天天看點

Restful、SOAP、RPC、SOA、微服務之間的差別什麼是Restful什麼是SOAPRPC什麼是SOA微服務和SOA的差別

Restful、SOAP、RPC、SOA、微服務之間的差別

  • 什麼是Restful
  • 什麼是SOAP
  • RPC
    • 5種典型RPC遠端調用架構
  • 什麼是SOA
  • 微服務和SOA的差別

什麼是Restful

Restful是一種架構設計風格,提供了設計原則和限制條件,而不是架構,而滿足這些限制條件和原則的應用程式或設計就是 Restful架構或服務。

主要的設計原則:

  • 資源與URI
  • 統一資源接口(HTTP方法如GET,PUT和POST)
  • 資源的表述
  • 資源的連結
  • 狀态的轉移

    總之,RESTful的核心就是後端将資源釋出為URI,前端通過URI通路資源,并通過HTTP動詞表示要對資源進行的操作

什麼是SOAP

簡單對象通路協定是一種資料交換協定規範,是一種輕量的、簡單的、基于XML的協定的規範。SOAP協定和HTTP協定一樣,都是底層的通信協定,隻是請求包的格式不同而已,SOAP包是XML格式的。

SOAP的消息是基于xml并封裝成了符合http協定,是以,它符合任何路由器、 防火牆或代理伺服器的要求。SOAP可以使用任何語言來完成,隻要發送正确的soap請求即可,基于soap的服務可以在任何平台無需修改即可正常使用。

RPC

RPC就是從一台機器(用戶端)上通過參數傳遞的方式調用另一台機器(伺服器)上的一個函數或方法(可以統稱為服務)并得到傳回的結果。

  • RPC 會隐藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊)
  • RPC 是一個請求響應模型。用戶端發起請求,伺服器傳回響應(類似于Http的工作方式)
  • RPC 在使用形式上像調用本地函數(或方法)一樣去調用遠端的函數(或方法)。

5種典型RPC遠端調用架構

  1. RMI實作,利用java.rmi包實作,基于Java遠端方法協定(Java Remote Method Protocol)和java的原生序列化。
  2. Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基于HTTP協定,采用二進制編解碼。
  3. thrift是一種可伸縮的跨語言服務的軟體架構。thrift允許你定義一個描述檔案,描述資料類型和服務接口。依據該檔案,編譯器友善地生成RPC用戶端和伺服器通信代碼。
  4. dubbo,阿裡的RPC架構。
  5. 還有SpringCloud架構,微服務全家桶。為開發人員提供了快速建構分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。

    微服務在本質上,就是rpc。rpc有基于tcp的,http的,mq的等等。spring cloud是基于spring boot的,spring boot 實作的是http協定的rpc,算是rpc的一個子集。

什麼是SOA

SOA(Service-Oriented Architecture),中文全稱:面向服務的架構。

通俗點來講,SOA提倡将不同應用程式的業務功能封裝成“服務”并宿主起來,通常以接口和契約的形式暴露并提供給外界應用通路(通過交換消息),達到不同系統可重用的目的。

SOA是一個元件模型,它能将不同的服務通過定義良好的接口和契約聯系起來。服務是SOA的基石。

微服務和SOA的差別

微服務是SOA架構演進的結果。兩者說到底都是對外提供接口的一種架構設計方式,随着網際網路的發展,複雜的平台、業務的出現,導緻SOA架構向更細粒度、更通用化程度發展,就成了所謂的微服務了。

總之,微服務是SOA發展出來的産物,它是一種比較現代化的細粒度的SOA實作方式。

SOA與微服務的差別在于如下幾個方面:

  • 微服務相比于SOA更加精細,微服務更多的以獨立的程序的方式存在,互相之間并無影響;
  • 微服務提供的接口方式更加通用化,例如HTTP RESTful方式,各種終端都可以調用,無關語言、平台限制;
  • 微服務更傾向于分布式去中心化的部署方式,在網際網路業務場景下更适合。

    為什麼要使用微服務?

    技術為業務而生,架構也為業務而出現,當然SOA和微服務也是因為業務的發展而出現。出現SOA和微服務架構與業務的發展、平台的壯大密不可分,下面借用dubbo的網站架構發展圖和說明:

    Restful、SOAP、RPC、SOA、微服務之間的差別什麼是Restful什麼是SOAPRPC什麼是SOA微服務和SOA的差別
  • 單一應用架構

    當網站流量很小時,隻需一個應用,将所有功能都部署在一起,以減少部署節點和成本。此時,用于簡化增删改查工作量的資料通路架構(ORM) 是關鍵。

  • 垂直應用架構

    當通路量逐漸增大,單一應用增加機器帶來的加速度越來越小,将應用拆成互不相幹的幾個應用,以提升效率。此時,用于加速前端頁面開發的 Web架構(MVC) 是關鍵。

  • 分布式服務架構

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

  • 流動計算架構

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

    平台随着業務的發展從 All in One 環境就可以滿足業務需求(以Java來說,可能隻是一兩個war包就解決了)。

    發展到需要拆分多個應用,并且采用MVC的方式分離前後端,加快開發效率;在發展到服務越來越多,不得不将一些核心或共用的服務拆分出來,其實發展到此階段,如果服務拆分的足夠精細,并且獨立運作,我覺得就可以将之了解為一個微服務了。

繼續閱讀