Microservices: quels sont les avantages et les inconvénients?
Quels sont les avantages et les inconvénients de l'utilisation des microservices par rapport aux architectures alternatives? Existe-t-il une règle empirique lorsque les microservices doivent être utilisés?
2 réponses
Avantages
Sam Newman dans Building Microservices , énumère les principaux avantages des Microservices comme suit:
Hétérogénéité Technologique
Avec un système composé de multiples services collaboratifs, nous pouvons décider d'utiliser différents les technologies à l'intérieur de chacun d'eux. Cela nous permet de choisir le bon outil pour chaque travail, plutôt que avoir à choisir une approche plus standardisée et unique cela finit souvent par être le plus petit dénominateur commun.
Résilience
Un concept clé dans l'ingénierie de la résilience est la cloison . Si l'un des composants d'un système échoue, mais cet échec ne cascade pas, vous pouvez isoler le problème et le reste de la le système peut continuer à fonctionner. Les limites de Service deviennent vos cloisons évidentes. Dans un service monolithique, si le service échoue, tout cesse de fonctionner. Avec un monolithique système, nous pouvons fonctionner sur plusieurs machines pour réduire notre risque de défaillance, mais avec microservices, nous pouvons construire des systèmes qui gèrent la défaillance totale des services et dégrader fonctionnalité en conséquence.
Mise à L'échelle
Avec un grand service monolithique, nous devons tout mettre à l'échelle ensemble. Une petite partie de notre système global est limité dans les performances, mais si ce comportement est bloqué dans un géant application monolithique, nous devons gérer la mise à l'échelle tout comme une pièce. Avec plus petits services, nous pouvons simplement mettre à l'échelle les services qui ont besoin de mise à l'échelle, ce qui nous permet de fonctionner d'autres parties du système sur un matériel plus petit et moins puissant.
Facilité de Déploiement
Un changement d'une ligne à une application monolithique d'un million de lignes nécessite l'ensemble application à déployer afin de libérer la modification. Cela pourrait avoir un impact important, déploiement à haut risque. En pratique, des déploiements à fort impact et à haut risque finissent par se produire rarement en raison de la peur compréhensible.
Avec les microservices, nous pouvons apporter une modification à un service unique et le déployer indépendamment le reste du système. Cela nous permet d'obtenir notre code déployé plus rapide. Si un problème ne se produisent, il peut être isolé rapidement à un service individuel, rapide restauration facile à atteindre.
Alignement Organisationnel
Les Microservices nous permettent de mieux aligner notre architecture sur notre organisation, en nous aidant réduire le nombre de personnes travaillant sur une base de code pour frapper le sweet spot de l'équipe taille et productivité. Nous pouvons également changer la propriété des services entre les équipes pour essayer de garder les gens qui travaillent sur un service colocalisé.
Composabilité
Une des clés les promesses des systèmes distribués et des architectures axées sur les services est que nous ouvrons des possibilités de réutilisation des fonctionnalités. Avec microservices, nous permettons à notre fonctionnalité à consommer de différentes manières à des fins différentes. Cela peut être particulièrement important lorsque nous pensons à la façon dont nos consommateurs utilisent notre logiciel.
Optimisation pour la Remplaçabilité
Si vous travaillez à une taille moyenne ou plus grande organisation, les chances sont que vous êtes au courant de certains grand, méchant système héritage assis dans le coin. Une personne ne veut y toucher. Celui qui est essentiel à la façon dont votre entreprise fonctionne, mais cela se trouve être écrit dans un Fortran étrange variante et fonctionne uniquement sur le matériel qui a atteint la fin de vie il y a 25 ans. Pourquoi n'est-ce pas - ils été remplacés? Vous savez pourquoi: c'est un travail trop gros et risqué.
Avec nos services individuels étant de petite taille, le coût de les remplacer par un meilleur la mise en œuvre, ou même les supprimer complètement, est beaucoup plus facile à gérer.
Contre
L'inconvénient le plus important des Microservices est qu'ils ont toutes les complexités associées de systèmes distribués, et alors que nous avons beaucoup appris sur la façon de gérer distribué les systèmes eh bien, il est encore difficile. Si vous êtes à venir à partir d'un monolithique point de vue du système, vous devrez obtenir beaucoup mieux à la manipulation déploiement, Test et surveillance pour débloquer les avantages. Vous aurez vous devez également penser différemment à la façon dont vous évoluez vos systèmes et vous assurer qu'ils le sont résilient. Ne soyez pas surpris aussi si des choses comme les transactions distribuées ou théorème de CAP commencez à vous donner des maux de tête, non plus!
Remarques De Clôture
Juste en citant de Martin Fowler:
Un argument raisonnable que nous avons entendu est que vous ne devriez pas commencer par un architecture des microservices. Au lieu de cela, commencez par un monolithe, gardez-le modulaire, et le diviser en microservices une fois que le monolithe devient un problème.
Les pros des micro-services sont que vos applications évoluent très bien. Vous divisez votre application en petits services. Il est difficile de décider quels services limités vous aurez besoin. Mais une fois que vous avez fait cela, vous pouvez facilement mettre à l'échelle des services spécifiques jusqu'à plusieurs fois (les services qui obtiennent le plus de charge) plutôt que d'avoir besoin de mettre à l'échelle toute votre application.
Un Autre avantage est qu'il est plus facile pour les nouveaux développeurs pour commencer à 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 plus grand inconvénient de l'utilisation des microservices est bien sûr qu'il y a un risque plus élevé d'échec lors de la communication entre les différents services.
L'utilisation des microservices ne commence généralement à porter ses fruits que lorsque votre application devient trop importante pour être maintenue en tant qu'application monolithique. Essayez de commencer comme un monolithique mais gardez vos contextes délimités à l'esprit lors du développement (essayez de le garder aussi séparé que possible), vous pouvez migrer vers les microservices si nécessaire plus tard.