Управление транзакциями в SOA

Сервисы SOA должны быть автономными сервисами, но на практике нам необходимо организовать эти сервисы для выполнения некоторого бизнеса / процесса.

Теперь, чтобы процесс и данные были согласованными, мы должны убедиться, что все службы выполнены или ни одна из них не выполнена.

Один из способов реализации - реализовать логику "компенсации" для каждой службы и вызвать ее, если в процессе / предыдущей услуге возникла какая-то проблема.

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

2 ответа

Решение

Это зависит от услуг, к которым вы обращаетесь. В некоторых у вас не будет возможности произвести компенсацию, в то время как в других у вас не будет возможности контролировать транзакцию, а в других у вас не будет никакой альтернативы.

Оба обработчика компенсации и двухфазная фиксация (транзакции XA) являются допустимыми механизмами управления транзакциями.

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

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

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

Вы можете использовать обработчики ошибок и обработчики компенсации, определенные в спецификации WS-BPEL 2.0 (которая является стандартом, который предлагает способ описания и организации взаимодействий между веб-службами), чтобы отделить бизнес-логику от логики компенсации стандартным способом.

Другие вопросы по тегам