环境:.NET Framework 4.8后端。SignalR用于某些消息传递。
**问题:**该应用程序在单个服务器上运行,需要横向扩展。单点故障也会对可用性造成极大影响。需要更高的性能与可用性。
**可能的解决方案:**使用Redis背板。这允许多个服务器通过Redis背板进行订阅/发布,至少可以通过这种方式进行水平扩展。
**解决方案的问题:**如果我说错了请纠正我:如果所有的服务器都在一个Redis背板上运行,那么单点故障的问题仍然存在,而且在未来,单个背板的性能可能会耗尽。
**问题:**Redis背板如何向外扩展?我如何处理多个背板并确保它们的数据保持同步?
https://learn.microsoft.com/en-us/aspnet/core/signalr/redis-backplane“*Redis集群是一种通过使用多个Redis服务器来实现高可用性的方法。集群不是官方支持的,但它可能会起作用 *。”
https://learn.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-redis“SignalR在Redis上的横向扩展不支持Redis集群。”
SignalR和多个Redis背板一起使用会有什么问题吗?如果这是一个糟糕的主意,有什么其他的选择可以取代Redis或SignalR?
1条答案
按热度按时间o75abkj41#
SignalR for .NET Framework没有贬值。如果你想“面向未来”你的解决方案,我建议切换到SignalR for .NET核心。核心也支持Azure背板,但不再支持SQL背板。
一种方法是让每台服务器监视Redis背板是否是我们的,如果不是,就切换到另一台。在我的实现中,每台SignalR服务器通过背板向其他服务器发送消息,这样它们就知道背板上有多少台服务器,背板是否正常工作。