RPC(Remote Procedure Call)—遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。好比兩個不一樣的服務 A、B 部署在兩臺不一樣的機器上,那麼服務 A 若是想要調用服務 B 中的某個方法該怎麼辦呢?使用 HTTP請求 固然能夠,可是可能會比較慢並且一些優化作的並很差。 RPC 的出現就是爲了解決這個問題。html
我這裏這是簡單的提一下,詳細內容能夠查看下面這篇文章:後端
http://www.importnew.com/22003.html瀏覽器
下面再貼一個網上的時序圖:服務器
從上面對 RPC 介紹的內容中,歸納來說RPC 主要解決了:讓分佈式或者微服務系統中不一樣服務之間的調用像本地調用同樣簡單。網絡
RPC 只是一種概念、一種設計,就是爲了解決 不一樣服務之間的調用問題, 它通常會包含有 傳輸協議 和 序列化協議 這兩個。架構
可是,HTTP 是一種協議,RPC框架可使用 HTTP協議做爲傳輸協議或者直接使用TCP做爲傳輸協議,使用不一樣的協議通常也是爲了適應不一樣的場景。併發
可能如今不少對計算機網絡不太熟悉的朋友已經被搞蒙了,要想真正搞懂,還須要來簡單複習一下計算機網絡基礎知識:app
咱們一般談計算機網絡的五層協議的體系結構是指:應用層、傳輸層、網絡層、數據鏈路層、物理層。應用層(application-layer)的任務是經過應用進程間的交互來完成特定網絡應用。HTTP 屬於應用層協議,它會基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過 URL 向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。HTTP協議創建在 TCP 協議之上。負載均衡
運輸層(transport layer)的主要任務就是負責向兩臺主機進程之間的通訊提供通用的數據傳輸服務。TCP是傳輸層協議,主要解決數據如何在網絡中傳輸。相比於UDP,TCP 提供的是面向鏈接的,可靠的數據傳輸服務。框架
成熟的 RPC框架還提供好了「服務自動註冊與發現」、"智能負載均衡"、「可視化的服務治理和運維」、「運行期流量調度」等等功能,這些也算是選擇 RPC 進行服務註冊和發現的一方面緣由吧!
相關閱讀:
不少文章中還會提到說 HTTP 協議相較於自定義 TCP 報文協議,增長的開銷在於鏈接的創建與斷開,可是這個觀點已經被否定,下面截取自知乎中一個回答,原回答地址:既然有 HTTP 請求,爲何還要用 RPC 調用?
首先要否定一點 HTTP 協議相較於自定義 TCP 報文協議,增長的開銷在於鏈接的創建與斷開。HTTP 協議是支持鏈接池複用的,也就是創建必定數量的鏈接不斷開,並不會頻繁的建立和銷燬鏈接。二一要說的是 HTTP 也可使用 Protobuf 這種二進制編碼協議對內容進行編碼,所以兩者最大的區別仍是在傳輸協議上。