gRPC學(xué)習(xí)筆記(二)——相關(guān)特性

截止時(shí)間(deadline)

在以前接觸的通信框架中,一般是通過超時(shí)時(shí)間(timeout)來指定客戶端應(yīng)用程序等待完成的時(shí)間(超出該時(shí)間后會以異常結(jié)束)。

與之不同的是,在 gRPC 中使用截止時(shí)間(deadline)。截至?xí)r間以請求開始的絕對時(shí)間來表示(盡管API將它們表示為持續(xù)時(shí)間的偏移),發(fā)起請求的應(yīng)用程序設(shè)置截止時(shí)間,整個(gè)請求鏈需要在截止時(shí)間之前進(jìn)行響應(yīng),否則會拋出異常。

截止時(shí)間和超時(shí)時(shí)間都是為了防止請求產(chǎn)生阻塞,造成大量請求掛起耗盡服務(wù)資源的情況。與超時(shí)時(shí)間不同的是,可以用到請求鏈的整個(gè)生命周期,而不必為每個(gè)請求單獨(dú)設(shè)置。

gRPC 中是沒有默認(rèn)的截至?xí)r間的,這意味著如果客戶端程序在開發(fā)時(shí)沒有指定截止時(shí)間,那么它有可能會無限地等待自己請求的響應(yīng)。(在實(shí)際實(shí)現(xiàn)上可能各種語言會設(shè)置一個(gè)默認(rèn)截止時(shí)間,但由于 grpc 允許多個(gè)服務(wù)串行調(diào)用的特性,這一般也是一個(gè)很大的數(shù)值)。因此建議在開發(fā) gprc 程序時(shí)設(shè)置截止時(shí)間。

取消

在一些場景下,我們還可以主動取消 gRPC 請求,同樣可以避免讓客戶端一直等待。一旦取消 grpc 通信,就不能再進(jìn)行消息傳遞,而且一方已經(jīng)取消的消息也會傳遞到另一方。

錯(cuò)誤處理

當(dāng)發(fā)起 gPRC 調(diào)用時(shí),客戶端會接收成功狀態(tài)的響應(yīng)或者帶有對應(yīng)錯(cuò)誤狀態(tài)的錯(cuò)誤。在編寫客戶端應(yīng)用程序時(shí),需要處理所有潛在的錯(cuò)誤和錯(cuò)誤條件。編寫服務(wù)端應(yīng)用程序也需要處理錯(cuò)誤,并生成適當(dāng)?shù)腻e(cuò)誤狀態(tài)碼。

gRPC 中定義了一組專用狀態(tài)碼,具體如下。

gRPC狀態(tài)碼 gRPC信息 含義
0 OK 成功
1 CANCELLED 操作已被取消
2 UNKNOWN 未知錯(cuò)誤
3 INVALID_ARGUMENT 客戶端參數(shù)非法
4 DEADLINE_EXCEEDED 操作超過了截止時(shí)間
5 NOT_FOUND 請求實(shí)體未找到
6 ALREADY_EXISTS 客戶端試圖創(chuàng)建的實(shí)體已存在
7 PERMISSION_DENIED 調(diào)用者沒有權(quán)限執(zhí)行特定操作
8 RESOURCE_EXHAUSTED 資源已耗盡
9 FAILED_PRECONDITION 操作被拒絕,系統(tǒng)沒有處于執(zhí)行操作所需狀態(tài)
10 ABORTED 操作被中止
11 OUT_OF_RANGE 操作超出了合法的范圍
12 UNIMPLEMENTED 該操作未實(shí)現(xiàn)
13 INTERNAL 內(nèi)部錯(cuò)誤
14 UNAVAILABLE 服務(wù)當(dāng)前不可用
15 DATA_LOSS 數(shù)據(jù)丟失或損壞
16 UNAUTHENTICATED 客戶端沒有進(jìn)行操作的合法認(rèn)證憑證

多路復(fù)用(multiplexing)

gRPC 允許在同一個(gè) gRPC 服務(wù)端運(yùn)行多個(gè) gRPC 服務(wù),也允許多個(gè)客戶端存根(stub)使用同一個(gè)客戶端連接,這種功能叫做多路復(fù)用(multiplexing)。

元數(shù)據(jù)(metadata)

在 gRPC 中信息通過遠(yuǎn)程方法的參數(shù)傳遞,但是有時(shí)候一些與業(yè)務(wù)上下文無關(guān)的數(shù)據(jù)我們并不希望放到參數(shù)中,這時(shí)候就要用的 gRPC 中的元數(shù)據(jù),它的作用和 HTTP 中的報(bào)文頭有些類似,可以用鍵-值對的形式存放一些數(shù)據(jù)。

攔截器(interceptor)

gRPC 中可通過攔截 RPC 執(zhí)行,滿足特定的需求,如日志、認(rèn)證等,這會使用一種名為攔截器的擴(kuò)展機(jī)制。

gRPC 中的攔截器按通信模式可以分為一元攔截器和流攔截器,按照使用的地方可以分為客戶端攔截器和服務(wù)端攔截器。

需要注意的是,并非所有語言都支持 gRPC 攔截器,每種語言的攔截器實(shí)現(xiàn)也有差別。

安全性

gRPC 基于 HTTP/2 通信協(xié)議,支持使用TLS進(jìn)行單向或雙向加密。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容