Microservices avec base de données partagée? à l'aide de plusieurs ORM est?
Je suis en train d'apprendre à propos de microservices et je vais construire un projet avec un microservices architecture.
Le truc, c'est un de mes coéquipiers souhaitez utiliser une base de données pour tous les services, le partage de toutes les tables de sorte que "les données ne sont pas répétés", chaque service serait construit avec des cadres différents et de langues comme django et des rails très différentes ORM normes.
Quelle serait la bonne approche? Depuis je pense qu'en travaillant avec une base de données impliquerait beaucoup de "piratage" de l'Orm, afin de leur faire le travail correctement.
- Pourquoi auriez-vous besoin pour "pirater" les orm? Juste parce qu'ils ont une syntaxe différente ne signifie pas qu'ils ne sont pas fondamentalement faire la même chose en fin de compte, la requête de la db.
- voir stackoverflow.com/questions/43426699/...
- Double Possible de DB design pour microservice architecture
Vous devez vous connecter pour publier un commentaire.
Vous ne sont pas susceptibles de bénéficier d'une Microservices architecture si tous les services partagent les mêmes tables de base de données. C'est parce que vous sont effectivement étroitement associant les services. Si une base de données de la table change tous les services devront changer.
Vous devez comprendre que la raison pour Microservices architecture est de réduire les dépendances entre les équipes de développement et de leur permettre de progresser indépendamment rapide des rejets.
Voici une citation de Werner Vogels, le CTO d'Amazon (Amazon a lancé un lot de la Microservices architecture de style):
Pour plus d'informations lire cette et cette.
En général un microservice doit être responsable de ses propres données. C'est un monde parfait, le scénario.
Dans la pratique, certains services peuvent être fortement liés les uns aux autres. E. g. CustomerShippingDetails et CustomerShoppingCheckout services peuvent accéder aux mêmes données d'adresse du client. Comment voulez-vous ensuite résoudre un problème de la fourniture de l'adresse du client à la clientèle de la caisse de service. Si la caisse des requêtes de service du shopping tous les détails, alors vous briser le couplage lâche entre les services. Autre option consiste à introduire une base de données partagée.
Il y aura toujours une sorte de compromis sur l'architecture. Qu'est-ce que sacreficed est l'architecture de la décision qui dépend fortement de la grande image (la conception de l'ensemble du système).
De ne pas avoir trop de détails sur votre système que je voudrais aller avec une approche mixte. C'est, d'avoir une base de données commune pour les services qui prennent soin d'entreprises similaires à la logique. Donc CustomerShippingDetails et CustomerShoppingCheckout pouvez partager une base de données. Mais un StoreItemsDetails aurait une base de données distincte.
Vous pouvez en savoir plus sur le modèle de base de données partagée pour les microservices à Microservice Architecture.