web-dev-qa-db-fra.com

Conception de bases de données pour l'architecture de microservices

Je prévois d'utiliser l'architecture des microservices pour la mise en œuvre de notre site Web. Je voulais savoir s'il est juste de partager des bases de données entre services ou s'il est préférable d'avoir une base de données distincte pour chaque service. À cet égard, puis-je envisager d'avoir une base de données commune pour tous les services ou viole-t-elle l'essence même de l'architecture des microservices?

15
user2288991

Les microservices proposent découplage. Vous devez décomposer votre application en domaines indépendants. Chaque domaine peut avoir une base de données. Si d'autres États membres ont besoin d'accéder à des données appartenant à d'autres microservices, ils doivent communiquer sur le réseau.

Si vous pensez qu'il y a trop de services dépendants et que les appels réseau sont trop importants, vous pouvez définir un domaine en regroupant les services dépendants.

Par exemple - Supposons que je dispose d'un service d'évaluation de test en ligne où un responsable d'une entreprise peut publier des tests et voir les résultats de tous les employés de son service.

Mes microservices pour ce scénario seraient:

Conception initiale

  1. Service utilisateur: pour les informations de connexion et d'utilisateur.
  2. Test Service: Service d'évaluation des tests.
  3. Employé: gère les détails de l'employé
  4. Entreprise: Poignées organisation CRUD
  5. Département: Département poignées CRUD

Après l'avoir décomposé, il semble que l'employé, le service de l'organisation et du département passerait trop d'appels réseau/API car ils dépendent étroitement les uns des autres. Il est donc préférable de les regrouper.

Conception mise à jour

  1. Service utilisateur: pour les informations de connexion et d'utilisateur.
  2. Test Service: Service d'évaluation des tests
  3. Organisation: Gère les opérations liées à l'entreprise, aux employés et au service.

Chaque service peut avoir sa propre base de données et peut être déployé indépendamment. Le service utilisateur et de test peut utiliser mongoDB ou tout service NoSql DB et organisation peut utiliser RDBMS.

J'espère que cela t'aides.

31
Nitish Bhardwaj

Si vous partagez la même base de données, vous perdez deux des avantages les plus importants des microservices: forte cohésion et couplage lâche (page 25) .

Vous pouvez partager la même base de données si vous ne partagez pas les tables qu'elle contient. Par exemple, microservice1 les usages table1_1 et table_1_2 et microservice2 les usages table2_1 et table2_2. Quand je dis utilisations, je veux dire lire et écrire. Un microservice ne lit pas et n'écrit pas sur les tables de l'autre.

15
Constantin Galbenu