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