Распределенная транзакция с использованием веб-сервисов на разных платформах

можно ли добиться транзакционности с помощью веб-сервисов, реализованных на разных технологиях?

Например: давайте представим случай, когда мы хотим предложить комплексную услугу 2-х разных организаций, у каждой из которых уже есть свои разные системы, реализованные с использованием разных технологий и расположенные в разных странах. В организации A есть сервер Java, предоставляющий службы Rest, которые позволяют потребителям вставлять данные в таблицу, а затем в организации B есть сервер .Net, предоставляющий службы Rest, которые также позволяют потребителям вставлять данные в таблицу. Затем я хочу создать новый сервер для интеграции обеих этих служб в одну, что позволит потребителям вставлять данные в базы данных обеих организаций. Таким образом, с этого нового сервера я должен вызывать эти 2 оставшихся службы транзакционным способом (это означает, что обе организации будут вставлять или ни одна из них не вставит, если произойдет сбой, он будет откатываться).

Возможно ли добиться этого, даже если сервер 1 и сервер 2 реализованы с использованием разных технологий? Что, если бы было n серверов, реализованных на разных технологиях и предоставляющих услуги Rest?


person Santiago Hitta    schedule 01.12.2019    source источник


Ответы (1)


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

Взгляните на рабочий процесс Cadence, который упрощает реализацию Sagas. Вот пример.

person Maxim Fateev    schedule 02.12.2019
comment
Привет, Максим, спасибо за ответ, мой сценарий действительно представляет собой архитектуру микросервисов, я этого не заметил ... Теперь мои поиски в Google намного проще для сбора информации по этому вопросу. Я читал о вашем предложении использовать шаблон Saga, это хороший подход, однако я не уверен, что вы имеете в виду, когда невозможно иметь реальные транзакции в микросервисной архитектуре. Согласно некоторым статьям, протокол 2PC может работать и с микросервисами, просто он не рекомендуется из-за проблем с производительностью, но его можно реализовать. - person Santiago Hitta; 03.12.2019
comment
Действительно возможно реализовать распределенные транзакции. Но после этого я бы не стал называть архитектуру микросервисной архитектурой :). queue.acm.org/detail.cfm?id=3025012 - person Maxim Fateev; 04.12.2019