Як вирішується проблема узгодженості даних між сервісами?
У мікросервісній архітектурі немає єдиної бази даних, тому узгодженість даних забезпечується на рівні обміну подіями і координації дій між сервісами. Мета - досягти логічної узгодженості без глобальних транзакцій.
1. Event-driven підхід (подієва узгодженість)
Кожен сервіс публікує події про свої зміни, наприклад «Замовлення створено», «Оплату підтверджено». Інші сервіси підписуються і оновлюють свої дані. Так досягається eventual consistency - дані стають узгодженими з невеликою затримкою.
Приклад: Сервіс замовлень створює замовлення → публікує подію → сервіс доставки додає запис у себе.
2. Сага (Saga pattern)
Велика бізнес-операція розбивається на серію локальних кроків у різних сервісах. Якщо один із кроків не вдався, виконуються компенсаційні дії для відкату попередніх змін.
Приклад:
- Створити замовлення →
- Зарезервувати товар →
- Списати оплату. Якщо крок 3 не пройшов - відкочуються кроки 1-2 («скасувати замовлення», «звільнити товар»).
3. Outbox pattern
Щоб подія не загубилася між записом у базу і відправленням у брокер, сервіс спершу записує її в outbox-таблицю, а потім надійно публікує. Це запобігає розсинхронізації між локальними і зовнішніми змінами.
4. Ідемпотентність і ретраї
Кожен сервіс повинен уміти безпечно повторювати операції. Навіть якщо подія чи запит прийде двічі, результат залишиться коректним.
5. Моніторинг і контроль консистентності
Використовуються фонові перевірки (reconciliation jobs), які періодично звіряють дані між сервісами і виправляють розбіжності.
Підсумок:
У мікросервісах узгодженість досягається не спільною транзакцією, а керуванням подіями, сагами та ідемпотентними операціями. Це дає гнучкість і відмовостійкість, але вимагає продуманої логіки взаємодії між сервісами.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.