HTTP贞铣,TCP闹啦, socket,RPC 與gRPC都是啥辕坝?

TCP/HTTP與socket

首先回顧下計算機網(wǎng)絡的五(七)層協(xié)議:物理層窍奋、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層费变、(會話層、表示層)和應用層圣贸。那么從協(xié)議上來講:

  • TCP是傳輸層協(xié)議挚歧,主要解決數(shù)據(jù)如何在網(wǎng)絡中傳輸
  • HTTP 是應用層協(xié)議,主要解決如何包裝數(shù)據(jù)(文本信息)吁峻,是建立在tcp協(xié)議之上的應用滑负。TCP協(xié)議是以二進制數(shù)據(jù)流的形式解決傳輸層的事兒,但對上層的應用開發(fā)極不友好用含,所以面向應用層的開發(fā)又產(chǎn)生了HTTP協(xié)議矮慕。

而socket 是針對TCP或UDP的具體接口實現(xiàn),提供了在傳輸層進行網(wǎng)絡編程的方法啄骇。

以上內(nèi)容我們應該都聽說的比較多了痴鳄,下面主要來談一談RPC砌溺。

什么是RPC封锉?

RPC(Remote Procedure Call)是遠程過程調(diào)用,比如說現(xiàn)在有兩臺服務器A, B煤痕,一個在A服務器上的應用想要調(diào)用B服務器上的應用提供的某個虽惭,由于不在兩個方法不在一個內(nèi)存空間橡类,不能直接調(diào)用,需要通過網(wǎng)絡表達調(diào)用的語義和傳達調(diào)用的數(shù)據(jù)芽唇。常存在于分布式系統(tǒng)中顾画。

為何有http協(xié)議之后,還要RPC調(diào)用匆笤?

RPC跟HTTP不是對立面研侣,RPC中可以使用HTTP作為通訊協(xié)議。RPC是一種設計疚膊、實現(xiàn)框架义辕,通訊協(xié)議只是其中一部分。

RPC的本質(zhì)是提供了一種輕量無感知的跨進程通信的方式寓盗,在分布式機器上調(diào)用其他方法與本地調(diào)用無異(遠程調(diào)用的過程是透明的灌砖,你并不知道這個調(diào)用的方法是部署在哪里,通過PRC能夠解耦服務)傀蚌。RPC是根據(jù)語言的API來定義的基显,而不是基于網(wǎng)絡的應用來定義的,調(diào)用更方便善炫,協(xié)議私密更安全撩幽、內(nèi)容更小效率更高。

http接口是在接口不多、系統(tǒng)與系統(tǒng)交互較少的情況下窜醉,解決信息孤島初期常使用的一種通信手段宪萄;優(yōu)點就是簡單、直接榨惰、開發(fā)方便拜英。利用現(xiàn)成的http協(xié)議 進行傳輸。但是如果是一個大型的網(wǎng)站琅催,內(nèi)部子系統(tǒng)較多居凶、接口非常多的情況下,RPC框架的好處就顯示出來了藤抡,首先(基于TCP協(xié)議的情況下)就是長鏈接侠碧,不必每次通信都要像http 一樣去3次握手什么的,減少了網(wǎng)絡開銷缠黍;其次就是RPC框架一般都有注冊中心弄兜,有豐富的監(jiān)控管理;發(fā)布嫁佳、下線接口挨队、動態(tài)擴展等,對調(diào)用方來說是無感知蒿往、統(tǒng) 一化的操作盛垦。第三個來說就是安全性。最后就是最近流行的服務化架構(gòu)瓤漏、服務化治理腾夯,RPC框架是一個強力的支撐。

RPC 中要解決的問題:

  • 建立通信:在客戶端與服務端建立起數(shù)據(jù)傳輸通道蔬充,大都是TCP連接(gRPC使用了HTTP2)蝶俱。
  • 尋址:A服務器上的應用需要告訴RPC框架:B服務器地址、端口饥漫,調(diào)用函數(shù)名稱榨呆。所以必須實現(xiàn)待調(diào)用方法到call ID的映射。
  • 序列化與反序列化:由于網(wǎng)絡協(xié)議都是二進制的庸队,所以調(diào)用方法的參數(shù)在進行傳遞時首先要序列化成二進制积蜻,B服務器收到請求后要再對參數(shù)進行反序列化〕瓜恢復為內(nèi)存中的表達方式竿拆,找到對應的方法進行本地調(diào)用,得到返回值宾尚。返回值從B到A的傳輸仍要經(jīng)過序列化與反序列化的過程丙笋。

常見名詞小結(jié)

名詞 特點
RPC 遠程過程調(diào)用(分布式谢澈、微服務間的方法調(diào)用)
HTTP 無狀態(tài),每次請求都要發(fā)送一個request御板,服務器響應之后就斷掉(http header中的keep-alive指的是tcp)
TCP 面向連接锥忿,三次握手保證通信可靠
UDP 非面向連接,不可靠怠肋,速度快(可以手動對數(shù)據(jù)收發(fā)進行驗證缎谷,IM系統(tǒng)多采用,QQ)
socket TCP協(xié)議的接口實現(xiàn)灶似,面向傳輸層進行網(wǎng)絡編程

單獨來談一談gRPC

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

  • 內(nèi)容交換格式采用ProtoBuf(Google Protocol Buffers)酪惭,開源已久,提供了一種靈活者甲、高效春感、自動序列化結(jié)構(gòu)數(shù)據(jù)的機制,作用與XML虏缸,Json類似鲫懒,但使用二進制,(反)序列化速度快刽辙,壓縮效率高窥岩。
  • 傳輸協(xié)議 采用http2,性能比http1.1好了很多

和很多RPC系統(tǒng)一樣宰缤,服務端負責實現(xiàn)定義好的接口并處理客戶端的請求颂翼,客戶端根據(jù)接口描述直接調(diào)用需要的服務】穑客戶端和服務端可以分別使用gPRC支持的不同語言實現(xiàn)朦乏。

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

補充:HTTP/2介紹

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

    HTTP1.X都是基于文本解析筹陵,而因為文本表現(xiàn)形式的多樣性刽锤,基于文本協(xié)議的格式解析天然存在健壯性問題。而采用二進制格式后實現(xiàn)方便且健壯惶翻。

  • 多路復用

    多個request共享一個連接姑蓝。

  • header壓縮

    在HTTP1.x中header信息很多,且每次都會重復發(fā)送吕粗,造成很大浪費纺荧。HTTP2.0使用encoder減少了傳輸?shù)膆eader大小,且通信雙方都緩存一份包含了header信息的表,此后的請求可以只發(fā)送差異數(shù)據(jù)宙暇,避免信息的重復傳輸输枯,進一步減少需要傳輸?shù)膬?nèi)容大小。

  • 服務端推送

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

推薦閱讀:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烫葬,一起剝皮案震驚了整個濱河市界弧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搭综,老刑警劉巖垢箕,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兑巾,居然都是意外死亡条获,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門蒋歌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來月匣,“玉大人,你說我怎么就攤上這事奋姿〕” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵称诗,是天一觀的道長萍悴。 經(jīng)常有香客問我,道長寓免,這世上最難降的妖魔是什么癣诱? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮袜香,結(jié)果婚禮上撕予,老公的妹妹穿的比我還像新娘。我一直安慰自己蜈首,他們只是感情好实抡,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布欠母。 她就那樣靜靜地躺著,像睡著了一般吆寨。 火紅的嫁衣襯著肌膚如雪赏淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天啄清,我揣著相機與錄音六水,去河邊找鬼。 笑死辣卒,一個胖子當著我的面吹牛掷贾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荣茫,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼胯盯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了计露?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤憎乙,失蹤者是張志新(化名)和其女友劉穎票罐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泞边,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡该押,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阵谚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚕礼。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梢什,靈堂內(nèi)的尸體忽然破棺而出奠蹬,到底是詐尸還是另有隱情,我是刑警寧澤嗡午,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布囤躁,位于F島的核電站,受9級特大地震影響荔睹,放射性物質(zhì)發(fā)生泄漏狸演。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一僻他、第九天 我趴在偏房一處隱蔽的房頂上張望宵距。 院中可真熱鬧,春花似錦吨拗、人聲如沸满哪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翩瓜。三九已至受扳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兔跌,已是汗流浹背勘高。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坟桅,地道東北人华望。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像仅乓,于是被迫代替她去往敵國和親赖舟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容