可伸缩后端中的服务器发送事件

时间:2015-05-26 12:44:42

标签: java heroku scalability server-sent-events

我在Heroku中部署了一个Java Web应用程序。

现在,我想更改后端,以便它可以通知连接的用户有关特定事件的信息。我以为我可以使用服务器发送的事件来做到这一点,我认为它的工作方式如下:

  1. 当用户打开前端时,它将为服务器发送的事件建立连接。
  2. 当后端收到这样的请求时,它会创建这样的连接(基本上是EventOutput)并将其与用户的ID一起存储在某处(让我们说一下记忆中的Map
  3. 当新事件发生时,后端会找到需要通知的用户,根据他的ID检索他的连接并向他发送通知。
  4. 当只有一台机器处理请求时,这很好用。

    当我想扩展我的应用并引入更多机器时,我的问题就出现了。然后,我不能再将这些连接存储在一台机器的内存中,我需要使用一些集中位置。但是集中位置需要序列化/反序列化连接,这意味着它不再是相同的连接了!

    你通常如何做这样的事情?

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用会话亲和力(例如粘性会话),这将确保单个会话的请求始终是"总是"路由到同一个过程(我说"总是"因为有一些警告)。您可以通过运行以下命令启用此功能:

$ heroku labs:enable http-session-affinity

通过这种方式,您可以将内容保留在内存中,而不必序列化会话。

以下是一篇更详细地介绍此功能的文章:https://blog.heroku.com/archives/2015/4/28/introducing_session_affinity