【问题标题】:Maintaining Node.js sessions between multiple instances on Azure在 Azure 上的多个实例之间维护 Node.js 会话
【发布时间】:2013-05-04 23:58:09
【问题描述】:

我有 3 个在 Windows Azure 上运行的 Node.js 辅助角色实例。我正在尝试维护所有实例之间的会话。

Azure 队列似乎是推荐的方法,但我如何确保所有实例都接收会话,因为一旦单个实例出队,队列就会删除会话?

Azure 表不太适合我的应用程序,因为会话过于频繁且不需要存储超过 10 秒。

【问题讨论】:

    标签: node.js azure queue


    【解决方案1】:

    队列不是会话状态的好机制;它用于消息传递。一旦一个实例读取队列消息,当特定角色实例正在处理该消息时,它就不再可见。另外:当消息完成后你会怎么处理它?更新它然后让它再次可见?问题是您无法选择要阅读的“会话”。这是一个几乎先进先出的队列(未正确处理的消息可能会重新出现)。它不像键/值存储。

    要创建可访问的会话存储库,您可以利用 Azure 的角色内(或专用角色)缓存,它是跨角色实例的分布式缓存。您也可以使用表存储 - 只是简单的键/值类型的读/写。并且 Table Storage 包含在 node.js Azure SDK 中。

    也就是说:让我们走这里的缓存路线。由于您的会话是短暂的,并且(我猜)不会占用太多内存,您可以从角色内缓存开始(缓存与您的节点代码共享工作角色 RAM,占记忆)。缓存也兼容 memcache,很容易从节点应用程序访问。

    如果您查看this answer,我会显示访问缓存的位置。您需要以这种方式设置缓存,还需要通过添加一个名为memcache_default 的内部端点来设置memcache 服务器网关。然后,将您的 memcache 客户端类指向内部端点。完成。

    完整的说明(以及有关 memcache 网关与客户端 shim 的详细信息,您在设置专用缓存角色时会使用)是 here。如果使用专用缓存,您会发现说明略有不同,因为建议您在节点应用的工作角色中使用客户端 shim。

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 2011-04-12
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2013-03-22
      • 1970-01-01
      • 2020-03-14
      相关资源
      最近更新 更多