我当前的开发项目有两个方面。首先,有一个公共网站,外部用户可以出于各种目的提交和更新信息。然后,此信息将保存到托管设施的本地 SQL Server 中。

第二个方面是内部应用程序,员工用它来管理这些相同的记录(概念上)并提供状态更新、批准等。该应用程序托管在公司防火墙内,并具有自己的本地 SQL Server 数据库。

这两个网络通过硬件 VPN 解决方案连接,这很不错,但显然不是世界上最快的解决方案。

这两个数据库很相似,并且共享许多相同的表,但它们并不是 100% 相同。两侧的许多表格都非常特定于内部或外部应用程序。

所以问题是:当用户在公共网站上更新信息或提交记录时,如何将该数据传输到内部应用程序的数据库以便内部人员管理?反之亦然...您如何将员工所做的更新推送回网站?

值得一提的是,这些更新越“实时”越好。并不是说它必须是即时的,只是相当快。

到目前为止,我考虑过使用以下类型的方法:

  1. 双向复制
  2. 双方的 Web 服务接口都带有代码,用于同步所做的更改(实时)。
  3. 两侧的 Web 服务接口带有代码以异步同步更改(使用排队机制)。

有什么建议吗?以前有人遇到过这个问题吗?您是否想出了适合您的解决方案?

有帮助吗?

解决方案

我相信这是一个非常常见的集成场景。就我个人而言,我认为使用队列的异步消息传递解决方案是理想的。

您应该能够实现近乎实时的同步,而无需复制等开销或复杂性。

同步 Web 服务并不理想,因为您的代码必须非常复杂才能处理故障场景。当一个系统重新启动而另一个系统继续发布更改时会发生什么情况?发送系统是否超时?它与这些有什么关系?除非您准备好丢失数据,否则您将需要某种事务队列(如 MSMQ)来接收更改通知并确保它们到达其他系统。如果任一系统出现故障,更改(作为消息传递)只会累积,一旦建立连接,重新启动的服务器将处理所有排队的消息并赶上,从而使系统完整性更容易实现。

如果您使用 .NET(特别是如果您想使用 MSMQ),有一些开源工具确实可以让您轻松做到这一点。

  1. 服务总线 通过乌迪·达汉
  2. 轨道交通 作者:德鲁·塞勒斯和克里斯·帕特森

还有商业产品,如果您正在考虑商业选择,请参阅 这里 查看 .NET 上的选项列表。当然,WCF 可以使用 MSMQ 绑定执行异步消息传递,但是像 nServiceBus 或 MassTransit 这样的工具将为您提供非常简单的发送/接收或发布/订阅 API,这将使您的需求变得非常简单。

如果您使用 Java,有许多开源服务总线实现可以使这种双向异步消息传递变得轻而易举,例如 Mule 或可能只是 ActiveMQ。

您可能还想考虑阅读 乌迪·达汉的博客,听他的一些播客。这里有 还有一些好资源 让您开始。

其他提示

我正在完成一个类似的项目,除了我有多个站点需要通过慢速连接(在某些情况下是拨号)保持同步。

首先你需要跟踪更改,如果你可以使用SQL 2008(如果2Gb限制不是问题,即使是Express版本也足够了)这将大大减轻痛苦,只需在数据库和每个表上打开更改跟踪即可。我们在总部使用具有扩展架构的 SQL Server 2008,在每个站点使用具有数据子集和有限架构的 SQL Express 2008。

其次你需要跟踪你的变化, 同步服务 效果很好,并且支持使用 WCF 网关进入主数据库。在此示例中,您将需要使用 使用 SQL Express 客户端同步 以示例作为起点,请注意它基于 SQL 2005,因此您需要更新它才能利用 2008 中的更改跟踪功能。默认情况下,同步服务在客户端上使用 SQL CE,我确信这对于您的情况来说还不够。您需要一个在 Web 服务器上运行的服务,该服务定期(如果需要,可以每 10 秒一次)运行 Synchronize() 方法。这将告诉您的主数据库有关本地所做的更改,然后向服务器询问在那里所做的所有更改。您可以设置 get 和 apply SQL 代码来调用存储过程,并且可以添加事件处理程序来处理冲突(例如客户端更新与服务器更新)并在每一端相应地解决它们。

我们有一个商店作为客户端,三个商店连接到同一个VPN
其中两个商店有一台计算机作为该商店的“服务器”运行,第三个商店有“主数据库”
为了将所有内容同步到主服务器,我们没有最好的解决方案,但它可以工作:有一台专用 PC 运行一个应用程序,该应用程序检查两个存储的每个表中每条记录的时间戳,如果与上次同步时不同,则会复制结果
请注意,这是双向的。IE。如果您更新主数据库中的产品,此更改将传播到其他两个商店。如果您在其中一家商店有新订单,它将被传输到“主人”。
通过一些优化,您可以在大约 20 分钟内让所有商店同步

最近,我在 SQL Server Service Broker 方面取得了很大的成功,它提供了开箱即用的可靠、持久的异步消息传递,并且几乎没有实现困难。

  • 它的设置速度很快,随着您了解更多,您可以使用一些更高级的功能。
  • 大多数人不知道的是,它也是桌面版本的一部分,因此可以用作工作站消息系统
  • 如果您拥有现有的 T-SQL 技能,则可以利用它们,因为读取和写入消息的所有代码都是在 SQL 中完成的
  • 速度快得令人眼花缭乱

它是 SQL Server 中一个被严重低估的部分,非常值得一看。

我想说,只需将 pub 数据库输入表中的数据复制到私有数据库挂起表中即可。然后,一旦您更新私有端的数据,请将其复制到公共端。如果您没有更新公共端的任何复制数据,那么它应该是一个相当简单的事务复制解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top