Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: VickeyОтветов: 1

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

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

resttransactionsjta

Ответы

Ответ 1 · рейтинг 1 · Vickey

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

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

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы