2016-09-27 123 views
2

我们为MS SQL服务器数据库支持的应用程序提供多个负载均衡的IIS Web服务器。我们将应用配置信息存储在数据库中。在应用程序运行时,我经常更改配置,并且需要将更改传播到其他Web服务器。有没有一个好的方法来做到这一点?我一直在通过SignalR(提醒其他服务器发生更改并且应该刷新其配置)来提醒(但是SignalR并不总是可靠的,有时一台服务器不会收到该消息。有更好的解决方案吗?同步IIS Web服务器配置

谢谢

+0

你有没有试过Node.Js + Socket.IO? –

+1

@vishwaratna任何理由推荐一个完全不同于SignalR的技术堆栈,它可以在现有的技术堆栈中有效地做到同样的事情? –

回答

0

更新

现在我明白你需要传播的应用水平配置更改。

正如你所说,你可以使用SignalR。这将需要有一个中央服务器托管websocket连接,但有“即时”的好处。

或者,如果您的要求很简单,也许短期内存缓存就足够了。

如果它比这更复杂,我建议查看事件队列(MSMQ,RabbitMQ)。在此模型中,更改配置的实例将一个事件发布到队列中,以供后台线程上的其他实例使用。

原来的答案

Microsoft Web Deploy建做到这一点。它支持跨服务器同步站点,甚至是应用程序池设置和SSL证书。

IIS文档站点有一个与您的用例相关的特定页面:Synchronize IIS

有参与配置Web部署了很多,所以我不打算在这里解释这一切,但为后人方面的原因,命令同步本地站点到远程机器将是:

msdeploy.exe -verb:sync 
      -source:apphostconfig="Default Web Site" 
      -dest:apphostconfig="Default Web Site",computername=Server1 

作为一个完全替代的方法(该命令被多行用于可读性分割在)中,还可以使用一个“拉配置”系统等Powershell Desired State ConfigurationChef

+0

如果我理解正确,这将是同步初始服务器/ IIS配置,这是目前没有问题(虽然我需要看看)。我现在的问题是用户更改配置(存储在数据库中)并且接收到更改的服务器知道更改,但我需要警告其他Web服务器配置更改(无需重新启动IIS) – jwerfel

+0

@ jwerfel更新了我的答案。 –

+1

感谢@ richard-szalay的回应,现在我想我会坚持使用SignalR,因为我们只有几个Web服务器,但我会考虑使用更高级的偶数队列。 – jwerfel