Вы хотите, чтобы два действия в вашей системе (OP: работа в вашем виртуальном программном обеспечении; WDB: запись в базу данных) были атомарными (либо выполнялись, либо не выполнялись).Вид распределенной транзакции, но ваше виртуализированное программное обеспечение напрямую не поддерживает поведение с возможностью транзакций (без отката).Если бы вы могли сделать их частью какой-либо распределенной транзакционной системы, вам бы этого хотелось (см. , например, ), но это часто невозможно или нецелесообразно.Различные стратегии для достижения псевдотранзакционного поведения зависят от особенностей вашего сценария.Некоторые примеры:
- Открыть TX (транзакция в БД)
- WDB
- OP
- Если операция выполнена успешно, передайте TX, иначеоткат TX.
Возможно только в том случае, если то, что вы записываете в БД, не зависит от операции OP (маловероятно).
- OP1 (первая фаза операции:вы получаете результаты, но ничего не меняете)
- Open TX
- WDB
- OP2 (вторая фаза: вы изменяете виртуальную программу)
- Фиксация TX или откат
(шаги 4-5 можно переключать). Это будет реализация "Двухфазного принятия" для бедного человека.Это возможно, только если вы можете разделить свою деятельность на эти две фазы.
- Открыть TX
- Пустой WDB (записать фиктивный результат в БД)
- Откат TX
- OP
- WDB
Проверяет работоспособность БД, делая фиктивную запись перед попыткой реальной операции и записи.Выполнимо, но не надежно.
- OP
- WDB
- В случае неудачи: сохранить данные в необработанный файл, зарегистрировать ошибку, отправить письмо в ИТ,включите красные огни.
Звучит жалко ... но иногда это единственный возможный способ.