文章目錄
- RPC 和 HTTP 有哪些區別?通信協議、網路模型、服務治理框架...
- 不可對比性
- RPC
- HTTP
- 其他通信協議
- 通信協議實質
- Q&A
- 附錄
RPC 和 HTTP 有哪些區別?通信協議、網路模型、服務治理框架…
之前有小朋友問 RPC 請求和 HTTP 請求有什么區別?
公司里服務之間使用 RPC 、對外服務的介面用 HTTP、跨語言服務互動的時候用基于 HTTP 的 RPC …
很多場景使用不同的方式,這里總的來簡單梳理一下,更深一點的等時間充裕了再碼文!
不可對比性
RPC 和 HTTP 從本質上根本沒有可比性,
- HTTP 超文本傳輸協議,是因特網上應用最為廣泛的一種網路傳輸協議,
- RPC 服務行程通信方式中同步程序呼叫的一種實作方式統稱,
RPC
在應用服務中,為了提高可用性、保障應用價值快速持續的交付,往往會把應用拆分為多個服務,多個服務協同對外提供業務功能支撐,
服務之間相互通信方式統稱為 IPC [inter-process communication],IPC 有兩種實作方式,分別是 同步程序呼叫、異步訊息呼叫,在同步程序呼叫的具體實作中,有一種實作方式為 RPC 通信方式,遠程程序呼叫[Remote Procedure Call],RPC 這種方式,可以讓兩個不同服務的子行程進行互動,就像是呼叫本地方法一樣,
RPC 互動一般為應用內部服務通信,通信雙方資訊了解,可根據服務業務場景自定義通信協議,目前業界的 RPC 互動框架都分別支持各自定義的協議型別及資料格式,
如,阿里的 Dubbo 框架 支持 thrift、webservice、hessian、dubbo…;百度的 Ral 框架 支持 msgpack、ral、ral2、http…;京東的 JSF 框架 支持 jsf…;微博的 Motan 框架支持 motan、motan2、http…
注意,這里的通信協議中包含了 HTTP 協議,
HTTP
在應用服務對外互動時,通常都是以 HTTP 協議開頭,就像我們日常訪問的網頁、APP、瀏覽器…等都是通過 URI 定位資源路徑;
在 云原生應用架構中,提倡使用 已發布和版本化的API通信,這些API通常是具有 JSON 序列化的 HTTP REST 風格;……
歸結出來,HTTP 更具有通用性,更靈活,其屏蔽了底層服務技術實作,而且 REST 風格開發成本低…
其他通信協議
有了 HTTP 協議,為什么還有其他協議呢?像 msgpack、dubbo…
因為 HTTP 臃腫,效率并非最優,
在網路模型中,RPC 你可以理解為 會話層機制,而 HTTP 則屬于最上層應用層,通過 三次握手、四次揮手建立連接;協議約束從網路層,每層都會對資料流增加 Header 資訊;在傳輸層會對資料流補充系列校驗等資訊……
在一些服務內部場景中,HTTP 顯得很臃腫,在資源占用、傳輸效率、資料有效率…等方面略輸一籌;故各個團隊根據不同的使用場景,開發設計自定義的通信協議,使服務通信效率更高、更快,各種通信協議就誕生了,
通信協議實質
在業界的各種服務治理 RPC 框架中,除了協議本身資料段的約束不同,其內在更代表了不同的通信方式:長短連接、連接個數、序列化方式…
| 協議名稱 | 序列化 | 連接 | 使用場景 |
|---|---|---|---|
| dubbo | Hessian 二進制序列化 | 單連接;長連接;TCP;NIO異步傳輸 | 傳入傳出引數資料包較小(建議小于100K),消費者比提供者個數多,單一消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大檔案或超大字串, |
| rmi | Java標準二進制序列化 | 多連接;短連接;TCP;同步傳輸 | 傳入傳出引數資料包大小混合,消費者與提供者個數差不多,可傳檔案, |
| … | … | … | … |
Q&A
1、如何設計一款 RPC 框架呢?
RPC\HTTP 還有很多帶挖掘的點,感興趣的可私信或關注后續博文
附錄
忙碌和早起
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337653.html
標籤:其他
上一篇:阿里P8面試官:如何設計一個扛住千萬級并發的架構(超級詳細)
下一篇:tomcat部署與優化
