gRPC keepalive參數說明

gRPC keepalive 的作用:
gRPC 做服務間的通訊時,由于配置問題容易出現各類非預期的異常情況,能夠很好的避免transport is closing 的錯誤,通過keepalive 機制能夠解決這種連接長時間沒被使用,被服務端斷開的情況;
但是如果配置不當也會頻繁出現各種異常;

服務端:

gRPC的服務端keepalive參數,:

/** MaxConnectionIdle 最大空閑鏈接時間,即空閑鏈接在配置的時間內,未收到新的心跳和請求,則會將鏈接關閉,比向客戶端發送一個GoAway;
空閑鏈接的定義:最近未完成的RPC數變為0 的時間,或鏈接建立以來;
默認是無窮
*/
MaxConnectionIdle 
// 最長鏈接時間,當stream超過這個時間會發一個GoAway;為了防止短時間內發送大量的GoAway 會根據 MaxConnectionAge 時間間隔隨機+/- 10% 
// 默認是無窮
MaxConnectionAge 
// 是對MaxConnectionAge 的一個補充,超過了最長鏈接時間后延長的時間
// 默認是無窮
MaxConnectionAgeGrace 
/** 
服務端在設定的時間范圍內未收到客戶端任何活動,例如stream在時間內未收到數據信息,則會發送ping 信息檢查鏈接是否可用;
及時發現及時重試;
當設置值小于1秒時,會被強制設置成1秒
*/
Time 默認是2小時
// 服務端發送ping請求后,等待配置的時間,若客戶端在這個時間內未有任何響應則將該鏈接關閉回收
Timeout 默認是20秒

EnforcementPolicy的配置,用于在服務器端設置 keepalive 強制策略。服務器將關閉與違反此策略的客戶端的連接

// MinTime 是客戶端在發送 keepalive ping 之前應等待的最短時間;
// 即兩個keepalive ping 之間的最小間隔,若小于這個間隔,則會關閉與客戶端的鏈接
// 默認是5分鐘
MinTime
// 沒有 active stream, 也允許 ping
// 如果為 false,并且客戶端在沒有活動流時發送 ping,服務器將發送 GoAway 并關閉連接
PermitWithoutStream
客戶端:

gRPC 客戶端參數:

// 在時間范圍內無消息來往,即鏈接空閑,則會發送一個ping 檢查鏈接是否還存在
// 默認是無窮
// 最小值是10秒
Time
// 在發送一個keepalive 的ping 時,若Timeout 的時間內未ack ,則會斷開鏈接
Timeout
// 沒有 active stream, 也允許 ping
PermitWithoutStream
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容