DB design pour microservice architecture
J'ai l'intention d'utiliser les Microservices architecture pour la mise en œuvre de notre site web. Je voulais savoir si c'est juste pour partager des bases de données entre les services ou si il est préférable d'avoir une base de données distincte pour chaque service. À cet égard, je peux envisager d'avoir une base de données commune pour tous les services ou faut-il violer l'essence même de Microservice architecture ?
OriginalL'auteur user2288991 | 2017-04-15
Vous devez vous connecter pour publier un commentaire.
Microservices offre découplage. Vous devez briser votre demande dans des domaines indépendants. Chaque domaine peut avoir une DB. Dans le cas d'autres états membres, doit accéder aux données détenues par certains autres microservices, ils ont à communiquer sur le réseau.
Dans le cas où vous vous sentez qu'il ya trop dépendante de services et les appels réseau serait trop bien, alors vous pouvez définir un domaine, regroupant les services dépendants de l'ensemble.
Par exemple, Supposons que j'ai un Test en ligne du Service d'évaluation lorsqu'un dirigeant d'une société post-tests, et il peut afficher les résultats de tous les employés de son département.
Mon Microservices pour ce scénario serait:
Conception Initiale
Après la rupture vers le bas, semble être de l'employé, de l'Organisation et de service serait faire trop de réseau/appels d'API comme ils sont étroitement dépendants les uns des autres. Il est donc préférable de les regrouper.
Mise à jour de la conception
Chaque service peut avoir son propre DB et c'est indépendamment de déploiement. De l'utilisateur et de Test de Service peut utiliser mongoDB ou tout NoSql DB et de l'Organisation du service peuvent utiliser des SGBDR.
Espère que cette aide.
OriginalL'auteur Nitish Bhardwaj
Si vous partagez la même base de données, alors vous lâche deux des avantages les plus importants de microservices: forte cohésion et le couplage lâche (page 25).
Vous pouvez partager la même base de données si vous ne partagez pas les tables. Par exemple,
microservice1
utilisetable1_1
ettable_1_2
etmicroservice2
utilisetable2_1
ettable2_2
. Quand je dis que je veux dire lire et à écrire. Un microservice ne lisent pas et n'écrivent pas sur les autres tables.Microservices communiquer uniquement en utilisant le réseau
Vous pouvez regarder votre conception, trouver le délimitée contexte, de sorte que vous avez joliment sculpté verticales, de cette façon, vous ne devez pas les services de la croix limites pour faire des mises à jour de données (changements d'état), des lectures de données sont de moins en moins une préoccupation...
vous pouvez utiliser un courtier de message pour le partage de l'état, et chaque microservice enregistre cet état à ses propres (peut-être le service local de base de données (ou un cache).
OriginalL'auteur Constantin Galbenu