web-dev-qa-db-fra.com

Microservices - Partage des données via le cache de mémoire distribué?

Je suis assez nouveau chez les microservices et les bases de données en mémoire partagées telles que REDIS.

Je me demande si si ce serait une bonne idée de combiner les deux pour relever les défis de la duplication de données, du partage et de la propriété dans une architecture orientée de microservice.

Ce ne serait-il pas une excellente solution d'avoir des microservices qui ont besoin d'accès à une autre donnée de services rejoindre simplement le cluster comme un nœud esclave en lecture seule?
Cette façon de posséder (et l'accès en écriture) serait toujours complètement au sein du service individuel, mais l'accès aux données serait très rapide pour chaque esclave et même si le capitaine diminue, nous pourrions continuer à fournir un certain niveau de service de l'esclave.

De toute évidence, la quantité de données pourrait être un facteur limitant mais autre que cela, quelles sont les raisons pour lesquelles cette approche ne semble pas être largement utilisée?

3
TommyF

Tout comme utiliser une seule base de données pour plusieurs services, l'approche que vous décrivez provoque un fort couplage entre les services. Par exemple, vous ne pouvez pas modifier le modèle de données d'un service sans avoir à modifier en conséquence le modèle dans d'autres. Cela signifie que le développement et le déploiement sont couplés et que vos microservices sont devenus un monolithe avec plusieurs procès. Étant donné que le développement et le déploiement indépendant des services sont l'une des raisons importantes d'aller avec l'architecture de microservice, sans eux, vous pourriez également construire un monolithe.

Comme pour toute bonne pratique, il y a bien sûr des exceptions à ce que je viens de dire. Lorsqu'il est utilisé dans une portée limitée, le cache partagé peut offrir une amélioration d'une performance aussi importante qu'il est logique de renoncer au couplage dessert dessert. Une situation raisonnable serait par exemple deux services développés par une seule équipe, à la fois avec une portée étroite et qui nécessite de coopérer de près. Pensez un service qui remplit le cache avec des données et une autre qui lit ces données. Dans ce cas, vous avez des couples assez forts de toute façon et du cache partagé, même si cela ne forme pas si bonne forme de point de vue de l'architecture et de maintenance, peut encore être un compromis raisonnable en raison des avantages de la performance. Mais dans un cas général, un tel cache partagé est une mauvaise idée (voir ci-dessus).

9
Michał Kosmulski