В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Выполнение бизнес-процесса состоит из одной или нескольких транзакций . Каждая транзакция может состоять из нескольких отдельных операций, но в целом она перемещает систему между последовательными состояниями.
Существуют две группы систем, в которых может применяться компенсационная транзакция :
1. В контексте базы данных это часто легко достигается с помощью транзакций и механизма фиксации / отката . [1] Компенсирующая логика транзакций может быть реализована как дополнительная поверх базы данных, поддерживающей фиксацию/откат. В этом случае мы можем уменьшить гранулярность бизнес-транзакций.
2. Для систем без механизма фиксации/отката можно отменить неудачную транзакцию с помощью компенсирующей транзакции , которая вернет систему в исходное состояние. Обычно это всего лишь обходной путь , который должен быть реализован вручную и не может гарантировать, что система всегда будет в конечном итоге в согласованном состоянии. Разработчику системы может потребоваться рассмотреть, что произойдет, если компенсирующая транзакция также даст сбой.
Компенсирующие транзакции также используются в случае, когда транзакция является долгоживущей (обычно называемой транзакциями Saga ), например, в бизнес-процессе, требующем ввода данных пользователем. В таких случаях данные будут зафиксированы в постоянном хранилище, но впоследствии может потребоваться их откат, возможно, из-за того, что пользователь решит отменить операцию. В отличие от обычных откатов, для отката долгоживущей транзакции и восстановления системы в исходное состояние обычно требуется определенная бизнес-логика. Этот тип транзакции отличается от распределенных транзакций (часто реализуемых с использованием протокола двухфазной фиксации ), поскольку, хотя оба типа транзакций могут привести к обновлению нескольких хранилищ данных, компенсирующие транзакции позволяют обновлениям охватывать длительный период времени.
Компенсационные транзакции часто проектируются в виде веб-сервисов , которые участвуют в выполнении бизнес-процессов, являющихся частью сервисно-ориентированного архитектурного решения.
Обратите внимание, что компенсационные транзакции не всегда работают. [2]