NodeJS gRPC客户端无需重试即可获得UNAVAILABLE

时间:2018-03-20 15:44:02

标签: node.js grpc

我有NodeJs生成的客户端,它通过AWS Load Balancer连接到GRPC后端。客户端创建为单例。问题是经过一段时间后,它的连接变为UNAVAILABLE,下一次GRPC调用因TCP套接字写入错误而失败。

NodeJS客户端是否支持GRPC重试策略?我该如何启用它?

我们正在考虑创建自己的重试逻辑,但首先我们要确保它已经没有在gRPC客户端中实现。 谢谢大家!

1 个答案:

答案 0 :(得分:1)

我们目前正在gRPC中实施重试支持,按照以下设计:

https://github.com/grpc/proposal/blob/master/A6-client-retries.md

不幸的是,实施相当复杂,需要一段时间才能完成,因此尚未准备好使用。在此期间,您可能需要在应用程序中实现自己的重试代码。

关于您的环境,人们在使用gRPC与AWS时看到的一个常见问题是DNS无法提供一种在服务器和服务器时主动通知客户端的方法。重新启动时,IP地址会发生变化。如果这是你所看到的问题,那么你可以尝试一些可能的事情:

  • 尝试使用round_robin负载平衡策略,这样如果您与一个后端失去联系,您仍然可以在客户端尝试重新联系已关闭的后端时与其他人交谈。您可以通过将第三个参数中的通道参数{"grpc.lb_policy_name": "round_robin"}传递给客户端构造函数来完成此操作。

  • 另一种方法是设置一个可以动态地向客户端发送新IP地址的后备负载均衡器。有关此体系结构的更多信息,请参阅https://github.com/grpc/grpc/blob/master/doc/load-balancing.md

祝你好运!