基于 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 三重健康检查服务

  • Dubbo-go 框架会在启动后自动向框架注册健康检查服务,并基于 grpc health proto 提供健康检查服务,无需在配置文件中进行额外配置。
  • 三重健康检查服务可以通过 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”的状态。三重健康检查服务与 grpc 通信,因此可以通过 grpc 客户端检查基于三重协议的服务的健康状态。
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)