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?
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
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
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.
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.