既有 HTTP ,为啥用 RPC 进行服务调用?
RPC 只是一種設(shè)計而已
????????RPC 只是一種概念、一種設(shè)計,就是為了解決 不同服務(wù)之間的調(diào)用問題, 它一般會包含有 傳輸協(xié)議 和 序列化協(xié)議 這兩個。
????????但是,HTTP 是一種協(xié)議,RPC框架可以使用 HTTP協(xié)議作為傳輸協(xié)議或者直接使用TCP作為傳輸協(xié)議,使用不同的協(xié)議一般也是為了適應(yīng)不同的場景。
HTTP 和 TCP
可能現(xiàn)在很多對計算機網(wǎng)絡(luò)不太熟悉的朋友已經(jīng)被搞蒙了,要想真正搞懂,還需要來簡單復(fù)習(xí)一下計算機網(wǎng)絡(luò)基礎(chǔ)知識:
我們通常談計算機網(wǎng)絡(luò)的五層協(xié)議的體系結(jié)構(gòu)是指:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。
應(yīng)用層(application-layer)的任務(wù)是通過應(yīng)用進程間的交互來完成特定網(wǎng)絡(luò)應(yīng)用。HTTP 屬于應(yīng)用層協(xié)議,它會基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過 URL 向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求。Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。HTTP協(xié)議建立在 TCP 協(xié)議之上。
運輸層(transport layer)的主要任務(wù)就是負責(zé)向兩臺主機進程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù)。TCP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸。相比于UDP,TCP 提供的是面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)。
RPC框架功能更齊全
成熟的 RPC框架還提供好了“服務(wù)自動注冊與發(fā)現(xiàn)”、"智能負載均衡"、“可視化的服務(wù)治理和運維”、“運行期流量調(diào)度”等等功能,這些也算是選擇 RPC 進行服務(wù)注冊和發(fā)現(xiàn)的一方面原因吧!
相關(guān)閱讀:
-
http://www.ruanyifeng.com/blog/2016/08/http.html (HTTP 協(xié)議入門- 阮一峰)
一個常見的錯誤觀點
很多文章中還會提到說 HTTP 協(xié)議相較于自定義 TCP 報文協(xié)議,增加的開銷在于連接的建立與斷開,但是這個觀點已經(jīng)被否認,下面截取自知乎中一個回答,原回答地址:https://www.zhihu.com/question/41609070/answer/191965937。
????????首先要否認一點 HTTP 協(xié)議相較于自定義 TCP 報文協(xié)議,增加的開銷在于連接的建立與斷開。HTTP 協(xié)議是支持連接池復(fù)用的,也就是建立一定數(shù)量的連接不斷開,并不會頻繁的創(chuàng)建和銷毀連接。二一要說的是 HTTP 也可以使用 Protobuf 這種二進制編碼協(xié)議對內(nèi)容進行編碼,因此二者最大的區(qū)別還是在傳輸協(xié)議上。
總結(jié)
以上是生活随笔為你收集整理的既有 HTTP ,为啥用 RPC 进行服务调用?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9008线刷_小米红米手机新机9008模
- 下一篇: 什么叫做罗列式_极简罗列法怎么写作文