為什么有了HTTP,還需要RPC協議呢?在進行說明之前,首先我們需要了解什么是HTTP協議,什么是RPC協議。
01什么是HTTP協議?
HTTP是一種廣泛使用的網絡傳輸協議,它定義了客戶端(如瀏覽器, 手機用戶APP等)和服務器(網站等提供服務的,服務端)之間的通信格式和通信方法,它是基于請求—響應這樣一種通信模型,即服務端根據請求返回一個響應,在請求和響應中,都包含了兩端(客戶端和服務端)之間進行交互的一些信息,如方法、頭部、正文等。
圖1 HTTP交互基本流程圖
HTTP具有很多優點,它支持多種數據格式和編碼方式,可以實現跨平臺和跨語言的通信,通信簡單、靈活、易于擴展。但是同時它也有一些缺點:
(1)HTTP是無狀態的,每次請求都需要重新建立連接,這會增加網絡開銷和延遲。
(2)數據傳輸是基于文本的,這會導致數據量較大,解析效率較低。
(3)安全性較差,因此容易受到中間人攻擊、重放攻擊等。
(4)語義較弱,HTTP只能表達基本的增刪改查操作,不能滿足復雜的業務邏輯。
02什么是RPC協議?
RPC即Remote Procedure Call(遠程程序調用),它是一種遠程過程調用協議,它允許客戶端像調用本地函數一樣調用遠程服務器上的函數。
圖2 RPC協議交互流程
RPC的優點是高效、強大、易于使用,但是它也有一些缺點,比如:
(1)與HTTP相反,RPC是有狀態的,需要維護客戶端和服務器之間的連接狀態,這會增加系統的復雜度和資源消耗。
(2)RPC的數據傳輸是基于二進制的,這會導致數據不易閱讀和調試。
(3)RPC的兼容性較差,不同的RPC框架之間可能存在協議和接口的不一致性。
(4)RPC的可擴展性較差,難以支持動態服務發現和負載均衡等功能。
03二者的選擇使用
基于TCP建立的HTTP和各類RPC協議,只是定義了不同消息格式的應用層協議。HTTP協議是超文本傳輸協議,而RPC本身并不是一個具體的協議,而是一種調用方式。
雖然HTTP現在叫超文本協議,支持音頻視頻,但HTTP設計初主要是用做展示網頁文本,所以它傳輸的內容以字符串為主,內容存在非常多的冗余。而RPC協議定制化程度更高,可以采用體積更小的protobuf或其他序列化協議去保存結構體數據,同時也不需要像HTTP那樣考慮各種瀏覽器行為,性能更好。因此在公司內部微服務中拋棄HTTP,轉而使用RPC協議。雖然后來HTTP得到了很大的改進,但由于很多公司內部已經用了多年的RPC協議,基于歷史原因,一般沒有選擇更換成HTTP。
在實際運用中,不論是HTTP還是RPC,它們都有各自的優缺點,沒有絕對的好壞之分。針對不同的使用場景選擇合適的協議。比如:
(1)在微服務架構中,服務之間需要頻繁地進行內部調用,RPC可以提供更高的性能和可靠性。
(2)在分布式計算中,需要將大量的計算任務分發到不同的節點上執行,RPC可以實現更靈活的負載均衡和容錯機制。
(3)而在實時通信中,需要實現低延遲和高并發的數據交換,RPC可以支持多種傳輸協議和通信模式。
而假如你需要實現跨平臺和跨語言的通信,或者需要支持多種數據格式和編碼方式,或者需要利用現有的HTTP基礎設施和工具,可以選擇HTTP協議。
當然這樣不是絕對固定的組合,也可以結合兩個協議來實現更好的網絡,例如:
(1)我們可以在HTTP協議上封裝RPC協議,使得RPC請求可以通過HTTP代理或者網關來轉發和處理。
(2)可以在RPC協議上使用HTTP協議作為傳輸層,使得RPC請求可以利用HTTP的特性來實現緩存、壓縮、加密等功能。
所以總的來說,RPC的出現是為了應對HTTP協議滿足不了的對性能有所要求的網絡場景。它們并不是互斥的,而是可以根據不同的場景和需求進行選擇和組合的。
審核編輯:湯梓紅
-
接口
+關注
關注
33文章
7859瀏覽量
149007 -
服務器
+關注
關注
12文章
8271瀏覽量
83062 -
HTTP
+關注
關注
0文章
467瀏覽量
30405 -
TCP
+關注
關注
8文章
1282瀏覽量
78445 -
RPC
+關注
關注
0文章
102瀏覽量
11445
原文標題:為什么有了HTTP,還需要RPC協議?
文章出處:【微信號:cdebyte,微信公眾號:億佰特物聯網應用專家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論