Проектирование сервиса FAIL, если есть внешняя интеграция - PullRequest
2 голосов
/ 14 января 2020

У меня есть служба с интеграцией внешних служб 3.party.

Моя служба делает что-то в моей базе данных.

Если в моей службе возникает исключение, то я не вызываю службу 3.party Это нормально.

Но если служба 3.party создает исключение. Я уже выполнил операции над своей базой данных!

Для решения этой проблемы я изменил дизайн сервиса для использования БД. Все операции с БД начинаются с Транзакции, и я жду, пока не проверит ответ службы 3.party. И затем я фиксирую эту транзакцию или откат для отмены локальных изменений. Это легко, но.

При транзакционной операции я блокирую ресурсы до конца sh ответа службы 3.party. Я думаю, что этот дизайн значительно влияет на производительность сервиса. Один вызов ожидает другого вызова до тех пор, пока последняя транзакция не завершится sh или не произойдет откат.

Есть ли у вас передовые знания в этой области?

Мое решение Использовать операции базы данных без транзакций И ​​если 3.party вызов создает исключение. Вызовите другую операцию базы данных для возврата к старым значениям базы данных. Это немного сложно, поэтому найдите, какие таблицы действуют, какие изменения работают и т. Д. c .. Так скучно.

Но я вижу, что есть только один путь. Или я пропустил какую-то часть: / Спасибо.

  • Точка обслуживания
  • Создание транзакции
  • Операции с локальной базой данных
  • Вызов службы интеграции 3.party (ожидание) Потерянное время здесь и блокировка транзакции все еще существует
  • Фиксация или откат транзакции
...