2017-04-19 42 views
1

我对(g)rpc有点新,而且我不太了解这个概念。我们在一个Kubernetes集群中有一组NodeJS服务器,通过grpc相互通信。 rpc接口针对客户端新贵上的每台服务器进行设置。gRPC在服务器重启时丢失连接

我们最近发现,重新启动服务器后,其客户端失去与该服务器的连接。也就是说,在该服务器重新启动之后,以前工作的rpc对服务器的调用不再起作用。直到我们以正确的顺序重新启动服务器,它才会重新启动。

我虽然是通过一个地址(主机+端口)告诉客户端,这里是一个你可以调用的过程。并且在调用该过程时,地址被调用,在服务器上处理并返回。如果这样工作,客户端不会在乎rpc调用之间服务器是否重新启动了0次或100次。

但是通过上面对客户端rpc调用失败/超时的描述,似乎有一个类似于套接字的连接,其中在两个部分都在运行时建立和维护连接。

它是如何工作的,是否需要对我的客户端上的rpc服务器执行健康检查,以便在服务器重新启动时重新建立接口?

感谢您的时间。

+0

你使用的是什么版本的gRPC? – murgatroid99

+0

你看到什么错误让你认为是这种情况?有时gRPC记录警告,但保持正常工作。请在问题中更具描述性和具体性,以便人们可以提供帮助。 –

回答

0

https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md表明通道从“transient_failure”进入“连接”(再回到“准备就绪”)最终,但由于指数退避的,这可能需要很长的时间。

https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md描述了一种叫做MAX_BACKOFF的东西,但看起来并不像它已经实现。

如果您使用的gRPC版本包含https://github.com/aisotton/grpc/commit/24e69bf02afb0f4abdd637d1513e93e5aa227e7e,那么grpc.max_reconnect_backoff_ms可能会限制重新连接尝试之间的时间。

相关问题