J'ai récemment étudié sur des microservices et une idée associée que j'ai vue est celle de la persistance et des microsservices de Polyglot travaillant avec leurs propres bases de données, ou quel que soit le stockage qu'ils pouvaient utiliser. Ma question est de savoir comment ce modèle gère-t-il des données relationnelles pouvant couvrir plusieurs services?
Par exemple, dites que vous avez un microservice pour faire face aux informations client et une affaire avec des commandes. Je supposerais qu'une commande aurait besoin d'un moyen de faire référence à un client donné dans son modèle de stockage, ce qui, selon moi, une base de données relationnelle gère bien, mais si ces microservices possèdent vraiment des bases de données indépendantes, comment cela est-il traité?
À titre de note latérale, j'ai travaillé avec une large base de données relationnelle de mon organisation depuis trois ans, je pourrais donc comprendre si ma pensée a été assombri par la répétition, mais je suis très désireux de comprendre ce concept. Merci!
"Polyglot Persistence" est juste un nom de fantaisie pour les "magasins de données hétérogènes" (que je suppose que c'est aussi un nom de fantaisie). Vous pouvez résoudre le problème de différentes manières:
Avoir "une table pour les gouverner tous:" Une clé primaire spécifique dans une base de données spécifique est l'identifiant maître d'une entité particulière,
Avoir des tables de mappage qui mappent les clés d'un magasin de données sur les touches d'une autre,
Utilisez des clés qui sont globalement uniques, comme des Guids.
Si vous concevez les services pour être vraiment indépendant, ils devront servir des fonctions d'identité ... des moyens d'identifier de manière unique des entités, de sorte qu'elles puissent être mentionnées de manière externe. Après tout, le service est la limite et vous n'êtes pas censé le voir à travers le magasin sous-jacent. Cette identité ne devrait vraiment pas changer face à la mutation de l'entité - il ne devrait donc pas être constitué de données mutables - telles que le nom d'un client ou un nom d'employé.
Une application particulière qui utilise l'identité peut mapper ou peut l'utiliser comme prévu. Chaque application développée serait libre de mapper ou d'utiliser l'identité d'une manière compatible avec son objectif. Il n'y a aucune raison d'assumer une sorte de cartographie globalisé/centralisée. Si une cartographie centralisée se sent bien, un magasin centralisé et non relatif pour tous les microservices a encore besoin de se sentir encore plus.
Il est compliqué si les services doivent soutenir des garanties ... comme "Je ne détruirai pas cette entité tant que vous ne le laisserez pas" - ce qui pourrait être une promesse longue ou de courte vie. C'est un peu comme déclarant externaliser l'idée d'une clé étrangère. Les applications devraient être en mesure de libérer la protection sur les entités lorsque toutes les références sont supprimées; et cela peut être compliqué.
Par exemple, Imagine Service s entité de service e et application a souhaite faire référence à e et veut une garantie que e ne périsse pas, alors a a besoin d'un moyen unique de se référer à la protection contextuelle de E = . De cette façon, a peut informer s quand e n'est plus nécessaire. Le comptage de référence (danss ou dans a) n'est pas assez bon.
Éventuellement, -s peut simplement se décomposer E et ne pas le détruire - peut-être le marquer comme logiquement supprimé. Cela évite la complexité de l'externalisation de la relation clé étrangère, mais fait que les données vivent plus longtemps qu'autrement.
Une autre stratégie a Peut-être employer consiste simplement au fait que une entité renvoyée n'est plus là. Ce n'est pas si simple non plus.
À court terme, les applications s'appuyant sur une multiplicité de microservices ont leur travail découpé pour eux - les services peuvent ou non bien jouer dans un tel environnement. Une merveille si la joie de choisir son propre magasin de données lors de la construction d'un service est compensée par la complexité visitée sur les consommateurs du service. Les stratégies choisies vont être dictées sa capacité à adapter le comportement du service aux besoins des applications. Si nous parlons de microservices de "là-bas", les applications devront alors être considérées comme beaucoup plus robustes et peuvent même décider de reproduire des portions substantielles des données fournies par le service.