Skip to main content

Як вирішується проблема узгодженості даних між сервісами?

У мікросервісній архітектурі немає єдиної бази даних, тому узгодженість даних забезпечується на рівні обміну подіями і координації дій між сервісами. Мета - досягти логічної узгодженості без глобальних транзакцій.

1. Event-driven підхід (подієва узгодженість)

Кожен сервіс публікує події про свої зміни, наприклад «Замовлення створено», «Оплату підтверджено». Інші сервіси підписуються і оновлюють свої дані. Так досягається eventual consistency - дані стають узгодженими з невеликою затримкою.

Приклад: Сервіс замовлень створює замовлення → публікує подію → сервіс доставки додає запис у себе.

2. Сага (Saga pattern)

Велика бізнес-операція розбивається на серію локальних кроків у різних сервісах. Якщо один із кроків не вдався, виконуються компенсаційні дії для відкату попередніх змін.

Приклад:

  1. Створити замовлення →
  2. Зарезервувати товар →
  3. Списати оплату. Якщо крок 3 не пройшов - відкочуються кроки 1-2 («скасувати замовлення», «звільнити товар»).

3. Outbox pattern

Щоб подія не загубилася між записом у базу і відправленням у брокер, сервіс спершу записує її в outbox-таблицю, а потім надійно публікує. Це запобігає розсинхронізації між локальними і зовнішніми змінами.

4. Ідемпотентність і ретраї

Кожен сервіс повинен уміти безпечно повторювати операції. Навіть якщо подія чи запит прийде двічі, результат залишиться коректним.

5. Моніторинг і контроль консистентності

Використовуються фонові перевірки (reconciliation jobs), які періодично звіряють дані між сервісами і виправляють розбіжності.

Підсумок:

У мікросервісах узгодженість досягається не спільною транзакцією, а керуванням подіями, сагами та ідемпотентними операціями. Це дає гнучкість і відмовостійкість, але вимагає продуманої логіки взаємодії між сервісами.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.