Примеры со сменой email-адреса некорректны, поскольку между выборкой и сохранением есть момент когда может произойти вставка данных из другого потока, проверка не сработает и получим двух пользователей с одинаковым email. Можно использовать pessimistic locking, но тогда это приведет к снижению производительности системы. Самый разумный вариант это уникальный индекс в хранилище данных по email, никаких проверок, меняем email и сохраняемся. Также обычно такие штуки
await this.repository.findAll()
возвращают не данные, а курсор по которому можно итерироваться и никаких утечек по памяти не будет.
Вообще про трилемму это явно взято из блога Владимира Хорикова. У автора есть неплохие статьи, но эта точно не из их числа.
Да, сам использую saga orchestration. Но в русскоязычных докладах на тему "Как мы внедрили микросервисы" — это почти всегда не так и даже интересно как и зачем люди пытаются изобрести ACID в распределенной системе и почему уверены, что их решение действительно работает верно.
Примеры со сменой email-адреса некорректны, поскольку между выборкой и сохранением есть момент когда может произойти вставка данных из другого потока, проверка не сработает и получим двух пользователей с одинаковым email. Можно использовать pessimistic locking, но тогда это приведет к снижению производительности системы. Самый разумный вариант это уникальный индекс в хранилище данных по email, никаких проверок, меняем email и сохраняемся. Также обычно такие штуки
возвращают не данные, а курсор по которому можно итерироваться и никаких утечек по памяти не будет.
Вообще про трилемму это явно взято из блога Владимира Хорикова. У автора есть неплохие статьи, но эта точно не из их числа.
Да, сам использую saga orchestration. Но в русскоязычных докладах на тему "Как мы внедрили микросервисы" — это почти всегда не так и даже интересно как и зачем люди пытаются изобрести ACID в распределенной системе и почему уверены, что их решение действительно работает верно.
Спасибо за ответ. Может быть подумаете о статье на эту тему? Было бы интересно почитать.
Как поддерживаете консистентность данных если бизнес-операция охватывает несколько микросервисов?