PG Saga: зависимые изменения данных в нескольких сервисах без двухфазных коммитов и синхронных зависимостейАрхитектуры, масштабируемость
Доклад принят в программу конференции
Константин Евтеев
X5 FoodTech
Главный архитектор X5 FoodTech.
EX DBA Unit Leader Avito.
Активно участвует в жизни PostgreSQL community.
https://www.facebook.com/evteev.k.s
Тезисы
История про опыт Avito в решении одного из вызовов микросервисной архитектуры - реализации бизнес-транзакций с соблюдением консистентности данных между сервисами при использовании архитектурного паттерна Database per Service.
После разделения приложения на несколько сервисов (как следствие, у каждого сервиса своя база данных) уже невозможно сделать все атомарно в 1 ACID-транзакции. Это можно реализовать 2 способами:
- Two-phase commit 2PC;
- sagas.
Как раз мы выбрали паттерн саг - вот об этом я хочу рассказать, в том числе, как мы его реализовали (PG - потому что в нашей реализации в сервисе саг мы используем PostgreSQL).