Как сделать двухфазную фиксацию между двумя микросервисами (Spring-boot)?

У меня есть два мико-сервера A и B, где они подключаются к отдельной базе данных. Из мико-серверов A мне нужно сохранять (сохранять) объекты как A, так и B в одной и той же передаче, как этого добиться.

Я использую микросервисы Spring с netflix-oss. Пожалуйста, дайте предложения о том, как лучше всего выполнить двухэтапную фиксацию.


person sathees    schedule 22.05.2017    source источник


Ответы (3)


вы не можете реализовать традиционную систему транзакций в микросервисах в распределенной среде.

Вы должны использовать метод Event Sourcing + CQRS, и, поскольку они являются атомарными, вы получите что-то вроде реализации транзакций или 2PC в монолитной системе.

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

Я предлагаю вам использовать Event Sourcing + CQRS и строковые события в хранилище событий, а затем попытаться достичь согласованности событий на основе теоремы CAP после передачи нескольких событий между микросервисом A и B и обновление состояний домена на каждом этапе.

Рекомендуется использовать брокер сообщений, такой как ActiveMQ, RabbitMQ или Kafka, для отправки событий, связанных с событиями, между различными микросервисами и связывания их в хранилище событий, такое как mysql или другие системы.

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

person Touraj Ebrahimi    schedule 22.05.2017
comment
Спасибо. попробую как вы советуете - person sathees; 22.05.2017
comment
Можете ли вы помочь мне с этой веткой, stackoverflow.com/questions/44063886/ - person sathees; 23.05.2017
comment
@sathees: я разработал проект Spring Boot с Event Sourcing + CQRS с Kafka. Репозиторий можно найти на Github github.com/pavankjadda/KafkaStream-CQRS-EventSourcing. . С минимальной модификацией вы можете использовать его для микросервисов. - person Pavan Jadda; 02.08.2018

Это проблема архитектуры (микросервисов). Spring boot или netflix-oss не предлагают прямого решения. Вы должны реализовать свое собственное решение. Проверьте с помощью архитектуры, управляемой событиями. Это может дать вам некоторые идеи.

person barbakini    schedule 22.05.2017