Компонент SQL Server Service Broker - предложение для обработки двухэтапной фиксации между экземплярами SQL Server - PullRequest
2 голосов
/ 17 мая 2011

Мы исследуем разные подходы для связи между двумя разными экземплярами SQL Server. Одним из желаемых рабочих процессов является отправка какого-либо сообщения «удаленной» стороне с запросом, скажем, об удалении записи. Когда эта система завершает удаление, она удерживает свою транзакцию открытой и отправляет ответ инициатору, который затем удаляет соответствующую запись, фиксирует свою транзакцию, а затем отправляет сообщение обратно на «удаленную» сторону, сообщая, наконец, совершить удаление на своей стороне.

Это приближение бедного человека к двухфазной фиксации. В отделе ведутся религиозные дебаты о том, может ли SQL Server Service Broker достаточно разумно обрабатывать сценарии такого типа. Может ли кто-нибудь пролить свет на это? Есть опыт работы с подобными типами рабочих процессов? Есть ли лучший механизм, который я должен рассмотреть для достижения этой цели, учитывая, что экземпляры SQL Server находятся на отдельных компьютерах, не входящих в домен?

Редактировать: чтобы уточнить, мы не можем использовать распределенные транзакции из-за того, что сетевая безопасность является как жесткой, так и несколько произвольной. Нам не разрешена конфигурация, которая сделала бы это возможным.

Ответы [ 2 ]

5 голосов
/ 22 мая 2011

Если я неправильно понимаю требования, я бы сказал, что это идеальная работа для Service Broker. Service Broker освобождает вас от необходимости использования распределенных транзакций и 2PC. То, что вы делаете с помощью Service Broker, сводит проблему к локальным транзакциям и транзакционному обмену сообщениями между серверами.

В вашем конкретном случае один из серверов удалит свою запись, а затем (в рамках той же транзакции) отправит сообщение другому серверу с просьбой удалить соответствующую запись. После постановки в очередь сообщения первый сервер может зафиксировать транзакцию и полностью забыть об этом, не дожидаясь синхронизации со вторым сервером. Компонент Service Broker гарантирует, что после фиксации сообщения оно будет транзакционно доставлено адресату, который затем может удалить свою запись как часть той же транзакции, в которой он получил сообщение, что обеспечит обработку сообщения и изменения данных. атомные.

1 голос
/ 17 мая 2011

Вы пытались использовать распределенную транзакцию?

Он будет делать все, что вам нужно, но каждый сервер должен будет соединяться друг с другом как связанный сервер.

...