1

我有一个正在工作的 Silverlight/WCF 应用程序,我需要开始考虑缩放。当然,扩展的一个明显目标是 Azure。

该应用程序的关键架构特性是 2-10 个 Silverlight 客户端将加入给定的“房间”(使用双工 Net.TCP 连接),然后这些客户端中的任何一个都可以发送消息(例如,聊天消息),然后需要使用底层双工 WCF 连接将其实时推送到连接到同一房间的每个其他客户端。

现在,WCF 服务的工作方式基本上是在内存中保存会话列表和它们关联的房间,以便当来自一个会话的消息进入时,它可以自动将消息发送给每个会话会议室。

这适用于单个 WCF 服务器实例,但如果您需要扩展它以使多个 WCF 实例都在运行,它会变得复杂。当然,如果您使用网络层负载平衡,您通常会发现房间中只有一些成员在您所在的同一台服务器上,这意味着当需要向所有这些成员推送消息时,实际上只有其中一些会收到通知。

除了 Azure,我一直在想我会通过某种应用层负载平衡来处理它。例如,每个客户端下载 Silverlight 应用程序的 Web 服务器可能会执行原始的循环排序负载平衡,即“好的,房间 x 中的每个人,您使用 WCF 实例 1。房间 y 中的每个人,您使用WCF 实例 2。” 之类的东西。

所以我有两个问题:

(1) 有没有其他更好的方法来构建它,以便能够使用网络层负载平衡,而不需要让应用程序了解底层基础设施?

(2) 如果我必须进行应用层负载均衡,那么在 Azure 中处理此问题的最佳方法是什么?我是否必须使用 IAAS(完整的 VM),或者有没有办法使用 PAAS(工作角色)来做到这一点?我的理解是,不可能独立处理工人角色,这将使基于角色的方法变得困难,如果不是不可能的话。

4

1 回答 1

0

由 Azure 服务总线提供支持的 SignalR 可能适合您。 http://vasters.com/clemensv/2012/02/13/SignalR+Powered+By+Service+Bus.aspx

于 2012-08-04T01:31:23.013 回答