AWS负载均衡器连接与服务器发送的事件相结合

时间:2018-06-07 19:35:41

标签: amazon-web-services amazon-elb server-sent-events amazon-elastic-beanstalk

我们在经典负载均衡器后面的AWS Elastic Beanstalk中运行的Node.js服务中使用Server-Sent Events(SSE)。在负载均衡器中,我们已启用连接耗尽,超时时间为15分钟,因此当实例停止运行时,长时间运行的正在进行的请求有机会完成。但是,由于任何SSE连接也将被视为正在进行的请求,并且由于SSE的性质而无法自动完成,这意味着实例将始终需要整整15分钟才能停止服务。 / p>

为了解决这个问题,到目前为止我们已经考虑了以下几个选项:

  • 降低连接耗尽超时,可能会取消超时超时的某些正在进行的请求,
  • 在X分钟(X <15)之后关闭SSE连接,以便连接耗尽时间将限制为SSE连接的时间。这种方法的缺点是我们还在等待最大值。 X分钟,这意味着你想让X尽可能低,但是通过降低X太多我们实际上使用长轮询而不是SSE。

由于我们发现上述解决方案缺乏,我们正在寻找一种方法立即关闭所有SSE连接,只要从负载均衡器中删除实例,这样我们就不必每次发生这种情况都要等15分钟。

例如,如果实例在服务中断时可以订阅它,那将是理想的。不幸的是,到目前为止我们还没有找到这样的东西。

编辑:挑战在于确定负载均衡器何时将实例停止服务,以便我们可以关闭该实例的SSE连接。

编辑2:我们通过查看传入的请求解决了这个问题。一旦服务在一定时间内(例如60秒)检测到没有传入请求,它就知道它很可能被取消服务,因此它关闭所有SSE连接。最糟糕的情况是它实际上仍在使用中,但由于断开连接的SSE客户端会自动重新连接,这并不重要。

0 个答案:

没有答案