Cela dépend vraiment de vos exigences en matière d'évolutivité et de la manière dont vos instances de microservice doivent coopérer pour fournir un résultat unique. Cela aide de savoir quels sont les compromis:
Tout garder dans une base de données
- Configuration plus facile
- Aucune coordination ou communication avec d'autres instances de votre service n'est nécessaire
- Plus facile de découvrir votre ensemble de données complet
- Performances système limitées par les performances de la base de données
Garder les bases de données séparées
- La réponse complète à une demande peut être répartie sur plusieurs instances de microservice.
- Dans ce cas, vous avez augmenté la communication et la négociation pour résoudre la demande.
- Gestion des données lorsque vous perdez ce nœud de microservice (même lorsque la base de données est encore active, vous ne pouvez pas y accéder tant qu'un nouveau fichier contenant la bonne configuration n'a pas été reconstitué)
- Complexité de configuration accrue
Quel est le problème que vous résolvez?
Dans certains cas, vous ne vous inquiétez que des données éphémères. Si la base de données tombe en panne, ce n'est pas un gros problème. Dans ces cas, vous n’avez peut-être même pas besoin d’une base de données pour commencer. Il suffit de tout garder en mémoire et d’accélérer les choses. C'est la solution la plus simple à utiliser.
Dans d'autres cas, vous avez besoin de l'intégrité des données, mais votre base de données est capable d'augmenter sa capacité en fonction du nombre de nœuds dont elle dispose. Dans ce cas, une seule base de données est probablement plus que suffisante, et gérer sa réactivité de manière indépendante est la bonne réponse.
Il y a un certain nombre de cas entre les deux. Par exemple, vous pouvez avoir des bases de données spécifiques à une région. Ainsi, pour chaque instance de votre service dans une région différente, vous disposez d'une base de données distincte. Le partage de bases de données ne fonctionne généralement pas bien d'une région à l'autre. Il s'agit donc d'un moyen de localiser un peu les données et de contrôler vous-même la coordination.
Doctrine et réalité
J'ai lu un certain nombre d'articles sur les microservices et sur leur caractère modulaire. Les recommandations vont de conserver le niveau frontal, le microservice et le niveau de données dans son ensemble au partage de la base de données et / ou du code frontal pour toutes les instances. Généralement, plus l'isolement est important, plus elle est évolutive, mais au prix d'une complexité accrue.
Si votre microservice est lourd en calculs, il est logique d'autoriser le nombre de ces microservices à adapter - le partage de la base de données ou même du code frontal ne nuit ni ne nuit à cette approche.
La réalité est que les besoins spécifiques de votre projet nécessiteront un ensemble de compromis différent pour que le travail soit effectué à temps et pour gérer la charge système que vous mesurez (plus un peu plus). Considérez l'objectif ambitieux comme le trio de serveurs, de microsrervice et de données. Plus votre système est sollicité, plus vous devrez probablement vous rapprocher de cet objectif. Nous ne sommes pas tous [insert name of highly successful web entity here]
et ils n'ont pas commencé là où ils sont maintenant. Parfois, il vous suffit de commencer avec une situation moins que parfaite et d'en être heureux.