Зачем нам нужны шаблоны, такие как 2PC или SAGA, для выполнения последовательных транзакций между микросервисами?

Проблема, с которой я столкнулся, заключается в том, почему нам даже нужен такой шаблон, как SAGA (асинхронный) или 2PC (синхронный), для выполнения транзакционной межсервисной связи между микросервисами? .Потому что мы можем добиться этого с помощью сервера имен. Я имею в виду, давайте подумаем, если микросервис выходит из строя, когда он находится в середине транзакционного вызова, поэтому не может ли сервер имен перенаправить этот запрос на другой экземпляр требуемого микросервиса? Так что тогда не будет недоступности среди микросервисов.

Пример: A и B - это микросервисы, все эти микросервисы зарегистрированы на сервере имен, таком как Eureka, A необходимо B для завершения транзакции, выполняя межсервисную связь. Но неожиданно B вышел из строя. Таким образом, сервер имен может направить запрос A другому экземпляру B no. Так где же эта недоступность. Итак, зачем нам эти паттерны?


person Hasindu Dahanayake    schedule 05.04.2021    source источник


Ответы (1)


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

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

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

person JArgente    schedule 05.04.2021
comment
Какие проблемы решает SAGA или 2PC, а не решает обеспечение высокой доступности. - person Hasindu Dahanayake; 05.04.2021
comment
Как я сказал ранее, они обеспечивают согласованность данных больше, чем высокую доступность. Они гарантируют, что все операции выполнены или ни одна из них. Это то же самое, что и транзакции в традиционной СУБД, они не обеспечивают высокую доступность, но обеспечивают согласованность данных при внесении нескольких изменений. - person JArgente; 05.04.2021
comment
@JAgrente не может этого достичь с помощью традиционного подхода. Я имею в виду, что я уже упоминал, что мы можем иметь сервер имен для обеспечения высокой доступности за счет автоматической маршрутизации к доступным экземплярам. Итак, мы не можем откатить транзакции на основе ответов http. Пример: в случае сбоя микросервиса B он даст статус ответа 500 для A. - person Hasindu Dahanayake; 05.04.2021
comment
@JAgrenete Я думаю, согласно вашему предложению, следование SAGA упростит задачу, вместо того, чтобы следовать традиционному подходу, как я предлагал. Я прав? - person Hasindu Dahanayake; 05.04.2021
comment
Но вы не можете откатить транзакцию, которая уже была зафиксирована в службе A, потому что есть ошибка в службе B, единственный способ отменить фиксацию в службе A - это определить компенсирующие действия или другие механизмы, которые предоставляет шаблон саги. - person JArgente; 05.04.2021
comment
@JAgrente Я могу просто удалить изменения, внесенные в базу данных микросервиса A, если статус равен 500. - person Hasindu Dahanayake; 05.04.2021
comment
действия такого рода представляют собой образец саги, но в более общем виде. Например, возможно, что изменения, внесенные в A, являются не вставкой, а обновлением, и возможно, что распределенная транзакция включает в себя 5 различных служб, и если третье соединение не работает, это подразумевает отмену изменений, сделанных вторым ... и т. Д. - person JArgente; 05.04.2021
comment
Спасибо за подробное объяснение. - person Hasindu Dahanayake; 05.04.2021