【问题标题】:SQL Server Service Broker -- Suggestion for Handling Two-Phase Commit Between SQL Server InstancesSQL Server Service Broker——处理SQL Server实例间两阶段提交的建议
【发布时间】:2011-05-17 15:28:48
【问题描述】:

我们正在探索在两个不同 SQL Server 实例之间进行通信的不同方法。所需的工作流程之一是向“远程”端发送某种消息,请求删除记录。当该系统完成删除时,它保持其事务打开并向发起者发送响应,然后发起者删除其相应的记录,提交其事务,然后将消息发送回“远程”端,告诉它,最后,也提交删除。

这是一个穷人对两阶段提交的近似。关于 SQL Server Service Broker 是否可以合理干净地处理这种类型的场景,该部门正在进行一场宗教辩论。任何人都可以阐明它是否可以吗?有类似工作流程的经验吗?考虑到 SQL Server 实例位于单独的非域计算机上,是否有更好的机制来实现这一点?

编辑:澄清一下,我们不能使用分布式事务,因为网络安全性既严密又有些随意。我们不允许进行可以实现这一点的配置。

【问题讨论】:

    标签: sql-server sql-server-2008 transactions service-broker


    【解决方案1】:

    除非我误解了要求,否则我会说这是 Service Broker 的完美工作。 Service Broker 使您无需使用分布式事务和 2PC。您使用 Service Broker 所做的是将问题减少到服务器之间的本地事务和事务消息传递。

    在您的特定情况下,其中一台服务器会删除其记录,然后(作为同一事务的一部分)向另一台服务器发送一条消息,请求删除相应的记录。将消息排入队列后,第一个服务器可以提交事务并忘记整个事情,而无需等待与第二个服务器同步。 Service Broker 保证一旦提交消息入队,消息将以事务方式传递到目的地,然后目的地可以将其记录作为接收消息的同一事务的一部分删除,从而确保消息处理和数据更改是原子的。

    【讨论】:

    • 我完全同意这一点。您应该考虑的唯一一件事是消息交换不是即时的,而是像任何基于 SOA 的系统一样,当它发生时就会发生。如果这不是一个选项,那么 Service Broker 将不适合您。
    • 我会接受这个答案,因为我认为您是正确的,Service Broker 的保证交付消除了对 2PC 机制的需要。我没有完全按照你说的那样想。谢谢!
    【解决方案2】:

    您是否尝试过使用分布式事务?

    它会做你需要的一切,但每台服务器都需要作为链接服务器相互连接。

    【讨论】:

    • 谢谢!这是一个很好的建议,但它对我们不起作用,因为由于网络安全问题,我们无法使用链接服务器。
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 2013-09-07
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多