Question

J'ai posté une question similaire sur la taille de linq évolutive. Il y avait tellement de points de vue différents sur ce que l'évolutivité signifiait réellement dans certaines conversations récentes. Cela m'a donc amené à poser cette question également. Qu'est-ce que l'évolutivité signifie pour vous?

Était-ce utile?

La solution

Je regarde l'évolutivité sous deux angles:

Renforcement

Si j'ajoute plus de RAM à la boîte sur laquelle quelque chose tourne, combien de performances et de capacité supplémentaires puis-je gagner? Si une application que je possède peut gérer 300 connexions supplémentaires et fonctionne 15% plus vite lorsque j'ajoute 2 Go de RAM à mon serveur et qu'une autre application ne peut gérer que 100 connexions supplémentaires et s'exécute 5% plus rapidement, l'application A est clairement plus évolutive.

Évolution progressive

Maintenant, si j'ajoute plus de boîtes à ma configuration, combien de performances et de capacités supplémentaires puis-je gagner? Puis-je configurer des frontaux Web pour gérer davantage de trafic client? Si oui, y a-t-il une augmentation linéaire? Si j'ajoute 3 cases, puis-je avoir 3 fois plus d'utilisateurs qui accèdent à mon site? Puis-je ajouter plus de bases de données pour distribuer le chargement de données? Puis-je augmenter le multithreading? Si je peux facilement ajouter une machine à mon réseau pour augmenter la capacité de mon application, elle est évolutive.

C’est d’ailleurs l’un des lecteurs principaux du n-tier.

Autres conseils

L’évolutivité signifie la capacité de gérer la croissance dans l’un ou l’autre de ces 2 domaines:

1) Facilité d’ajout de nouvelles fonctionnalités, correction de bugs. Pour que le code fasse ces nouvelles choses à quel point est-il difficile à faire? Bien que cela puisse être maintenable à certains égards, la question est également de savoir si vous pouvez générer le code pour gérer facilement une plus grande échelle.

2) Possibilité de gérer une charge de plus en plus grande, qui peut être constituée de plusieurs demandes simultanément dans le développement Web ou de grands ensembles de données pour un site Web simple basé sur une base de données, par ex. Pourriez-vous créer une application gérant des tables contenant des centaines de milliers de lignes et toujours considérée comme "rapide"?

En général, l’évolutivité signifie la capacité de croissance.

Je ne pense pas que l'évolutivité ait un sens sans contexte.

Quand on me pose des questions sur l'évolutivité d'un système, la première chose que je dois savoir, c'est comment son utilisation devrait croître. Va-t-il y avoir plus d'utilisateurs? Les utilisateurs existants en feront-ils un usage plus intensif? Son ensemble de fonctionnalités va-t-il s'agrandir? Est-ce que la combinaison de transactions qu'elle soutient actuellement va changer? L’expérience utilisateur devra-t-elle changer?

(OK, donc la réponse à toutes ces questions est généralement "Oui"; puis ajoutez le mot "Comment" à ces questions.)

Pour prendre un exemple pas tout à fait fictif: un système prenant actuellement en charge très peu d’utilisateurs et dont le nombre d’utilisateurs devrait croître rapidement présente un grave problème de mise à l’échelle si le DBA doit passer deux heures à exécuter manuellement des requêtes à partir d’informations extraites de messages électroniques chaque fois qu'il doit créer un nouveau compte. Ce problème ne peut pas être résolu en ajoutant plus de ressources, à moins que vous n'incluiez les administrateurs de base de données dans la liste des ressources que vous allez ajouter (et il y a beaucoup de raisons qui ne vont pas bien évoluer).

Ou imaginez un site de réseautage social qui déploie la nouvelle fonctionnalité intéressante qui vous permet de voir si vos amis sont en ligne et de discuter avec eux via une interface utilisateur agréable, Ajax-y. Soudainement, sans augmentation du nombre d'utilisateurs, le nombre de requêtes HTTP traitées quotidiennement par vos serveurs est multiplié par vingt et vos inquiétudes quant à l'évolutivité de votre base de données disparaissent en arrière-plan. (À moins bien sûr que vous n'ayez impliqué la base de données dans votre application de discussion en ligne. Bien pensé!)

Bien sûr, rendre vos applications Web sans état de sorte que vous puissiez ajouter des serveurs Web, rendre les pages Web idempotentes de sorte que vous puissiez ajouter des mandataires, concevoir votre application de manière à pouvoir partitionner votre base de données sur plusieurs serveurs, ce qui rendra votre application évolutif dans différentes dimensions. Cela vaut vraiment la peine d'y penser. Mais il est beaucoup plus important de déterminer votre véritable ennemi avant de commencer à vous battre.

J'ai répondu à cette question comme si vous vouliez faire vite, mais c'est parce que je ne voulais pas être un imbécile :), autrement dit, je ne voulais pas entamer une discussion sur ce que “évolutif” voulait dire. Je pense à l’extensibilité: ajouter des ressources au système augmente ses performances.

En ce sens, PLINQ est évolutif, car l’ajout de plus de cœurs accélérera son exécution.

Juste pour ajouter au post de @Lou Franco.

PLINQ a même des monstruosités "super linéaires" Performances dans certains scénarios avec des frais généraux limités (selon certaines de leurs démos). Essayez-le.

Si vous êtes un mec de C ++, Microsoft cherche également à publier des fonctionnalités de concurrence qui n’entraînent apparemment aucun coût d’exécution, ainsi que des outils de concurrence supplémentaires basés sur les tâches pour vous aider à mieux appeler.

Je considère l'évolutivité comme une mesure de la régularité de la courbe coût-performance.

Autrement dit, si vous pouvez dépenser un peu en ressources informatiques et obtenir un système peu performant, et en ajoutant progressivement des ressources, vous obtiendrez un système proportionnellement meilleur, il sera évolutif. Si vous devez ajouter des ressources dans des morceaux coûteux, pour obtenir moins d'améliorations linéaires, ce n'est pas évolutif.

Évolutivité - Capacité d’un système d’utiliser des ressources supplémentaires pour augmenter la capacité ou le débit. Ressources supplémentaires telles que des lecteurs, de la mémoire, des cartes réseau, des processeurs ou des machines.

Je n'associe pas directement l'évolutivité à la croissance des fonctionnalités, bien que l'ajout de fonctionnalités à un système à sa limite d'échelle ne soit pas possible.

De nos jours, et spécialement pour les applications Web, mais dans certains cas également pour les applications d'entreprise, l'évolutivité horizontale est ce que vous souhaitez,

Puis-je gérer plus de trafic (trafic, données, traitement) en ajoutant plus de matériel de base? même en utilisant " serveurs cloud " amazon ec2, moteur d'application google et similaire?

Evolutif signifie que je peux incorporer n ressources dans un système et celui-ci augmentera dans l'espace et dans le temps entre O (log (n)) et O (n log n). C'est un peu irréaliste, mais c'est ainsi que je pense à "évolutif".

Woh !, grand mot ....

Je le définis chaque nouveau projet, car cela dépend de ce que le client veut.

L’évolutivité ne consiste pas toujours à augmenter la capacité de traitement / stockage, mais peut également prendre en charge de nombreuses entrées et de nombreuses sorties.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top