李狗蛋和二狗子因为HTTP or RPC打起来了No.135
[╮(╯_╰)╭一個小故事]
從前有兩個程序員,一個叫李狗蛋一個叫二狗子,正在啟動一個 web 項目。李狗蛋說我們系統(tǒng)交互就用HTTP聽我的準(zhǔn)沒錯。二狗子說,為什么我們不用RPC呢聽我的準(zhǔn)沒錯?李狗蛋說憑什么要聽你?二狗子說那憑什么要聽你的?李狗蛋說老子說用HTTP就用HTTP老子天下第一。二狗子臉無表情說了一聲,滾。
風(fēng)。
風(fēng)吹。
空調(diào)風(fēng)吹。
冷冽的空調(diào)風(fēng)擋不住他們之間對于技術(shù)的熱情,他們。。。打起來了。
看他們打架其實我挺....挺飽的,畢竟搬了板凳吃了很多西瓜,有點撐。但他們好像吵架的前提都沒整明白,HTTP跟RPC的區(qū)別都沒整清楚。希望你們不要因為這玩意吵架了,阿彌陀佛,畢竟太多人肚子撐不好。
[╮(╯_╰)╭HTTP和RPC的區(qū)別]
HTTP,Hypertext Transfer Protocol,超文本傳輸協(xié)議,是一款網(wǎng)絡(luò)傳輸協(xié)議。
RPC,Remote Procedure Call,遠程方法調(diào)用,是一款服務(wù)調(diào)用方案。
一個是協(xié)議一個是方案,這兩者沒什么必然的關(guān)系,所以也沒什么可以比較的。
為什么會有人拿他們來比較呢?
是因為,現(xiàn)在有著 SpringCloud為首的HTTP restful 風(fēng)格的調(diào)用模式,也有著grpc等這類私有協(xié)議的調(diào)用方式。所以自然而然,會有很多人從這個層次上認為,他們是同一類東西,其實并非如此。
二者本質(zhì)都是希望得到服務(wù),而被創(chuàng)造出來的技術(shù)。
[╮(╯_╰)╭HTTP究竟是什么]
HTTP 全名叫超文本傳輸協(xié)議,是在互聯(lián)網(wǎng)中用來傳輸大量信息(比如文本、聲音、視頻等)的一個協(xié)議,這個模式是C/S 模式,也就是客戶端(一般是瀏覽器)用HTTP發(fā)起請求,服務(wù)端接收到請求后同樣用HTTP響應(yīng)請求。HTTP是不是互聯(lián)網(wǎng)本身呢?明顯不是。互聯(lián)網(wǎng)始于1969年美國的阿帕網(wǎng),而HTTP1.0在1996年才開始使用,也是在這一年,以瀏覽器技術(shù)為基礎(chǔ)的我們認知的互聯(lián)網(wǎng),開始蓬勃發(fā)展。一圖勝百言,我就不多介紹了。
HTTP請求交互:
一次 HTTP 請求
客戶端:你準(zhǔn)備好我要發(fā)送了啊。
服務(wù)端:好吧你發(fā)送吧。
客戶端:你真的準(zhǔn)備好我真的要發(fā)送了啊。
客戶端:發(fā)送請求。
服務(wù)端:響應(yīng)請求。
客戶端:你準(zhǔn)備好我要關(guān)閉了啊。
服務(wù)端:好吧你關(guān)閉吧。
服務(wù)端:我關(guān)閉連接了。
客戶端:好的我知道你關(guān)閉了。
[╮(╯_╰)╭RPC究竟是什么]
RPC 全名叫 遠程過程調(diào)用,是指在調(diào)用遠程服務(wù)的時候,用本地調(diào)用的方式,本地的處理器屏蔽了所有的網(wǎng)絡(luò)、異常、重試等細節(jié),服務(wù)調(diào)用方只關(guān)注輸入值和返回的服務(wù),相當(dāng)于一個代理。之前講過一次了,不多說了。企業(yè)神奇中間件-RPC(總覽) No.97
[╮(╯_╰)╭HTTP和RPC開始PK了]
Round1
用 HTTP 可以實現(xiàn) RPC 嗎? 能。不僅僅HTTP可以實現(xiàn)RPC,任何網(wǎng)絡(luò)協(xié)議都可以用來實現(xiàn)RPC,只要兩臺機器之間網(wǎng)絡(luò)是通的,用什么協(xié)議都無所謂。
用 RPC 可以實現(xiàn) HTTP 嗎? 不能。HTTP 是有國際標(biāo)準(zhǔn)滴。
Round2
HTTP可以拋棄 TCP/IP 嗎?暫時不能。現(xiàn)在HTTP/1.1 甚至 HTTP/2.0 暫時都還是基于 TCP/IP 協(xié)議的,HTTP/3.0 有一點點可能可以解除TCP依賴。
RPC可以拋棄 TCP/IP 嗎?能。還是之前的結(jié)論,只要網(wǎng)絡(luò)是通的,什么TCP、UDP、甚至小眾的網(wǎng)絡(luò)協(xié)議都可以支持RPC的實現(xiàn)。
Round3
HTTP可以跨平臺跨語言嗎?天然支持。畢竟拿到就用嘛,都是文本。
RPC可以跨平臺跨語言嗎?需要一定的努力,一些私有協(xié)議會把自己的序列化和反序列化給定制化了,只能自己解析自己,比如Java 的RMI。
Round4
我能自己實現(xiàn)一個HTTP嗎?想得有點多。國際標(biāo)準(zhǔn)來的。
我能自己實現(xiàn)一個 RPC 嗎?小伙子有前途,可以的,寫一個唄。
https://github.com/CallMeDJ/BigBanana-rpc.git
Round5
HTTP快嗎?快,但是有一些頭在企業(yè)應(yīng)用沒啥用。
RPC快嗎?快,基于私有協(xié)議可以把網(wǎng)絡(luò)傳輸冗余數(shù)據(jù)降到最低。
看這個厚重的頭..
[╮(╯_╰)╭小結(jié)]
如果你只能記住一句話,那就記住這句吧。
HTTP是網(wǎng)絡(luò)協(xié)議,跨平臺跨語言,結(jié)合restful開發(fā)應(yīng)用協(xié)作,開發(fā)很高效,但是協(xié)議頭很重。RPC是調(diào)用方案,一般都會有私有協(xié)議,沒什么多余信息,運行很高效,但大多數(shù)rpc的遷移性并不是很好。
HTTP就是英語,能處理非常多非常廣泛的場景。RPC 就是方言,效率可能比英語高多了,但是可能有人聽不懂。
[╮(╯_╰)╭后話]
關(guān)于 HTTP 和 RPC 這個話題是在大蕉的朋友們這個群里拋出來的問題,我覺得很有價值也很好玩,因為很多人的認知里,RPC就是比HTTP快。說實話,現(xiàn)在 gRPC 確實比 HTTP/1.1 要更快更有效率,所以大家才會覺得 RPC 就是比HTTP 快。但其實一些實現(xiàn)很糟糕的RPC未必比HTTP快比如大蕉自己實現(xiàn)的RPC。反過來說,RPC也可以基于HTTP搭建,把 HTTP 作為基礎(chǔ)網(wǎng)絡(luò)層。所以這兩個東西并不是非此即彼的敵對關(guān)系,而是分工合作甚至相互協(xié)作的關(guān)系。
催更的小伙可以轉(zhuǎn)發(fā)給我個好看了喂!!不然我就,我就生氣。
總結(jié)
以上是生活随笔為你收集整理的李狗蛋和二狗子因为HTTP or RPC打起来了No.135的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Monkey测试入门:安
- 下一篇: hive创建角色并赋权