Grpc原理

1 rpc框架原理

rpc調(diào)用原理框架如圖:


image.png

2 業(yè)內(nèi)比較成熟的rpc框架

支持多語言的主要分為3類

-支持多語言的rpc框架脚曾,例如Google的grpc,facebook thrift判导, 百度的brpc
-支持特定語言的rpc框架, 例如新浪微博的Motan
-支持服務(wù)治理微服務(wù)化特性框架,其底層仍是rpc框架隔盛,例如 阿里的Dubbo
目前業(yè)內(nèi)主要使用基于多語言的 RPC 框架來構(gòu)建微服務(wù),是一種比較好的技術(shù)選擇拾稳,例如netflix 吮炕,API服務(wù)編排層和后端微服務(wù)之間采用微服務(wù)rpc進(jìn)行通信

3 GRPC框架介紹

-支持C java js
-git地址 https://github.com/grpc/grpc-java
-原理圖:

image.png

4 GRPC服務(wù)端創(chuàng)建流程

  1. NettyServer的創(chuàng)建,gRpc服務(wù)端的創(chuàng)建访得,初始化nettyServer龙亲,nettyServer負(fù)責(zé)監(jiān)聽socket地址陕凹,實(shí)習(xí)基于HTTP2協(xié)議的寫入
  2. 綁定IDL定義服務(wù)接口實(shí)現(xiàn)類,grpc和一些RPC框架的不同是鳄炉,服務(wù)的接口實(shí)現(xiàn)類并不是同過反射實(shí)現(xiàn)的杜耙,而是通過proto工具生成的代碼,服務(wù)啟動(dòng)后拂盯,將服務(wù)的接口實(shí)現(xiàn)類注冊到gRpc內(nèi)部的服務(wù)注冊中心上佑女,請求消息來后,便可以通過服務(wù)名和方法名調(diào)用 谈竿,直接調(diào)用啟動(dòng)的時(shí)候注冊的服務(wù)實(shí)例团驱,bu不需要反射進(jìn)行調(diào)用,性能更優(yōu)
  3. ServerImpl 負(fù)責(zé)整個(gè) gRPC 服務(wù)端消息的調(diào)度和處理榕订,創(chuàng)建 ServerImpl 實(shí)例過程中店茶,會(huì)對服務(wù)端依賴的對象進(jìn)行初始化,例如 Netty 的線程池資源,gRPC 的線程池劫恒、內(nèi)部的服務(wù)注冊類(InternalHandlerRegistry)


    image.png

4.1 gRpc消息接入流程

  1. gRPC消息由netty /http/2 協(xié)議負(fù)責(zé)接入贩幻,通過grpc 注冊的Http2Framelister將解碼后的Http header和Http body 發(fā)送到gRPC的NettyServerHandler ,實(shí)現(xiàn)netty http/2的消息接入

    gRPC 請求消息接入流程如下:
    image.png

4.2 gRPC消息響應(yīng)模型

4.3 Netty Server 線程模型

gRPC 的線程模型遵循 Netty 的線程分工原則两嘴,即:協(xié)議層消息的接收和編解碼由 Netty 的 I/O(NioEventLoop) 線程負(fù)責(zé)丛楚;后續(xù)應(yīng)用層的處理由應(yīng)用線程負(fù)責(zé),防止由于應(yīng)用處理耗時(shí)而阻塞 Netty 的 I/O 線程
不過正是因?yàn)橛辛朔止ぴ瓌t憔辫,grpc 之間會(huì)做頻繁的線程切換趣些,如果在一次grpc調(diào)用過程中,做了多次I/O線程到應(yīng)用線程之間的切換贰您,會(huì)導(dǎo)致性能的下降坏平,這也是為什么grpc在一些私有協(xié)議支持不太友好的原因

gRpc 的線程模型

1. BIO線程模型 ,例如tomcat的BIO線程模型

image.png

缺點(diǎn)

改進(jìn):
優(yōu)化后BIO線程模型采用了線程池的做法但是后端的應(yīng)用處理線程仍然采用同步阻塞的模型锦亦,阻塞的時(shí)間取決對方I/O處理的速度和網(wǎng)絡(luò)I/O傳輸?shù)乃俣?/p>

2 異步非阻塞的線程模型

grpc的線程模型主要包含服務(wù)端線程模型舶替,客戶端線程模型

服務(wù)端線程模型主要包括

  1. 服務(wù)端的寫入,客戶端的接入線程(HTTP/2 Acceptor)
  2. 網(wǎng)絡(luò)I/O的讀寫線程
  3. 服務(wù)接口調(diào)用線程

客戶端線程模型主要包含

  1. 客戶端的鏈接 (HTTP/2 Connector)
  2. 網(wǎng)絡(luò)I/O讀寫線程
  3. 接口調(diào)用線程
  4. 響應(yīng)回調(diào)通知線程

2.1服務(wù)調(diào)度線程模型

2.1.1 I/O 通信線程模型
gRPC的做法是服務(wù)監(jiān)聽線程和I/O線程分離Reactor多個(gè)線程模型 其工作原理如下:


image.png

2.1.2 服務(wù)調(diào)度線程模型

2.2客戶端線程模型概述

gRPC 客戶端線程模型工作原理如下圖所示(同步阻塞調(diào)用為例)

image.png

2.2.1 I/O 通信線程模型

相比于服務(wù)端杠园,客戶端的線程模型簡單一些顾瞪,它的工作原理如下:

image.png

2.2.2 客戶端調(diào)用線程模型

image.png

grpc 線程模型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抛蚁,隨后出現(xiàn)的幾起案子陈醒,更是在濱河造成了極大的恐慌,老刑警劉巖瞧甩,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉跷,死亡現(xiàn)場離奇詭異,居然都是意外死亡肚逸,警方通過查閱死者的電腦和手機(jī)尘应,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門惶凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犬钢,你說我怎么就攤上這事苍鲜。” “怎么了玷犹?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵混滔,是天一觀的道長。 經(jīng)常有香客問我歹颓,道長坯屿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任巍扛,我火速辦了婚禮领跛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撤奸。我一直安慰自己吠昭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布胧瓜。 她就那樣靜靜地躺著矢棚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪府喳。 梳的紋絲不亂的頭發(fā)上蒲肋,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音钝满,去河邊找鬼兜粘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛弯蚜,可吹牛的內(nèi)容都是我干的妹沙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼熟吏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玄窝?” 一聲冷哼從身側(cè)響起牵寺,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恩脂,沒想到半個(gè)月后帽氓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俩块,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年黎休,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浓领。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡势腮,死狀恐怖联贩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捎拯,我是刑警寧澤泪幌,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站署照,受9級(jí)特大地震影響祸泪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜建芙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一没隘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禁荸,春花似錦右蒲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钧大,卻和暖如春翰撑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啊央。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工眶诈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓜饥。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓逝撬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乓土。 傳聞我的和親對象是個(gè)殘疾皇子宪潮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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