我目前的开发项目有两个方面.首先,有一个公共网站,外部用户可以为各种目的提交和更新信息.然后,此信息将保存到colo工具的本地SQL Server.
第二个方面是员工用于管理相同记录(概念上)并提供状态更新,批准等的内部应用程序.此应用程序托管在具有自己的本地SQL Server数据库的公司防火墙内.
这两个网络通过硬件VPN解决方案连接,这是很好的,但显然不是世界上最快的东西.
这两个数据库是相似的,并且共享许多相同的表,但它们不是100%相同.双方的许多表都非常特定于内部或外部应用程序.
所以问题是:当用户更新他们的信息或在公共网站上提交记录时,如何将这些数据传输到内部应用程序的数据库,以便内部员工管理?反之亦然......你如何推动员工的更新回到网站?
值得一提的是,这些更新发生的"实时"越多越好.并不是说它必须是即时的,只是相当快.
到目前为止,我已经考虑过使用以下类型的方法:
双向复制
双方的Web服务接口都带有代码,以便在进行更改时实时同步(实时).
双方的Web服务接口使用代码来异步同步更改(使用排队机制).
有什么建议?有没有人遇到过这个问题?你有没有想出一个适合你的解决方案?
我相信这是一个非常常见的集成场景.就个人而言,我认为使用队列的异步消息传递解决方案是理想的.
您应该能够实现近乎实时的同步,而无需复制等开销或复杂性.
同步Web服务并不理想,因为您的代码必须非常复杂才能处理故障情况.当一个系统重新启动而另一个系统继续发布更改时会发生什么?发送系统是否会超时?它与那些有什么关系?除非您准备丢失数据,否则您需要某种事务性队列(如MSMQ)来接收更改通知,并确保它们到达其他系统.如果任一系统关闭,更改(作为消息传递)将只会累积,一旦建立连接,重新启动服务器将处理所有排队的消息并赶上,使系统完整性更容易实现.
如果您使用.NET,有一些开源工具可以让您轻松实现这一点(特别是如果您想使用MSMQ).
Udi Dahan的nServiceBus
Dru Sellers和Chris Patterson的大众运输
还有商业产品,如果您正在考虑商业选项,请参阅此处获取.NET选项列表.当然,WCF可以使用MSMQ绑定进行异步消息传递,但是像nServiceBus或MassTransit这样的工具将为您提供一个非常简单的发送/接收或发布/订阅API,这将使您的需求变得非常简单.
如果您正在使用Java,那么有许多开源服务总线实现可以使这种双向异步消息快速实现,如Mule或者只是ActiveMQ.
您可能还想考虑阅读Udi Dahan的博客,听他的一些播客.这里有一些更好的资源可以帮助您入门.