2016-12-19 12 views
5

Я хотел бы понять, будут ли возможности распределенных транзакций работать для моего приложения, если я установлю com.atomikos.icatch.enable_logging=false. Правильно ли я понимаю, что восстановление транзакций имеет значение в тех случаях, когда был сбой, и мы хотим полностью перезапустить ту же транзакцию. Выполняется ли восстановление в рамках одной и той же распределенной транзакции?Журналы транзакций Atomikos com.atomikos.icatch.enable_logging = false

Мое приложение терпимо к отказам в терминах, что отказ всегда можно просто перезапустить с самого начала с помощью новой транзакции. Означает ли это, что в моем случае это нормально, чтобы установить com.atomikos.icatch.enable_logging=false

Может ли com.atomikos.icatch.enable_logging=false привести к несогласованному состоянию базы данных, если не все участники распределенных транзакций были совершены?

Update я был вызван после того, как эта проблема, чтобы узнать немного больше о внутренностях распределенных транзакций, которые я описал здесь: How would you tune Distributed (XA) transaction for performance?

ответ

0

Ну, мне потребовалось некоторое время, чтобы понять это. Ответ НЕТ, если мы отключим com.atomikos.icatch.enable_logging, мы не можем гарантировать согласованность транзакций, и мы можем получить некоторые вещи, заработанные в одной базе данных и не совершаемые в другом.

В транзакции XA у нас есть две основные роли. Координатор транзакций и участник транзакции. Существует два транзакционных журнала. Транзакционный журнал Cooridnator, с одной стороны, и транзакционный журнал участника.

Что происходит, так это то, что сначала все участники транзакции XA регистрируются самим координатором. XA_START затем следует фаза записи, в которой все операторы sql отправляются по направлению к различным участникам. X_END отмечает конец этого процесса и момент, когда вызывается при фиксации перспективы приложения.

На этом этапе Координатор транзакций осуществляет контроль за кулисами. Сообщение PREPARE отправляется каждому участнику. Каждый участник отвечает READ TO COMMIT или ABORT, сообщение принудительно записывается в журналы. Если все участники ответят COMMIT. Каждому участнику отправляется запрос на фиксацию.

Это означает, что если произошел сбой, и транзакционное протоколирование отключено со стороны координатора, которое является Atomicos, это вероятность того, что одному участнику удастся выполнить COMMIT, а другой участник не сможет выполнить.

В основном, com.atomikos.icatch.enable_logging является обязательным, если вы хотите гарантировать согласованное состояние.

0

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

+0

Я не думаю, что это достаточно подробно. То же самое я могу прочитать на веб-сайте atomikos. –

+0

Точно. Вот почему веб-сайт является авторитетным источником :-) –

+1

Отлично, почему бы вам не объяснить, пожалуйста, подробное описание транзакции :) Использование и алгоритм, если вы делаете это 100 баллов, являются вашими :) –