如何使两个相关但独立的系统保持同步?

2024-01-05

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

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

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

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

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

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

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

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

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


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

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

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

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

  1. 服务总线 http://www.nservicebus.com/通过乌迪·达汉
  2. 轨道交通 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(使用前将#替换为@)

如何使两个相关但独立的系统保持同步? 的相关文章

  • 使用 MS Access 链接表连接到 SQL Server 后端时是否可能发生 SQL 注入

    我一直在对此进行一些研究 但到目前为止还是一片空白 情况是这样的 我正在开发一个链接到 SQL Server 后端的 MS Access 前端 我在某种程度上使用 Access 中的链接表 表单访问 SQL DB 这样 当用户更新表单中的值
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • theta 连接、等值连接和自然连接之间的区别

    当涉及到 theta 连接 等值连接和自然连接时 我无法理解关系代数 有人可以帮助我更好地理解它吗 如果我在 theta 连接上使用 符号 它与使用自然连接完全相同吗 A 西塔加入允许任意比较关系 例如 An equijoin是使用相等运算
  • 本地 Postgres 实例和 Azure Cloud Postgres 实例之间的实时同步

    我需要在本地 postgresql 实例与云 postgresql 实例之间设置实时同步过程 请让我知道我可以通过哪些选项来实现它 我是否必须使用任何特定工具或者可以通过复制进行管理 请指教 使用 PgPool http www pgpoo
  • 在对象数组内的特定 JSON 值上创建索引

    假设我的表中有一个 varchar 列 其结构如下 Response DataArray Type Address Value 123 Fake St Type Name Value John Doe 我想在 DataArray 数组元素的
  • Apache ZooKeeper:写入如何工作

    Apache ZooKeeper 是一种针对小对象的高可用数据存储 ZooKeeper 集群由一些节点组成 这些节点都将整个数据集保存在内存中 该数据集被称为 始终一致 因此每个节点每次都有相同的数据 根据文档和博客文章 http www
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 从字符串中删除某些字符

    我正在尝试删除某些字符 目前我的输出如下cityname district但我想删除cityname SELECT Ort FROM dbo tblOrtsteileGeo WHERE GKZ 06440004 Output B dinge
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • 什么是“数据库实体”以及哪些类型的 DBMS 项目被视为实体? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • SSDT SQL Server 数据库项目中用于架构比较的命令行/API?

    在 Visual Studio 2012 中 我们有Schema Compare http msdn microsoft com en us library hh272690 28v vs 103 29 aspx in SSDT http
  • 表与多个表具有一对一的关系

    1 一个表可以和多个表建立一对一的关系吗 为了更清楚地说明 如果我想做插入 第一个表将受到影响并且 只有一张其他表会受到影响 2 如果是这样 主键将如何 3 另外 如果我想检索多条记录 查询会是什么样子 从这些表中 谢谢 一个表可以和多个表
  • 如何使用Java获取特定模式的所有表及其列?

    我有一个数据库架构 其名称为 Navid 这个模式中有很多表 当然每个表都有一些列 我需要的是一个java类 连接到我的数据库 有一个在所有表上循环的方法 2 1 有一个内部循环来定义表的所有列 制作创建表查询语句 我想在另一个数据库中创建
  • 如何获得一列中的最大数量?

    我一直在尝试找到一个如何获取列中最大数字的示例 我想做的是 找到 TABLE A 中的最大列数 点 列 例如 我想输出这个 MAX 数字
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 告诉我 SQL Server 全文搜索器疯了,不是我疯了

    我有一些客户具有用户正在搜索的特定地址 123 通用方式 数据库中有 5 行匹配 ResidentialAddress1 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC
  • 更改表添加列并在同一条件 IF 语句中更新新列

    我正在尝试添加列并在同一 if 语句中更新它 BEGIN TRAN IF NOT EXISTS SELECT 1 FROM sys columns WHERE Name N Code AND Object ID Object ID N Te
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v

随机推荐