【发布时间】:2012-12-08 12:50:22
【问题描述】:
我们正在为 SignalR 应用实施横向扩展,并试图避免集群中的单点故障。因此,需要不止一个 Redis 消息总线服务器。
实现 Redis Sentinel 的问题在于,在故障转移时,客户端需要连接到新的端点 [地址],这将需要重新启动 SignalR 应用程序(Redis 端点在 Application_Start() 中定义)。
不是一个选项。
我正在尝试了解 Booksleeve 是否/如何提供帮助,并希望有人对此进行解释。
问题是我们只能为消息总线定义一个端点。硬件解决方案目前不是一种选择。
SignalR 应用程序是否会连接到维护主/从列表的 Booksleeve 包装器?
使用 Azure 服务总线的另一个选项。但是,Wiring Up the Windows Azure Service Bus Provider 的instructions 表明这仍然存在问题:
请注意,此网站是一个以 Azure Web 角色运行的 ASP.NET 站点。 从 1.0alpha2 开始,AzureWebSites 中存在一些错误,因此 ServiceBus 横向扩展方案效果不佳。我们正在努力 为将来解决这个问题
【问题讨论】:
-
您能否对您的 Redis 端点进行 DNS 解析?因此,您只需要在故障转移后更改您的指针记录(而不是重新启动应用程序池)。
-
您尝试阅读代码了吗? github.com/SignalR/SignalR/blob/master/src/…。这是一个单一的文件,所以并不难理解。
-
该错误警告不是特定于 Azure 网站(而不是云服务)吗?我就是这么读的。
-
我现在检查了 SignalR 代码,它没有使用
ConnectionUtils... 所以 目前 SignalR 只会连接到单个节点。请注意,在 redis-cluster 到来之前,多个 redis 节点并不是严格意义上的“横向扩展方案”,因为任何组只能有一个主节点。当然,您可以使用从属设备进行查询(只读)和发布/订阅监听。 -
@dfowler 不过,它确实提出了一些有趣的观点;这里有其他的连接创建选项可以提供更大的灵活性(请参阅答案)
标签: redis signalr azureservicebus booksleeve