如何让Tensorflow服务安全重新启动而没有未完成的请求?

时间:2018-11-29 02:49:18

标签: tensorflow nginx tensorflow-serving

目标: 我想构建一个稳定的tensoflow预测服务。这意味着当我更新服务器时,该服务应始终可用且不会出现错误。

我使用Nginx来实现多个dockerized Tensorflow服务的负载平衡。 因为Nginx starts to support gRPC from1.13.10

我运行了多个由docker化的Tensorflow服务服务器,以服务于同一模型,并通过nginx服务器进行代理。我使用jmeter进行了压力测试,然后尝试重新启动容器。结果表明,客户可以享受连续不断的服务。

但是仍然存在一个问题。有时,当我重新启动容器时,一个请求可能会失败(只有一个请求,因为我的模型服务器同时处理一个请求)。我的客户报告如下:

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with: status = StatusCode.CANCELLED details = "Received http2 header with status: 502" debug_error_string = "{"created":"@1543454947.014000000","description":"Received http2 :status header with non-200 OK status","file":"src/core/ext/filters/http/client/http_client_filter.cc","file_line":100,"grpc_message":"Received http2 header with status: 502","grpc_status":1,"value":"502"}"

没有Nginx,我的客户报告:

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with: status = StatusCode.UNKNOWN details = "Stream removed" debug_error_string = "{"created":"@1543458849.986000000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1017,"grpc_message":"Stream removed","grpc_status":2}"

我猜是因为当我重新启动docker(在服务器内)时,它只是在处理一个请求。并且当其进程收到停止信号时,它立即关闭,而没有完成该请求的处理。

在我的HTTP Web服务器中,我始终总是立即关闭接收请求的服务器,但是只有在处理完所有请求之后才停止该过程。

Tensorflow服务可以支持此吗?还是如何设计所有结构来实现我想要的?

0 个答案:

没有答案