Всем привет.
У нас в проекте используется микро-сервисная архитектура (по крайней мере мы так думаем). Есть приложение по управлению некими сущностями. Для примера возьмем список фильмов. Общение между приложениями происходит как синхронно (HTTP, RPC) так и асинхронном с использованием событий и команд.
Допустим у нас есть микро-сервисы выполняющие следующий функционал:
- API по управлению фильмами
- Оплата
- Выдача видеопотока
- Формирование рекомендаций
Каждому микро-сервису необходима разная информация по фильму.
Сейчас у нас сделано так что при создании/изменении/ удалении фильма формируется событие и через брокер сообщений рассылается другим микро-сервисам. Те берут необходимые данные сохраняют в локальную бд и работают с ними. С этим возможна куча проблем в виде несогласованности данных и т. п.
Я рассматривал как вариант положить информацию о фильме в кеш (Redis, Memcached) и получать ее от туда. Тут проблема в том что теряется гибкость - при изменении структуры хранения информации о фильме придется обновлять всех консьюмеров этих данных.
Ну и 3 вариант который вижу синхронно запрашивать у API по управлению фильмами.
Какие есть еще варианты для правильной организации управления подобными данными?