当前环境 我们使用WCF回调使用发布者/订阅者模型。我们在一台Web服务器上托管在IIS中的WCF服务。任何客户都可以通过调用服务方法订阅/取消订阅,我们分别使用字典中的客户端ID保存/删除回调地址,即
PrivateShared _currentSubscribers As New Dictionary(UShort,ICallbackService)()
Dictionary是静态成员,用于整个Web应用程序(在内存中不是持久的)
新环境 我们现在正在将我们的网站转移到新服务器。我们将有两台托管服务的服务器,其间有负载均衡器。
现在我们需要弄清楚我们将如何维护两台服务器上可用的用户列表。当然,在这种情况下,我们不能在内存字典中使用相同的内容。 我们正在寻找可以在服务器之间共享字典的任何方法。
我们尝试在db中保存,但它不可序列化或在其他服务器上可用。
我们在搜索上花了一些时间,但没有找到任何解决方案,我们可以在服务器之间共享回调地址。
有人可以指导我们如何实现这一目标吗?或我们可以使用的任何其他选项?
我非常感谢你的帮助。等待你的回应。
答案 0 :(得分:2)
解决方案的关键可能在客户端。
请注意,无论如何,您的客户应该知道您的连接可能随时被切断。因此,如果它处理这个问题,并且可以自动从中恢复,那么连接到N个服务器或1个服务器的服务器场没有问题,因为它根本不知道区别。
因此,您不需要将客户端连接到两个(即“所有”)服务器,它只需要保持与其中一个服务器的连接。这当然意味着,假设人们使用负载平衡来平衡负载而不是简单地提供冗余,那么您就有机会让一台机器服务超过一半的活动连接。
但是,你的客户再也不知道。因此,您的服务器可能会经常切断电源线,如果没有别的办法,可以让客户端(可能)从一台服务器跳到另一台服务器,不断扩散负载。无论如何,您的客户应该能够恢复连接,再次,它不会知道差异。
答案 1 :(得分:1)
您无法在服务器之间共享该回调词典。每个服务器必须有自己的字典维护自己的客户端,因此必须使用负载平衡算法和会话关联(粘性会话)。该算法将所有请求从单个客户端转发到同一服务器。