我当前的开发项目有两个方面。首先,有一个公共网站,外部用户可以出于各种目的提交和更新信息。然后,此信息将保存到托管设施的本地 SQL Server 中。
第二个方面是内部应用程序,员工使用它来管理这些相同的记录(概念上)并提供状态更新、批准等。该应用程序托管在企业防火墙内,并具有自己的本地 SQL Server 数据库。
这两个网络通过硬件 VPN 解决方案连接,这很不错,但显然不是世界上最快的解决方案。
这两个数据库很相似,并且共享许多相同的表,但它们并不是 100% 相同。两侧的许多表格都非常特定于内部或外部应用程序。
那么问题是:当用户在公共网站上更新信息或提交记录时,如何将该数据传输到内部应用程序的数据库以便内部人员管理?反之亦然……您如何将员工所做的更新推送回网站?
值得一提的是,这些更新越“实时”越好。并不是说它必须是即时的,只是相当快。
到目前为止,我考虑过使用以下类型的方法:
- 双向复制
- 双方的 Web 服务接口都带有代码,用于同步所做的更改(实时)。
- 两侧的 Web 服务接口带有代码以异步同步更改(使用排队机制)。
有什么建议吗?以前有人遇到过这个问题吗?您是否想出了适合您的解决方案?
我相信这是一个非常常见的集成场景。就我个人而言,我认为使用队列的异步消息传递解决方案是理想的。
您应该能够实现近乎实时的同步,而无需复制等开销或复杂性。
同步 Web 服务并不理想,因为您的代码必须非常复杂才能处理故障场景。当一个系统重新启动而另一个系统继续发布更改时会发生什么情况?发送系统是否超时?它与这些有什么关系?除非您准备好丢失数据,否则您将需要某种事务队列(如 MSMQ)来接收更改通知并确保它们到达其他系统。如果任一系统出现故障,更改(作为消息传递)只会累积,一旦建立连接,重新启动的服务器将处理所有排队的消息并赶上,从而使系统完整性更容易实现。
如果您使用 .NET(特别是如果您想使用 MSMQ),有一些开源工具确实可以让您轻松做到这一点。
-
服务总线 http://www.nservicebus.com/通过乌迪·达汉
-
轨道交通 http://code.google.com/p/masstransit/作者:德鲁·塞勒斯和克里斯·帕特森
还有商业产品,如果您正在考虑商业选择,请参阅here http://www.thefreakparade.com/2008/06/esbs-for-the-microsoft-net-platform/查看 .NET 上的选项列表。当然,WCF 可以使用 MSMQ 绑定执行异步消息传递,但是像 nServiceBus 或 MassTransit 这样的工具将为您提供非常简单的发送/接收或发布/订阅 API,这将使您的需求变得非常简单。
如果您使用 Java,有许多开源服务总线实现可以使这种双向异步消息传递变得轻而易举,例如 Mule 或可能只是 ActiveMQ。
您可能还想考虑阅读乌迪·达汉 http://www.udidahan.com/的博客,听他的一些播客。这里有还有一些好资源 https://stackoverflow.com/questions/13211/good-reads-for-distributed-systems#13244让您开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)