【问题标题】:How to implement liveness and readiness endpoints for a gRPC service?如何为 gRPC 服务实现 liveness 和 readiness 端点?
【发布时间】:2019-01-04 04:33:51
【问题描述】:

我有一个 gRPC 服务,它使用 tcp 侦听器侦听端口。该服务是 Docker 化的,最终我想在 Kubernetes 集群中运行它。

我想知道实施 livenessreadiness 探测以检查我的服务运行状况的最佳方法是什么?

  1. 我是否应该在另一个 goroutine 中运行一个单独的 http 服务器并响应 /health/ready 路径?
  2. 或者,我是否也应该为我的服务的活跃性和就绪性调用 gRPC 并使用 gRPC 客户端来查询这些端点?!

【问题讨论】:

    标签: docker go kubernetes grpc


    【解决方案1】:

    之前我在应用程序中运行了一个单独的 http 服务器,仅用于运行状况检查(这是因为 AWS 应用程序负载均衡器只有 http 检查,我不了解 kube)。

    如果您将 http 服务器作为单独的例程运行,并将 grpc 服务器运行在主 goroutine 上,那么您应该避免 grpc 服务器关闭并且 http 仍然是 200 - OK(假设您还没有方法)用于 http 对您的 grpc 进行健康检查)。

    您还可以使用 goroutines 的 heatbeat 模式,它由 http 服务器控制并接受来自 grpc 服务器的心跳以确保一切正常。

    如果您运行 2 个服务器,它们将需要在不同的端口上运行,这对于一些需要 1 个服务端口的调度程序(如 ECS)来说可能是个问题。有一些示例和软件包允许您将多个协议多路复用到同一端口。我猜 kube 支持多个端口服务,所以这可能不是问题。

    多路复用示例链接:

    https://github.com/gdm85/grpc-go-multiplex/blob/master/greeter_multiplex_server/greeter_multiplex_server.go

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2020-12-13
      • 2020-11-25
      • 2023-01-30
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多