Quels sont les avantages et les inconvénients de l’utilisation de microservices par rapport à des architectures alternatives?
Sam Newman dans Building Microservices , énumère les principaux avantages de Microservices comme suit:
Avec un système composé de plusieurs services collaborant, nous pouvons décider d’utiliser différentes technologies À l’intérieur de chacun. Cela nous permet de choisir le bon outil pour chaque travail, plutôt que d'avoir à choisir une approche standardisée et standardisée, qui finit souvent par être le plus petit dénominateur commun.
Un concept clé en ingénierie de la résilience est le cloison. Si un composant du système Échoue, mais que cette défaillance ne se produit pas en cascade, vous pouvez isoler le problème et le reste du système Continuer à fonctionner. Les limites de service deviennent vos cloisons évidentes. Dans un service monolithique .__, si le service échoue, tout cesse de fonctionner. Avec un système monolithique , Nous pouvons utiliser plusieurs machines pour réduire les risques d'échec, mais avec Microservices, nous pouvons créer des systèmes qui gèrent la défaillance totale des services et dégradent les fonctionnalités de En conséquence.
Avec un grand service monolithique, nous devons tout mettre ensemble. Les performances de notre système global sont limitées, mais si ce comportement est verrouillé dans une application monolithique gigantesque, nous devons gérer l’échelle globale. Avec Des services plus petits, nous pouvons simplement faire évoluer les services qui ont besoin d’être redimensionnés, ce qui nous permet d’exécuter D’autres parties du système sur un matériel plus petit et moins puissant.
Un changement d'une ligne en une application monolithique longue de plusieurs millions de lignes nécessite le déploiement de l'application Entière afin de valider la modification. Cela pourrait être un déploiement à fort impact, En pratique, les déploiements à fort impact et à haut risque finissent par se produire rarement, en raison d'une peur compréhensible.
Avec les microservices, nous pouvons modifier un service et le déployer indépendamment Du reste du système. Cela nous permet de déployer notre code plus rapidement. Si un problème survient, il peut être rapidement isolé d'un service individuel, ce qui permet une restauration rapide facile à obtenir.
Les microservices nous permettent de mieux aligner notre architecture sur notre organisation, en nous aidant À minimiser le nombre de personnes travaillant sur une base de code quelconque pour atteindre le point de mire de l'équipe Taille et productivité. Nous pouvons également transférer la propriété des services entre les équipes pour tenter de garder les personnes travaillant sur un service colocalisées.
L’une des principales promesses des systèmes distribués et des architectures orientées services est que nous ouvrons des possibilités de réutilisation des fonctionnalités. Avec les microservices, nous permettons à notre fonctionnalité D'être utilisée de différentes manières et à différentes fins. Cela peut être particulièrement important lorsque nous réfléchissons à la manière dont nos clients utilisent nos logiciels.
Si vous travaillez dans une organisation de taille moyenne ou plus grande, il est fort probable que vous sachiez que de nombreux systèmes hérités, gros et méchants, se trouvent dans le coin. Celui que personne ne veut toucher. Celui qui est vital pour le fonctionnement de votre entreprise, mais il se trouve qu’il est écrit dans une étrange variante Fortran Et ne fonctionne que sur du matériel ayant atteint la fin de sa vie il ya 25 ans. Pourquoi n’a-t-il pas été remplacé? Vous savez pourquoi: c’est un travail trop gros et trop risqué.
Nos services individuels étant de petite taille, le coût pour les remplacer par une meilleure implémentation de Ou même les supprimer complètement est beaucoup plus facile à gérer.Les inconvénients.
Remarques de clôture
One reasonable argument we've heard is that you shouldn't start with a microservices architecture. Instead begin with a monolith, keep it modular, and split it into microservices once the monolith becomes a problem.
Les avantages des micro-services sont que vos applications évoluent très bien. Vous divisez votre application en petits services. Il est difficile de choisir les services délimités dont vous aurez besoin. Mais une fois que vous avez fait cela, vous pouvez facilement adapter des services spécifiques jusqu'à plusieurs fois (les services qui reçoivent réellement le plus de charge) plutôt que de devoir faire évoluer l'ensemble de votre application.
Un autre avantage est qu’il est plus facile pour les nouveaux développeurs de créer de nouvelles fonctionnalités pour votre application, puisque tout est divisé en ces services séparés -> Chaque service a sa propre (petite) base de code.
Le principal inconvénient de l'utilisation de microservices est bien entendu qu'il existe un risque d'échec accru lors de la communication entre les différents services.
L'utilisation de microservices ne commence généralement à porter ses fruits que lorsque votre application devient trop volumineuse pour pouvoir être conservée en tant qu'application monolithique . Essayez de démarrer en tant que monolithique tout en gardant à l'esprit vos contextes délimités pendant le développement (essayez de les séparer autant que possible). vous pouvez migrer vers microservices si nécessaire ultérieurement.
Avantages
1. L’architecture décentralisée et découplée, qui utilise la chorégraphie plutôt que l’orchestration, permet aux services d’éditer et de publier des services sur une base totalement décentralisée.
2. Faites une chose et faites-la bien (philosophie Unix), plus ciblée et singulière avec une fonctionnalité très étroite
3.Facilité à avoir un parallélisme et un équilibrage de charge, car elle est plus fine du point de vue des processus métier
4.L'état sans statut, cependant, avoir un microservice avec état est valide mais ce n'est pas l'idéal
5.Le stockage individuel des données assouplit les services pour continuer à suivre le flux de données
6.Développement et découverte faciles et automatisés grâce à l'utilisation de technologies basées sur un moteur de conteneur, telles que docker
7. Plus d'interopérabilité, ce qui permet aux services d'avoir plus de flexibilité pour accepter/abandonner un service ou un protocole nouveau/actuel
8. Totalement compatible avec REST (Representational State Transfer) qui permet de créer des services sans état.
9. Convient aux systèmes discrets, par exemple pour le traitement automatisé par lots
Inconvénients 1. Synchronisation des services, maintien des services synchronisés de manière coopérative
2. Difficulté à trouver des problèmes systématiques, par exemple, il est plus difficile de trouver un problème dans une chaîne d'activités commerciales lorsqu'il y a une erreur logique dans le processus et qu'il est nécessaire de combiner plusieurs fichiers journaux en un seul bloc
3.Le déploiement et la découverte automatisés sont indispensables lorsque le nombre de microservices est supérieur à quelques
4.Difficulté à trouver la granularité de service appropriée, ce qui peut conduire le système entier à l'instabilité en raison d'une communication réseau surchargée et de rations d'erreur
5.Challenging lorsque le système d'entreprise n'est pas assez discret, comme si le contrôle de processus continu
6.Développer un test automatisé est beaucoup plus difficile que les systèmes monolithiques
Vous trouverez ci-dessous une série d'articles publiés sur les microservices dans code-project. Vous pouvez lire et commenter vos questions si vous le souhaitez.
https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-Ihttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices -Architecture-Part-IIhttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-III