РЕАЛІЗАЦІЯ SAGA З ВИКОРИСТАННЯМ ШАБЛОНУ OUTBOX
DOI:
https://doi.org/10.32782/tnv-tech.2023.4.4Ключові слова:
мікросервісна архітектура, розподілені транзакції, узгодженість даних, шаблон проєктування Saga, Transitional Outbox, Event SourcingАнотація
Мікросервісна архітектура надає ряд переваг, до яких можна віднести гнучкість, стійкість до відмов, можливість повторного використання функціональності. Але розподілений характер таких систем призводить до складності управління взаємодією та узгодженістю даних між різними сервісами. В додатках необхідно виконувати транзакції, які охоплюють кілька сервісів, кожен з яких має власну базу даних і є ізольованим. Для управління транзакціями в системах з мікросервісною архітектурою використовується шаблон проєктування Saga, який розподілену транзакцію представляє як послідовність локальних транзакцій. Зазвичай локальна транзакція оновлює базу даних сервісу та публікує повідомлення, щоб ініціювати наступну локальну транзакцію у сазі. Оновлення бази даних та публікація повідомлення повинні виконуватися атомарно, інакше система може перейти у неузгоджений стан. Це може статися, якщо, наприклад, після фіксації змін у базі даних повідомлення не буде надіслано через збій в мережі. Для забезпечення узгодженості даних можна використовувати шаблони Transitional Outbox або Event Sourcing. Стаття присвячена дослідженню особливостей застосування цих шаблонів при реалізації розподілених транзакцій за допомогою Saga, виявленню переваг та недоліків кожного з підходів. Event Sourcing дозволяє зберігати історію зміни стану об’єкта, відтворювати події для відновлення його стану на певний момент часу. Недоліком цього шаблону є те, що він складний у вивченні. У разі використання складних запитів до бази даних у поєднанні з Event Sourcing слід використовувати патерн CQRS. В роботі представлена архітектура додатку на основі мікросервісів, побудована з використанням шаблонів проєктування Saga та Outbox. Сервіси взаємодіють між собою асинхронно за допомогою Apache Kafka та конекторів Debezium, які відстежують зміни в базах даних та надсилають повідомлення в брокер. Сервіси отримують повідомлення з брокеру відразу після публікації.
Посилання
Richardson Ch. Microservices Patterns. Manning Publications, 2019. 520 p.
Бугаєва І.Г., Розум М.В., Ларін Д.Г., Ткаченко М.Г. Управління транзакціями в мікросервісній архітектурі. Таврійський науковий вісник. Серія: Технічні науки. 2023. № 2. С. 3–13.
Richardson, Ch. Pattern: Transactional outbox. URL: https:// microservices.io/patterns/data/transactional-outbox.html (дата звернення: 05.06.2023).
Fowler M. Event Sourcing. 2005. URL: https://martinfowler.com/eaaDev/EventSourcing.html (дата звернення: 20.06.2023).
Overeem, M., Spoor, M., Jansen, S. The dark side of event sourcing: Managing data conversion. IEEE 24th International Conference on Software Analysis, Evolution and Reengineering. 2017. DOI:10.1109/SANER. 2017.7884621
Overeem M., Spoor M., Jansen S., Brinkkemper S. An empirical characterization of event sourced systems and their schema evolution – Lessons from industry. The Journal of Systems and Software. 2021. Vol. 178. DOI:10.1016/j.jss.2021.110970.
Scott D., Gamov V., Klein D. Kafka in Action. Manning Publications, 2022. 272 p.
Debezium. URL: https://debezium.io/ (дата звернення: 11.07.2023).