【问题标题】:Python gRPC health checkPython gRPC 健康检查
【发布时间】:2019-11-20 21:34:49
【问题描述】:

我正在尝试学习 gRPC 并实现与tutorial 中相同的代码。想知道如何添加 gRPC 健康检查。

偶然发现this,但对如何编写 gRPC 健康检查一无所知。

【问题讨论】:

    标签: grpc grpc-python


    【解决方案1】:

    accompanying unit tests 是一个很好的参考。

            def start_server(self, non_blocking=False, thread_pool=None):
                self._thread_pool = thread_pool
                self._servicer = health.HealthServicer(
                    experimental_non_blocking=non_blocking,
                    experimental_thread_pool=thread_pool)
                self._servicer.set('', health_pb2.HealthCheckResponse.SERVING)
                self._servicer.set(_SERVING_SERVICE,
                                   health_pb2.HealthCheckResponse.SERVING)
                self._servicer.set(_UNKNOWN_SERVICE,
                                   health_pb2.HealthCheckResponse.UNKNOWN)
                self._servicer.set(_NOT_SERVING_SERVICE,
                                   health_pb2.HealthCheckResponse.NOT_SERVING)
                self._server = test_common.test_server()
                port = self._server.add_insecure_port('[::]:0')
                health_pb2_grpc.add_HealthServicer_to_server(
                    self._servicer, self._server)
                self._server.start()
    

    在您的应用程序服务器的主服务程序类中保留对健康服务程序的引用。然后,在适当的时候调用set() 方法,例如当启动完成或进入无法处理请求的状态时。但是请注意,这利用了一些实验性功能,以确保附加的健康服务程序不会导致应用程序级请求被饿死。

    【讨论】:

    • 似乎测试或获取健康状态的唯一方法是调用 gRPC 客户端。这很糟糕,因为我试图在系统希望在 docker 容器上调用 curl 命令以检查状态的环境中执行此操作。如果您必须自己手动设置状态(健康服务商不会自动检查关联服务商的状态),那么使用其中任何一个有什么意义?
    • 首先,这个问题询问 gRPC 健康检查。 HTTP 健康检查是一种不同的东西,可以很容易地添加到同样运行 gRPC 服务器的应用程序中。但这样做超出了 gRPC 库的范围。如果您正在寻找一种非常便宜的活性检查,许多系统也支持TCP-level liveness checks。
    • 您可以使用不同级别的粒度进行健康检查。在进程启动时报告健康并不是特别可靠,但可以通过在启动时将状态设置为SERVING 的单行来实现。如果服务器启动后有一段时间应用程序需要进行预处理。或者,如果应用程序在其下游依赖项之一不起作用时根本无法运行,那么能够自己设置该状态至关重要。
    • 公平积分。我找到了一个我可能会使用的 grpcurl 工具。感谢您的见解!
    【解决方案2】:

    我发现这个例子很有帮助: https://github.com/grpc/grpc/tree/master/examples/python/xds

    具体来说,server.py 提供了健康检查和反射的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2021-09-13
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多