Следует ли предоставлять микросервису доступ к базе данных?

Добрый вечер! <br/> Я работаю над проектированием учебного приложения, основанного на микросервисной архитектуре, и у меня возникла следующая ситуация: я намерен реализовать API Gateway, который будет выполнять авторизацию и аутентификацию пользователей. Все запросы будут проходить через сервис Auth, где будет происходить аутентификация с использованием JWT-токенов. Ниже представлена диаграмма: <br/>
  • 31 декабря 2024 г. 14:33
Ответы на вопрос 2
Добрый вечер!

Вопрос о том, следует ли предоставлять микросервису доступ к базе данных, является одним из ключевых в проектировании микросервисной архитектуры. Вот основные соображения, которые могут помочь вам принять решение:

### Преимущества доступа микросервиса к базе данных:

1. **Изолированность**: Каждый микросервис может иметь свою собственную базу данных, что означает, что изменения в одном сервисе не затрагивают другие.

2. **Производительность**: Микросервис может работать быстрее, если у него есть прямой доступ к своим данным, так как это может сократить количество сетевых вызовов.

3. **Гибкость**: Это позволяет микросервису легко управлять схемой и структурой данных по своему усмотрению.

### Недостатки доступа микросервиса к базе данных:

1. **Сложность управления транзакциями**: Если несколько микросервисов работают с одной и той же базой данных, управление транзакциями может стать сложным. Прямой доступ может привести к проблемам с целостностью данных.

2. **Связанность**: Если сервисы зависят от одной и той же базы данных, это может усложнить процесс развертывания и масштабирования, нарушая принцип независимости микросервисов.

3. **Безопасность**: Рассмотрение того, кто и как получает доступ к данным, может усложниться. Неправильные настройки могут привести к уязвимостям.

### Рекомендации:

- **Изолированные базы данных**: Если возможно, согласуйте, чтобы каждый микросервис имел свою собственную базу данных. Это сделает ваши сервисы более независимыми и упростит управление.

- **API как интерфейс**: Разработайте API, через который ваши микросервисы могут взаимодействовать с данными. Это может уменьшить связанность и повысить безопасность.

- **Используйте API Gateway**: Ваша архитектура с API Gateway может быть полезна для обработки запросов и обеспечения доступа к микросервисам, включая обработку аутентификации и авторизации.

- **Управляйте данными через сервисы**: Подумайте о введении сервисов, которые будут отвечать за конкретные области данных, и к которым другие микросервисы будут обращаться через API.

Таким образом, доступ к базе данных микросервиса имеет свои плюсы и минусы. Рекомендуется строить архитектуру с учетом независимости микросервисов и управления данными через четко определенные интерфейсы.
Судя по твоей схеме, у тебя все запросы через этот api gateway идут. Почему сервис который работает с api, стучится в auth, он авторизовывается? <br/> <br/> Но и в целом эта система говно с одной точкой для всех запросов. <br/> - Если дудосеры дудосят шлюз - всё страдать будет: <br/> <b>client =&gt; gateway =&gt; auth | payment | other | ...</b> ❌ <br/> <br/> Твой шлюз это по сути <a href="https://en.wikipedia.org/wiki/Facade_pattern#:~:text=The%20facade%20pattern%20(also%20spelled,complex%20underlying%20or%20structural%20code." rel="nofollow">фасад</a> , так используй разные фасады для разных задач, чтобы твою единственную точку входа до смерти не долбили: <br/> <b>client =&gt; auth gateway =&gt; auth1 | auth2 | auth3 | ...</b> ✅ <br/> <b>client =&gt; payments gateway =&gt; payment1 | payment2 | shipment | ...</b> ✅ <br/> <b>payment1 | payment2 | shipment | other | ... =&gt; db gateway =&gt; dbservice1 | dbservice2 | dbservice3 | ...</b> ✅ <br/> <br/> Если ты собрался выдавать каждому встречному-поперечному сервису доступ к базе - то тебе не нужны микросервисы. <br/> Если используешь их, то твой "dbservice" должен уметь множится. <br/> <br/> В зависимости от нагрузки на каждый отдельный экземпляр "dbservice", "db gateway" - должен решить, куда направить запрос.
Похожие вопросы