web-dev-qa-db-fra.com

Microservices avec la même base de données

J'ai une application monolithe sur un serveur et je veux la rompre en plusieursservices.

En raison de cela pour le moment, je dois utiliser la même base de données pour tous les microservices et chaque microservice n'accédant à ses propres tables.

Donc, ma question est de savoir comment puis-je réutiliser la connexion de base de données entre les microservices et continuer à conserver les uns aux autres, car à un moment donné à l'avenir, je souhaite peut-être que certains d'entre eux utilisent une autre base de données.

Je pose cette question parce que je pense que je pense qu'une nouvelle connexion de base de données pour chaque microservice s'ils utilisent tous la même base de données, car une logique à une seule page peut utiliser plus de 10 à 20 microservices.

7
Alexandru Șerban

Le fait que ces différents processus utilisent des connexions distinctes sont (principalement) non pertinents.

La préoccupation habituelle est que l'ouverture et la fermeture d'une connexion sont chères en termes de temps et de ressources de la CPU. Avec de nombreuses bases de données, cette souci est invalide en raison de la mise en commun de la connexion: la première fois que vous vous connectez à la base de données, mais la prochaine fois que vous devez effectuer une requête dans le même processus, une connexion existante est réutilisée sous la hotte, Même si dans le code, vous avez explicitement fermé la connexion.

Ce qui se passera dans votre cas est que vous allez payer le coût d'ouverture de vingt connexions la première fois lorsque vous démarrez après 20 microservices, par exemple, le serveur redémarre. Une fois que cela est fait, chaque service réutilisera les connexions déjà ouvertes auparavant.

Ce qui serait un problème, c'est si vous avez beaucoup de microservices accédant à la base de données ou si la base de données, pour une raison donnée, ne peut accepter trop de connexions. Depuis que vous parlez de vingt microservices, je ne serai pas concerné; Par exemple, "SQL Server permet un maximum de 32 767 connexions utilisateur." (- Source ) Si vous utilisez une base de données plus exotique ou une base de données qui possède une configuration exotique ou si chaque service doit répondre à une raison quelconque, d'ouvrir de nombreuses connexions à la fois, cela pourrait en effet devenir un problème.

6
Arseni Mourzenko

Les microservices sont des processus distincts, ils ne peuvent donc pas partager les connexions de base de données.

Vous divisez une application en microservices pour l'évolutivité, la résilience et le développement plus facile avec les grandes équipes. Pour ces avantages, vous devez payer un prix dans la performance (par exemple) et une infrastructure plus complexe. Le coût de vos microservices devant probablement communiquer entre eux sur le réseau est supérieur au coût de la gestion des pools de connexion DB distincts.

Si les avantages attendus ne sont pas plus importants que les coûts, ne le faites tout simplement pas. Les microservices sont parfaits pour certains cas d'utilisation, mais ils ne sont en aucun cas une balle d'argent et dans certains cas, les avantages seront compensés par les inconvénients.

2
Michał Kosmulski