我正在创建一个我想要放入云中的应用程序。该应用程序有一个主要功能。

它代表其他用户主持套接字CLIENT会话(想想iPhone的Beejive IM,它为客户端托管IM会话以维持这些IM网络的状态,允许客户端随意连接/断开连接,而不会破坏IM网络连接)。

现在,我现在计划的方式是,一个'工人实例'可能只能处理有限数量的客户端会话(假设参数为50,000)。那些会议将是非常长寿的工人任务。

我正试图解决的问题是,我有时需要对特定的客户端会话执行任务(例如:如果我需要断开客户端会话)。使用Azure,我是否可以排队一个较小的任务,只有托管该特定客户端会话的实例才能出列?

现在我正在考虑将GoGrid作为我的提供商,我使用Apache的Active Messaging Queue软件解决了这个问题。我的Web应用程序将分配给特定实例Id的“断开连接”任务排入队列。因此,每个客户端会话都分配给特定的实例ID。然后,该实例仅将分配给它的“断开连接”任务出列。

我想知道在Azure上做类似的事情是否可行,以及我通常如何做到这一点。我喜欢不必设置许多不同的VM来扩展的想法,而只是部署一个包。此外,最好使用Azure的队列,而不是集成第二方产品,如Apache ActiveMQ,甚至是MSMQ。

有帮助吗?

解决方案

在完成功能集,定价和许可条款之前,我非常关注在Azure上构建生产应用程序。对于初学者来说,你甚至不能在它和它之间进行成本比较。 GoGrid或EC2或Mosso。所以我不知道它怎么可能最终成为领跑者。此外,我们知道所有这些系统在成熟时都会出现故障。亚马逊的服务使用范围远远超过任何其他服务,并且已经公开提供多年。恕我直言,选择Azure是他们稳定下来的痛苦配方。

您是否考虑过亚马逊的简单队列服务进行排队?

其他提示

我认为你绝对可以使用Windows Azure。我的建议是为您正在跟踪的每个会话创建一个队列。然后将该会话的队列上的断开连接消息(例如)排入队列。处理该连接的工作者实例应该是唯一一个轮询该队列的实例,因此它应该处理在该连接上执行任务。

关于托管客户端连接的套接字连接的应用程序,我会仔细检查允许的内容,因为我认为只允许使用Azure建立HTTP和HTTPS连接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top