2013-05-04 111 views
2

我有3个在Windows Azure上运行的Node.js工作者角色实例。我试图维护所有实例之间的会话。在Azure上维护多个实例之间的Node.js会话

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

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

回答

1

队列不是会话状态的好机制;它用于消息传递。一旦一个实例读取队列消息,当特定角色实例正在处理该消息时,该消息就不再可见。另外:如果完成这个消息,你会怎么做?更新它,然后再次使其可见?问题是你不能选择阅读哪个“会话”。这是一个几乎是FIFO的队列(未正确处理的消息可以重新出现)。它不像一个关键/价值商店。

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

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

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

完整说明(以及有关设置专用缓存角色时使用的memcache网关与客户端填​​充的详细信息)为here。如果使用专用缓存,您会看到指令略有不同,因为它建议您在节点应用程序的工作角色中使用客户端填充。