У меня есть монолитное приложение c, которое в настоящее время использует базу данных PostgreSQL, и схемы настроены так, как вы ожидаете для большинства реляционных баз данных, с различными табличными данными, связанными с пользователем через FK на user_id
. .
Я пытаюсь узнать больше о микросервисах, пытаюсь перенести мой python API на микросервисную архитектуру. У меня есть разумное понимание того, как я собираюсь разбить более крупное приложение на более мелкие части, однако я не совсем понимаю, как я должен иметь дело с данными.
Я понимаю, что одна большая БД противоречит общим принципам проектирования микросервисов, но мне не ясно, какой будет альтернатива.
Больше всего меня беспокоит каскадирование отдельных баз данных, в которых будут храниться данные микросервиса. В простом rdb я могу просто каскадно удалять, и DB будет обрабатывать работу по различным таблицам. В случае микросервисов, как это будет работать? Нужна ли мне отдельная служба, которая обрабатывает удаление пользовательских данных из других баз данных службы?
Я не совсем понимаю, как перенести традиционное приложение с реляционной БД в архитектуру микросервиса?
РЕДАКТИРОВАТЬ:
Чтобы уточнить - конкретная c архитектурная / проектная проблема, с которой я сталкиваюсь, заключается в следующем:
Я разделил свое приложение на несколько микросервисов. По моему мнению, все еще реляционные:
Геолокация - сервис, который проверяет данные геометрии, записи в PostGIS и возвращает определенную информацию. Основная цель - записать местоположение конкретного пользователя для последующего обращения к нему
Изображение - простой сервис загрузки для загрузки изображений и хранения метаданных в БД.
Load-Image - Простой сервис, который возвращает случайный набор изображений на основе таких параметров, как местоположение, и данные профиля пользователя, такие как возраст, пол и т. д. c
профиль - сервис, который просто управляет данными пользователя, такими как возраст, пол, et c
Обычно эти три элемента имеют таблицу каждый в большем дБ, а не свои отдельные дб. Фильтрация изображений, скажем, по местоположению и возрасту - это очень простой JOIN и фильтр.
Как что-то подобное будет работать в микросервисной архитектуре? Если данные полностью хранятся в разных БД, как бы мне настроить logi c для фильтрации данных? Я мог бы дублировать данные, которые не часто меняются, например информацию о профиле, и добавить их в документ MongoDB, который будет содержать данные изображений, включая user_id и данные профиля - однако данные о местоположении могут регулярно меняться, и постоянные обновления не кажутся практичными.
Какой будет лучший подход? Или я должен придерживаться общей СУБД только для тех немногих служб?