J'envisage de déplacer une API REST monolithique vers une architecture de microservices, et je suis un peu confus au sujet du stockage de données. Selon moi, certains des avantages des microservices seraient:
- Évolutivité horizontale - Je peux exécuter plusieurs copies redondantes d'un microservice pour faire face à la charge et / ou à la panne d'un serveur.
- Lâchement couplé - je peux changer les implémentations internes des microservices sans avoir à changer les autres, et je peux les déployer et les changer indépendamment, etc.
Mon problème est avec le stockage des données. Selon moi, il existe plusieurs options:
- Un service de base de données unique partagé par tous les microservices - cela semblerait éliminer complètement tout avantage d'un couplage lâche.
- Une instance de base de données installée localement sur chaque microservice - Je ne vois pas de moyen de faire évoluer horizontalement cela, donc je ne pense pas que ce serait une option.
- Chaque microservice possède son propre service de base de données - cela semble le plus prometteur, car il préserve les avantages du couplage lâche et de la mise à l'échelle horizontale (en utilisant des copies de base de données redondantes et / ou un partitionnement sur plusieurs)
Pour moi, la troisième option semble être la seule option, mais elle me semble incroyablement lourde et une solution très ingénieuse. Si je comprends bien, pour une application simple avec 4-5 microservices, je devrais exécuter 16-20 serveurs - deux instances de microservice réelles par microservice (en cas de panne du serveur et pour un déploiement sans temps d'arrêt), et deux instances de service de base de données par microservice (en cas de panne du serveur etc ...).
Franchement, cela semble un peu ridicule. 16-20 serveurs pour exécuter une API simple, sachant qu'un projet réaliste aura probablement plus de 4-5 services? Y a-t-il un concept fondamental qui me manque qui expliquera cela?
Certaines choses qui peuvent aider à répondre:
- Je suis le seul développeur de ce projet et le serai dans un avenir prévisible.
- J'utilise Node.js et MongoDB, mais je serais intéressé par les réponses indépendantes de la langue - une réponse pourrait même être que j'utilise simplement les mauvaises technologies!