Управление транзакциями в SOA
Сервисы SOA должны быть автономными сервисами, но на практике нам необходимо организовать эти сервисы для выполнения некоторого бизнеса / процесса.
Теперь, чтобы процесс и данные были согласованными, мы должны убедиться, что все службы выполнены или ни одна из них не выполнена.
Один из способов реализации - реализовать логику "компенсации" для каждой службы и вызвать ее, если в процессе / предыдущей услуге возникла какая-то проблема.
Есть ли лучший способ или какой-нибудь стандарт сделать то же самое, например, вынуть контекст транзакции и реализовать что-то вроде двухфазного принятия?
2 ответа
Это зависит от услуг, к которым вы обращаетесь. В некоторых у вас не будет возможности произвести компенсацию, в то время как в других у вас не будет возможности контролировать транзакцию, а в других у вас не будет никакой альтернативы.
Оба обработчика компенсации и двухфазная фиксация (транзакции XA) являются допустимыми механизмами управления транзакциями.
Рассмотрите услуги, к которым вы подключаетесь, и какую поддержку они предлагают. Например, если у вас есть большое количество веб-служб, у вас может не быть контроля транзакций, который вам даст XA, но у них может быть механизм для отмены операции.
В идеальном мире у вас будет двухфазная фиксация, которая уменьшит требуемую компенсацию, но интерфейсы - это интерфейсы, и, как и между людьми, связь будет меняться, и не существует единого идеального решения.
При разработке интерфейсов учитывайте управление транзакциями и восстановление компенсации как часть дизайна интерфейса, и вас будут хвалить (или, по крайней мере, не критиковать) за создание полезного интерфейса.
Вы можете использовать обработчики ошибок и обработчики компенсации, определенные в спецификации WS-BPEL 2.0 (которая является стандартом, который предлагает способ описания и организации взаимодействий между веб-службами), чтобы отделить бизнес-логику от логики компенсации стандартным способом.
- Ссылка на обработку ошибок в спецификации BPEL
- Сообщение в блоге о том, как написать обработчик компенсации в BPEL