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