基於 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"

image-health-check

參考


上次修改時間:2024 年 1 月 17 日:修復損壞的連結 (6651e217e73)