Что происходит при сбое отката в протоколе двухфазной фиксации

Я пытаюсь реализовать транзакции для распределенных служб в java поверх REST. У меня есть несколько вопросов.

  1. Что происходит, когда ресурсы отвечают утвердительно, а на этапе 2 не удается зафиксировать?
  2. Я пытался искать, но, к сожалению, не смог найти правильного ответа на вопрос, что происходит, когда откат не работает в протоколе 2PC. Я знаю, что это блокирующий протокол, и он ждет ответа бесконечное время, но что происходит в реальном сценарии?
  3. каковы другие протоколы для распределенного управления транзакциями?
  4. Я читал о JTA для реализации транзакций, но есть ли другая реализация, которую можно использовать для реализации транзакций? Любой ответ будет полезен. Заранее спасибо.

person Vickey    schedule 26.06.2012    source источник


Ответы (1)


У меня нет ответов на эти вопросы, но я создал специальный метод для своего конкретного случая. Поэтому публикуйте здесь, если кому-то нужны транзакции для тех же случаев.

Поскольку в моем случае текущие записи в базе данных (или индексаторе, который также работает как служба) не изменились, а были только новые записи в системе в разных местах, поэтому ложные сбои не были вредными, а ложные успехи были. Итак, для моего конкретного случая я следовал следующей стратегии:

я. Все ресурсы добавляют идентификатор транзакции со строкой в ​​базе данных. На первом этапе, когда координатор запрашивает ресурсы, все ресурсы вносят записи в базу данных с идентификатором транзакции, сгенерированным координатором.

II. После фазы 1, когда все ресурсы отвечают утвердительно, что означает, что ресурсы внесли изменения в базу данных, координатор делает запись в своем собственном журнале об успешной транзакции и передает ее ресурсам. Все ресурсы делают статус транзакции успешным в строке вставленных данных.

III. Служба работает непрерывно для поиска в базе данных и исправления статуса транзакции, запрашивая статус у координатора. Если нет записи или записи об ошибке, транзакция возвращает статус ошибки, и он обновляется в службе. При выборке данных, если в базе данных есть запись с меткой сбоя, он всегда проверяет статус транзакции с координатором, если нет записи об ошибке, он фильтрует результаты. Следовательно, не предоставляются те записи данных, для которых нет информации или имеется информация об отказе. Так что результат всегда одинаков.

Эта стратегия обеспечивает атомарность для моего случая.

person Vickey    schedule 09.07.2012
comment
Конечно, использование любой распределенной транзакции поверх REST требовало очень больших усилий, которые я мог обойти, изучив свои требования. - person Vickey; 09.07.2012