gRPC服務健康檢查:gRPC健康檢查協議詳解
gRPC健康檢查協議
健康檢查用于檢測服務端能否正常處理rpc請求,客戶端對服務端的健康檢查可以點對點進行,也可以通過某些控制系統(如負載平衡)進行??蛻舳丝梢愿鶕斩朔祷氐臓顟B執行對應的策略。
因為GRPC服務可以用于簡單的客戶端到服務端場景和其他控制系統(如負載平衡)的健康檢查,所以gRPC健康檢查協議借助了gRPC服務來實現。使用GRPC服務來實現健康檢查有以下好處:
- 執行健康檢查的格式與普通rpc相同,
- 具有豐富的語義,例如每個服務的健康狀態,
- 能夠重用所有現有的計費、配額基礎設施等,因此服務器可以完全控制健康檢查服務的訪問。
gRPC健康檢查服務定義
因為gRPC健康檢查協議是通過gRPC服務實現的,我們首先看下這個服務的定義:
客戶端可以通過調用Check方法(需要設置截止時)查詢服務器的運行狀況,客戶端可以通過設置服務名稱來檢查對應服務的健康狀況。服務名稱的格式建議為package_names.ServiceName,例如grpc.health.v1.Health。
服務端要注冊所有服務并設置各個服務的狀態,包括空服務名稱及其狀態。對于接收到的每個請求,如果在配置列表中找到了對應服務,需要根據當前服務情況返回SERVING或NOT_SERVING的狀態。如果在配置列表沒找到對應服務,則返回NOT_FOUND狀態。
服務端應使用空字符串作為整體健康狀態的鍵,以便對特定服務不感興趣的客戶端可以通過空請求查詢服務的狀態。服務端可以只對服務名稱進行精確匹配也可以實現更復雜的匹配方式。
如果一次rpc調用在一段時間后都沒有收到響應,可以認為服務端掛了,需要執行應對服務端掛掉情況的策略。
客戶端可以調用Watch方法來使用基于stream方式的健康檢查。服務器會立即發回一條代表當前服務狀態的消息。只要服務的狀態發生變化,就會發送一條新消息。