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

Добрый вечер! <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, он авторизовывается? 

Но и в целом эта система говно с одной точкой для всех запросов.
- Если дудосеры дудосят шлюз - всё страдать будет:
client => gateway => auth | payment | other | ...

Твой шлюз это по сути фасад , так используй разные фасады для разных задач, чтобы твою единственную точку входа до смерти не долбили:
client => auth gateway => auth1 | auth2 | auth3 | ...
client => payments gateway => payment1 | payment2 | shipment | ...
payment1 | payment2 | shipment | other | ... => db gateway => dbservice1 | dbservice2 | dbservice3 | ...

Если ты собрался выдавать каждому встречному-поперечному сервису доступ к базе - то тебе не нужны микросервисы.
Если используешь их, то твой "dbservice" должен уметь множится.

В зависимости от нагрузки на каждый отдельный экземпляр "dbservice", "db gateway" - должен решить, куда направить запрос.
Похожие вопросы