Микросервис зависит от другого, чтобы сделать что-нибудь
В настоящее время я имею дело с микросервисами и столкнулся с несколькими вопросами (относительно отношений между службами), мне трудно найти хороший ответ / лучшие практики. Было бы здорово, если бы вы могли дать мне подсказку или совет, как бы вы справились с этим.
Поскольку эти вопросы не относятся к конкретному проекту, я постараюсь прояснить его на следующем примере:
Давайте предположим, что вы хотите создать своего рода обозреватель канала Youtube, который регистрирует различные виды мета-данных канала (видео, почасовые просмотры / подсчеты, на которые в настоящее время подписаны), которые импортируются за определенный промежуток времени.
Таким образом, приложение может предложить две основные функции, каждая из которых должна формировать микросервис:
- Добавить / удалить каналы для просмотра (=> менеджер службы)
- импортировать информацию (=> служба импорта)
Оба сервиса предоставляют API для связи друг с другом.
Служба менеджера связана с базой данных, которая содержит каналы, которые необходимо просмотреть, с их основной информацией (имя, контакт, ...) и каналы, на которые эти наблюдаемые каналы в настоящее время подписаны, тогда как служба импорта имеет базу данных, содержащую вся остальная информация, ориентированная на временные ряды (видео, почасовые просмотры / подсчет).
Чтобы добавить канал, необходимо указать только URL канала. Вся остальная информация (имя, контакт, ...) добавляется службой импорта (но также может быть изменена пользователем).
В целом, служба импорта абсолютно бесполезна без информации службы менеджера, но также служба менеджера может показывать информацию о канале, указанную пользователем (наихудший случай: только URL канала), если служба импорта не доступна. Всего: они сильно зависят друг от друга.
Так много для общей архитектуры.
Проблема, с которой я столкнулся, заключается в том, что служба импорта в значительной степени зависит от данных в базе данных службы менеджера и также изменяет ее:
- Было бы неплохо разделить базу данных службы менеджера между этими двумя службами или она должна быть доступна только с помощью предоставленного API?
- Неважно, является ли база данных общей или нет: обеим службам нужны классы моделей для канала. Это нормально, чтобы поделиться этим?
- Является ли эта архитектура вообще хорошей идеей (если предположить, что есть и другие сервисы, которым нужна базовая информация о канале)?
1 ответ
Когда два микросервиса тесно связаны, я бы посоветовал тщательно обдумать их объединение. Почему вы все равно хотите иметь микросервисы? Это большой проект, который должен сильно расти, возможно, над ним работают независимые команды? Не пользуйтесь микросервисами только потому, что они крутые, а из-за необходимости. В относительно небольшом проекте для одного человека я бы вообще не советовал использовать микросервисы.
Я хотел бы прочитать на microservices.io о том, когда использовать архитектуру микросервиса и где разделить.