基於 Grpc 的健康檢查
1. Grpc 健康檢查
Grpc 健康檢查是透過普通的用戶端 rpc 呼叫實現的。 Grpc 健康檢查定義了以下 protobuf,以便實現所有 Grpc 協議健康檢查的互通。
首先,由於它本身就是一個 GRPC 服務,因此進行健康檢查的格式與正常的 rpc 相同。 其次,它具有豐富的語義,例如每個服務的健康狀態。 第三,作為一個 GRPC 服務,它能夠重複使用所有現有的計費、配額基礎架構等,因此伺服器可以完全控制健康檢查服務的存取。
syntax = "proto3";
package grpc.health.v1;
message HealthCheckRequest {
string service = 1;
}
message HealthCheckResponse {
enum ServingStatus {
UNKNOWN = 0;
SERVING = 1;
NOT_SERVING = 2;
SERVICE_UNKNOWN = 3; // Used only by the Watch method.
}
ServingStatus status = 1;
}
service Health {
rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse);
}
2. Triple 健康檢查服務
- Dubbo-go 架構將在啟動後自動向架構註冊健康檢查服務,並根據 grpc health proto 提供健康檢查服務,無需在配置文件中進行額外配置。
- Triple 健康檢查服務可以透過 grpc-health-probe 檢查架構中服務的狀態,也可以透過 grpc 呼叫健康檢查服務,但不能透過 Triple 用戶端呼叫健康檢查服務(基於 grpc 的健康檢查服務不會透過註冊中心註冊),呼叫的服務名稱是「grpc.health.v1.Health」,介面是 check。
2.1 透過 gprc 用戶端呼叫健康檢查服務
- 在 dubbo-go-samples 中啟動 Triple 服務,透過以下 grpc 用戶端可以查看「org.apache.dubbogo.samples.api.Greeter」的狀態。 Triple 健康檢查服務與 grpc 進行通訊,因此可以透過 grpc 用戶端檢查基於 Triple 協議的服務的健康狀態。
package main
import (
"context"
"fmt"
"log"
)
import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
)
const (
address = "localhost:20000"
)
func main() {
// Set up a connection to the server
conn, err := grpc.Dial(address, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer func() {
_ = conn.Close()
}()
checkHealth("org.apache.dubbogo.samples.api.Greeter", conn)
}
func checkHealth(service string, conn *grpc.ClientConn) {
fmt.Printf(">>>>> gRPC-go check %s status", service)
req := &healthpb.HealthCheckRequest{
Service: service,
}
ctx := context. Background()
rsp, err := healthpb. NewHealthClient(conn). Check(ctx, req)
if err != nil {
panic(err)
}
fmt.Printf("get service status = %+v\n", rsp)
}
2.2 grpc-health-probe 除錯健康檢查服務
- 在 dubbo-go-samples 中啟動 Triple 服務,提供
org.apache.dubbogo.samples.api.Greeter
服務。 使用 grpc-health-probe 檢查服務的健康狀態,grpc-health-probe -addr=localhost:20000 -service "org.apache.dubbogo.samples.api.Greeter"
參考
- https://github.com/grpc/grpc/blob/master/doc/health-checking.md
- https://github.com/grpc/grpc-go/tree/master/health
上次修改時間:2024 年 1 月 17 日:修復損壞的連結 (6651e217e73)