HTTP,TCP, socket,RPC 與gRPC都是啥?

TCP/HTTP與socket

首先回顧下計算機網絡的五(七)層協議:物理層、數據鏈路層、網絡層、傳輸層、(會話層、表示層)和應用層。那么從協議上來講:

  • TCP是傳輸層協議,主要解決數據如何在網絡中傳輸
  • HTTP 是應用層協議,主要解決如何包裝數據(文本信息),是建立在tcp協議之上的應用。TCP協議是以二進制數據流的形式解決傳輸層的事兒,但對上層的應用開發極不友好,所以面向應用層的開發又產生了HTTP協議。

而socket 是針對TCP或UDP的具體接口實現,提供了在傳輸層進行網絡編程的方法。

以上內容我們應該都聽說的比較多了,下面主要來談一談RPC。

什么是RPC?

RPC(Remote Procedure Call)是遠程過程調用,比如說現在有兩臺服務器A, B,一個在A服務器上的應用想要調用B服務器上的應用提供的某個,由于不在兩個方法不在一個內存空間,不能直接調用,需要通過網絡表達調用的語義和傳達調用的數據。常存在于分布式系統中。

為何有http協議之后,還要RPC調用?

RPC跟HTTP不是對立面,RPC中可以使用HTTP作為通訊協議。RPC是一種設計、實現框架,通訊協議只是其中一部分。

RPC的本質是提供了一種輕量無感知的跨進程通信的方式,在分布式機器上調用其他方法與本地調用無異(遠程調用的過程是透明的,你并不知道這個調用的方法是部署在哪里,通過PRC能夠解耦服務)。RPC是根據語言的API來定義的,而不是基于網絡的應用來定義的,調用更方便,協議私密更安全、內容更小效率更高。

http接口是在接口不多、系統與系統交互較少的情況下,解決信息孤島初期常使用的一種通信手段;優點就是簡單、直接、開發方便。利用現成的http協議 進行傳輸。但是如果是一個大型的網站,內部子系統較多、接口非常多的情況下,RPC框架的好處就顯示出來了,首先(基于TCP協議的情況下)就是長鏈接,不必每次通信都要像http 一樣去3次握手什么的,減少了網絡開銷;其次就是RPC框架一般都有注冊中心,有豐富的監控管理;發布、下線接口、動態擴展等,對調用方來說是無感知、統 一化的操作。第三個來說就是安全性。最后就是最近流行的服務化架構、服務化治理,RPC框架是一個強力的支撐。

RPC 中要解決的問題:

  • 建立通信:在客戶端與服務端建立起數據傳輸通道,大都是TCP連接(gRPC使用了HTTP2)。
  • 尋址:A服務器上的應用需要告訴RPC框架:B服務器地址、端口,調用函數名稱。所以必須實現待調用方法到call ID的映射。
  • 序列化與反序列化:由于網絡協議都是二進制的,所以調用方法的參數在進行傳遞時首先要序列化成二進制,B服務器收到請求后要再對參數進行反序列化?;謴蜑閮却嬷械谋磉_方式,找到對應的方法進行本地調用,得到返回值。返回值從B到A的傳輸仍要經過序列化與反序列化的過程。

常見名詞小結

名詞 特點
RPC 遠程過程調用(分布式、微服務間的方法調用)
HTTP 無狀態,每次請求都要發送一個request,服務器響應之后就斷掉(http header中的keep-alive指的是tcp)
TCP 面向連接,三次握手保證通信可靠
UDP 非面向連接,不可靠,速度快(可以手動對數據收發進行驗證,IM系統多采用,QQ)
socket TCP協議的接口實現,面向傳輸層進行網絡編程

單獨來談一談gRPC

gRPC是谷歌開源的一個 RPC 框架,面向移動和 HTTP/2 設計。

  • 內容交換格式采用ProtoBuf(Google Protocol Buffers),開源已久,提供了一種靈活、高效、自動序列化結構數據的機制,作用與XML,Json類似,但使用二進制,(反)序列化速度快,壓縮效率高。
  • 傳輸協議 采用http2,性能比http1.1好了很多

和很多RPC系統一樣,服務端負責實現定義好的接口并處理客戶端的請求,客戶端根據接口描述直接調用需要的服務??蛻舳撕头斩丝梢苑謩e使用gPRC支持的不同語言實現。

ProtoBuf 具有強大的IDL(interface description language,接口描述語言)和相關工具集(主要是protoc)。用戶寫好.proto描述文件后,protoc可以將其編譯成眾多語言的接口代碼。

補充:HTTP/2介紹

新特性:
  • 新的二進制格式

    HTTP1.X都是基于文本解析,而因為文本表現形式的多樣性,基于文本協議的格式解析天然存在健壯性問題。而采用二進制格式后實現方便且健壯。

  • 多路復用

    多個request共享一個連接。

  • header壓縮

    在HTTP1.x中header信息很多,且每次都會重復發送,造成很大浪費。HTTP2.0使用encoder減少了傳輸的header大小,且通信雙方都緩存一份包含了header信息的表,此后的請求可以只發送差異數據,避免信息的重復傳輸,進一步減少需要傳輸的內容大小。

  • 服務端推送

    主要的思想是:當一個客戶端請求資源X,而服務器知道它很可能也需要資源Z的情況下,服務器可以在客戶端發送請求前,主動將資源Z推送給客戶端。這個功能幫助客戶端將Z放進緩存以備將來之需。也遵守同源策略,且客戶端可以拒絕推送過來的資源。

推薦閱讀:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容