什么是gRPC

聲明

本篇文章是在學(xué)習(xí)gRPC框架的過程中翻譯的官方文檔,非作者原創(chuàng)而咆,官方文檔參考gRPC霍比,學(xué)習(xí)gRPC過程中,有些概念暴备,思想理解翻譯不到位還請多多指教悠瞬。


本文主要介紹gRPC和protocol buffers,gRPC使用protocol buffers作為接口定義語言(IDL)和底層數(shù)據(jù)交換的格式涯捻。如果讀者初次接觸gRPC或protocol bufers浅妆,請繼續(xù)閱讀本文了解更多基本概念,如果你想快速深入并實際使用gRPC障癌,請參考快速入門指南凌外。

概述

在gRPC中,客戶端應(yīng)用可以像調(diào)用本地對象的方法一樣直接調(diào)用部署在其他機(jī)器上的服務(wù)端應(yīng)用的方法涛浙。gRPC降低了構(gòu)建分布式應(yīng)用和服務(wù)的難度康辑。和其他RPC系統(tǒng)一樣摄欲,gRPC的核心也是服務(wù)定義,定義可以被遠(yuǎn)程調(diào)用方法的入?yún)⒑头祷刂荡薄T诜?wù)端蒿涎,服務(wù)器應(yīng)用實現(xiàn)方法并啟動一個gRPC服務(wù)器來處理客戶端調(diào)用。在客戶端惦辛,客戶端有一個叫做stub的組件(在很多語言中稱為客戶端)劳秋,提供和服務(wù)端一致的方法。

grpc通信模型

gRPC客戶端和服務(wù)端可以在多種不同的環(huán)境下運(yùn)行并相互通信胖齐,也可以使用gRPC支持的語言實現(xiàn)玻淑。例如,使用Java實現(xiàn)服務(wù)端呀伙,使用Go补履、Python或Ruby實現(xiàn)客戶端。此外剿另,Google最新的API都有對應(yīng)的gRPC接口箫锤,可以更加容易的在應(yīng)用構(gòu)建Google的功能。

使用Protocol Buffers

gRPC默認(rèn)使用protocl buffers雨女,protoc buffers 是谷歌成熟的開源的用于結(jié)構(gòu)化數(shù)據(jù)序列化的機(jī)制谚攒。gRPC也可以使用其他數(shù)據(jù)格式,比如JSON氛堕。下面簡單介紹如何使用protocol buffers馏臭,如果讀者對protocol buffers非常熟悉可以跳過該章節(jié)。

第一步:使用 .proto文件(以.proto為后綴的二進(jìn)制文本文件)定義待序列化數(shù)據(jù)的結(jié)構(gòu)讼稚。Protocol buffer中的數(shù)據(jù)稱為“message”括儒,每個message都是一個包含一系列稱為“fields”的鍵-值對的小型化邏輯記錄,下面是一個簡單的例子锐想。

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

第二步:使用 protocol buffer 的編譯器protoc從proto定義生成選擇語言的數(shù)據(jù)接入層類帮寻。編譯器生成的類提供簡單的對field訪問方法,例如name()和set_name()赠摇,這點和Java Bean中的Set和Get方法類似固逗,也提供序列化和反序列化整個數(shù)據(jù)結(jié)構(gòu)的方法。例如蝉稳,加入選擇的語言是C++抒蚜,編譯上面的例子可以得到一個名為Person的類掘鄙,在應(yīng)用中可以直接使用這個類填充耘戚,序列化和檢索Person protocol buffer消息。

正如您將在示例中更詳細(xì)地看到的那樣操漠,您可以在普通的proto文件中定義gRPC服務(wù)收津,并將RPC方法參數(shù)和返回類型指定為protocol buffer :

// greeter 服務(wù)定義.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// 客戶端請求消息包含用戶名.
message HelloRequest {
  string name = 1;
}

// 服務(wù)端響應(yīng)包含一條greeting消息
message HelloReply {
  string message = 1;
}

gRPC使用帶有特殊gRPC插件的protoc來生成proto文件中的代碼饿这。 但是,使用gRPC插件撞秋,您可以生成gRPC客戶端和服務(wù)器代碼,以及用于填充,序列化和檢索消息類型的常規(guī)protocol buffer 代碼磷箕。你可以從Protocol Buffers文檔中獲取到更多有關(guān)protocol buffer的信息呻右,并能夠獲取到如何獲取安裝和你選定語言相關(guān)的protoc

Protocol buffer 版本

雖然protocol buffer 被開源用戶使用已經(jīng)有一段時間舅列,但我們的示例使用了一種新的protocol buffer肌割,稱為proto3,它具有略微簡化的語法帐要,一些有用的新功能把敞,并支持更多語言。proto3目前已經(jīng)支持Java榨惠,C++奋早,Python,Objective-C赠橙,C#耽装,Ruby和JavaScript,也實現(xiàn)了對Go語言的支持期揪。通常剂邮,雖然您可以使用proto2(當(dāng)前默認(rèn)protocol buffer版本),但我們建議您將proto3與gRPC一起使用横侦,因為它允許您使用全系列g(shù)RPC支持的語言挥萌,并避免使用proto2客戶端與使用proto3服務(wù)端通信時的兼容性問題,反之亦然枉侧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末引瀑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榨馁,更是在濱河造成了極大的恐慌憨栽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翼虫,死亡現(xiàn)場離奇詭異屑柔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)珍剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門掸宛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人招拙,你說我怎么就攤上這事唧瘾〈胍耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵饰序,是天一觀的道長领虹。 經(jīng)常有香客問我,道長求豫,這世上最難降的妖魔是什么塌衰? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蝠嘉,結(jié)果婚禮上猾蒂,老公的妹妹穿的比我還像新娘。我一直安慰自己是晨,他們只是感情好肚菠,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罩缴,像睡著了一般蚊逢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箫章,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天烙荷,我揣著相機(jī)與錄音,去河邊找鬼檬寂。 笑死终抽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桶至。 我是一名探鬼主播昼伴,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镣屹!你這毒婦竟也來了圃郊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤女蜈,失蹤者是張志新(化名)和其女友劉穎持舆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伪窖,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡逸寓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了覆山。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竹伸。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汹买,靈堂內(nèi)的尸體忽然破棺而出佩伤,到底是詐尸還是另有隱情聊倔,我是刑警寧澤晦毙,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布生巡,位于F島的核電站,受9級特大地震影響见妒,放射性物質(zhì)發(fā)生泄漏孤荣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一须揣、第九天 我趴在偏房一處隱蔽的房頂上張望盐股。 院中可真熱鬧,春花似錦耻卡、人聲如沸疯汁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幌蚊。三九已至,卻和暖如春溃卡,著一層夾襖步出監(jiān)牢的瞬間溢豆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工瘸羡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留漩仙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓犹赖,卻偏偏與公主長得像队他,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子峻村,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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