GRPC的產(chǎn)生動(dòng)機(jī)和設(shè)計(jì)原則

首次嘗試翻譯技術(shù)文章酵颁。原文:gRPC Motivation and Design Principles (http://www.grpc.io/posts/principles/)

動(dòng)機(jī)

十多年來怠硼,谷歌一直使用一個(gè)叫做Stubby的通用RPC基礎(chǔ)框架噩死,用它來連接在我們數(shù)據(jù)中心內(nèi)和跨數(shù)據(jù)中心運(yùn)行的大量微服務(wù)趁怔。我們的內(nèi)部系統(tǒng)早就接受了如今越來越流行的微服務(wù)架構(gòu)哥童。擁有一個(gè)統(tǒng)一的递宅、跨平臺(tái)的RPC的基礎(chǔ)框架歪泳,使得服務(wù)的首次發(fā)行在效率任斋、安全性继阻、可靠性和行為分析上得到全面提升,這是支撐這一時(shí)期谷歌快速增長(zhǎng)的關(guān)鍵废酷。

Stubby有許多非常棒的特性瘟檩,然而,它沒有基于任何標(biāo)準(zhǔn)澈蟆,而且與我們內(nèi)部的基礎(chǔ)框架耦合得太緊密以至于被認(rèn)為不適合公開發(fā)布墨辛。隨著SPDY、HTTP/2和QUIC的到來趴俘,許多類似特性在公共標(biāo)準(zhǔn)中出現(xiàn)睹簇,并提供了Stubby不支持的其它功能。很明顯寥闪,是時(shí)候利用這些標(biāo)準(zhǔn)來重寫Stubby太惠,并將其適用性擴(kuò)展到移動(dòng)、物聯(lián)網(wǎng)和云場(chǎng)景橙垢。

原則和訴求

服務(wù)而非對(duì)象垛叨、消息而非引用 —— 促進(jìn)微服務(wù)的系統(tǒng)間粗粒度消息交互設(shè)計(jì)理念,同時(shí)避免分布式對(duì)象的陷阱和分布式計(jì)算的謬誤柜某。

普遍并且簡(jiǎn)單 —— 該基礎(chǔ)框架應(yīng)該在任何流行的開發(fā)平臺(tái)上適用嗽元,并且易于被個(gè)人在自己的平臺(tái)上構(gòu)建。它在CPU和內(nèi)存有限的設(shè)備上也應(yīng)該切實(shí)可行喂击。

免費(fèi)并且開源 —— 所有人可免費(fèi)使用基本特性剂癌。以友好的許可協(xié)議開源方式發(fā)布所有交付件。

互通性 —— 該數(shù)據(jù)傳輸協(xié)議(Wire Protocol)必須遵循普通互聯(lián)網(wǎng)基礎(chǔ)框架翰绊。

通用并且高性能 —— 該框架應(yīng)該適用于絕大多數(shù)用例場(chǎng)景佩谷,相比針對(duì)特定用例的框架,該框架只會(huì)犧牲一點(diǎn)性能监嗜。

分層的 —— 該框架的關(guān)鍵是必須能夠獨(dú)立演進(jìn)谐檀。對(duì)數(shù)據(jù)傳輸格式(Wire Format)的修改不應(yīng)該影響應(yīng)用層。

負(fù)載無關(guān)的 —— 不同的服務(wù)需要使用不同的消息類型和編碼裁奇,例如protocol buffers桐猬、JSON、XML和Thrift刽肠,協(xié)議上和實(shí)現(xiàn)上必須滿足這樣的訴求溃肪。類似地免胃,對(duì)負(fù)載壓縮的訴求也因應(yīng)用場(chǎng)景和負(fù)載類型不同而不同,協(xié)議上應(yīng)該支持可插拔的壓縮機(jī)制惫撰。

—— 存儲(chǔ)系統(tǒng)依賴于流和流控來傳遞大數(shù)據(jù)集羔沙。像語音轉(zhuǎn)文本或股票代碼等其它服務(wù),依靠流表達(dá)時(shí)間相關(guān)的消息序列厨钻。

阻塞式和非阻塞式 —— 支持異步和同步處理在客戶端和服務(wù)端間交互的消息序列扼雏。這是在某些平臺(tái)上縮放和處理流的關(guān)鍵。

取消和超時(shí) —— 有的操作可能會(huì)用時(shí)很長(zhǎng)夯膀,客戶端運(yùn)行正常時(shí)呢蛤,可以通過取消操作讓服務(wù)端回收資源。當(dāng)任務(wù)因果鏈被追蹤時(shí)棍郎,取消可以級(jí)聯(lián)其障。客戶端可能會(huì)被告知調(diào)用超時(shí)涂佃,此時(shí)服務(wù)就可以根據(jù)客戶端的需求來調(diào)整自己的行為励翼。

Lameducking —— 服務(wù)端必須支持優(yōu)雅關(guān)閉,優(yōu)雅關(guān)閉時(shí)拒絕新請(qǐng)求辜荠,但繼續(xù)處理正在運(yùn)行中的請(qǐng)求汽抚。

流控 —— 在客戶端和服務(wù)端之間,計(jì)算能力和網(wǎng)絡(luò)容量往往是不平衡的伯病。流控可以更好的緩沖管理造烁,以及保護(hù)系統(tǒng)免受來自異常活躍對(duì)端的拒絕服務(wù)(DOS)攻擊午笛。

可插拔的 —— 數(shù)據(jù)傳輸協(xié)議(Wire Protocol)只是功能完備API基礎(chǔ)框架的一部分惭蟋。大型分布式系統(tǒng)需要安全、健康檢查药磺、負(fù)載均衡和故障恢復(fù)告组、監(jiān)控、跟蹤癌佩、日志等木缝。實(shí)現(xiàn)上應(yīng)該提供擴(kuò)展點(diǎn),以允許插入這些特性和默認(rèn)實(shí)現(xiàn)围辙。

API擴(kuò)展 ——

可能的話我碟,在服務(wù)間協(xié)作的擴(kuò)展應(yīng)該最好使用接口擴(kuò)展,而不是協(xié)議擴(kuò)展姚建。這種類型的擴(kuò)展可以包括健康檢查矫俺、服務(wù)內(nèi)省、負(fù)載監(jiān)測(cè)和負(fù)載均衡分配。

元數(shù)據(jù)交換 —— 常見的橫切關(guān)注點(diǎn)恳守,如認(rèn)證或跟蹤,依賴數(shù)據(jù)交換贩虾,但這不是服務(wù)公共接口中的一部分催烘。部署依賴于他們將這些特性以不同速度演進(jìn)到服務(wù)暴露的個(gè)別API的能力。

標(biāo)準(zhǔn)化狀態(tài)碼 —— 客戶端通常以有限的方式響應(yīng)API調(diào)用返回的錯(cuò)誤缎罢。應(yīng)該限制狀態(tài)代碼名字空間伊群,使得這些錯(cuò)誤處理決定更清晰。如果需要更豐富的特定域的狀態(tài)策精,可以使用元數(shù)據(jù)交換機(jī)制來提供舰始。

最初由Louis Ryan在谷歌其他同事幫助下寫成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咽袜,一起剝皮案震驚了整個(gè)濱河市丸卷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌询刹,老刑警劉巖谜嫉,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凹联,居然都是意外死亡沐兰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蔽挠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來住闯,“玉大人煌珊,你說我怎么就攤上這事兼蜈。” “怎么了婶熬?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵杠巡,是天一觀的道長(zhǎng)春寿。 經(jīng)常有香客問我,道長(zhǎng)忽孽,這世上最難降的妖魔是什么绑改? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兄一,結(jié)果婚禮上厘线,老公的妹妹穿的比我還像新娘。我一直安慰自己出革,他們只是感情好造壮,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般耳璧。 火紅的嫁衣襯著肌膚如雪成箫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天旨枯,我揣著相機(jī)與錄音蹬昌,去河邊找鬼。 笑死攀隔,一個(gè)胖子當(dāng)著我的面吹牛皂贩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昆汹,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼明刷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了满粗?” 一聲冷哼從身側(cè)響起辈末,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎映皆,沒想到半個(gè)月后本冲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劫扒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年檬洞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟饥。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡添怔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贤旷,到底是詐尸還是另有隱情广料,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布幼驶,位于F島的核電站艾杏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盅藻。R本人自食惡果不足惜购桑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氏淑。 院中可真熱鬧勃蜘,春花似錦、人聲如沸假残。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阳惹,卻和暖如春谍失,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莹汤。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工快鱼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人体啰。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗽仪,于是被迫代替她去往敵國(guó)和親荒勇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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