【问题标题】:Architecture for SignalR (WebSockets) connection in stateless scalable web application无状态可扩展 Web 应用程序中 SignalR (WebSockets) 连接的体系结构
【发布时间】:2018-01-28 16:13:03
【问题描述】:

我将制作一个无状态、可扩展的 Web 应用程序。这是我的第二天性,不是问题。

但是,这个将使用 SignalR,因此将与每个用户建立 WebSocket 连接。

假设我的 Web 应用程序扩展到 5 个不同的 Web 服务器,处理来自 5000 个并发用户的负载。这些用户将建立一个 WebSocket 连接,即使负载均衡器会确保负载分布在 5 个 Web 服务器之间,但每个用户都将连接到一个特定的 Web 服务器。

现在问题来了。如果发生事件并且我想将此事件发送给我的一位连接用户,我该怎么做?

用户可以连接到任何网络服务器,所以我想要么我需要一些数据库来跟踪哪些用户连接到了哪个网络服务器?或者我需要将所有消息发送到所有网络服务器,如果用户连接,它们会将消息传递给用户?

后者似乎不可扩展。第一个似乎是我必须做的,除非这里有人可以告诉我应对这一挑战的最佳实践方法。

【问题讨论】:

  • 你在the docs上没有找到有用的东西吗?
  • 我没有在文档中寻找这个。我只希望 SignalR 文档说明它本身是如何工作的,而不是在我描述的这种情况下如何使用它。
  • 好吧,我提到的链接显示了如何在您的场景中使用它。它描述了使用背板的整体架构。你读过吗?
  • 我很抱歉。我没有看到它是一个链接,我以为你只是问我是否在文档中作为一般查询查看过

标签: c# asp.net .net azure signalr


【解决方案1】:

您需要在应用程序中引入所谓的背板。背板基本上是应用程序中的一个额外消息传递层,它与 SignalR 集成并处理服务器群的分布式特性。

目前,您可以使用许多技术,我建议您看看 Redis,我已经设法在具有良好性能特征的大型项目中使用它:

https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-redis

【讨论】:

  • 谢谢。这个“背板”关键字似乎很有前途。但是,我没有在软件上下文中找到与此架构相关的任何资源。你能指出我正确的方向吗?
  • (关于用什么工具来临时存储信息,这个问题不是很重要,我目前对它的架构方面比较感兴趣)
  • 查看我在 cmets 中提供的链接。它描述了架构
  • 虽然这是一个正确的答案(我投了赞成票),但值得指出的是,除非他们真的做的不多,否则背板可能会为 5000 名用户带来困难。即测试它
  • 很抱歉没有正确地通过链接,我把注意力集中在“背板”上,它太宽泛了。非常感谢您!
猜你喜欢
  • 2012-04-04
  • 2018-04-07
  • 2011-04-07
  • 2011-02-22
  • 2011-04-20
  • 2014-02-09
  • 2010-10-29
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多