Je continue de voir dans les offres d'emploi que le candidat doit avoir une expérience de la rédaction d'applications "évolutives". Qu'est-ce qui rend une application évolutive et comment puis-je savoir que mon code peut être étendu à des millions d'utilisateurs?
J'imagine qu'une meilleure façon de formuler cette question est la suivante: comment puis-je écrire mon code avec une évolutivité en tête? Pour que le code soit évolutif dès le départ, par opposition à une réflexion ultérieure. Existe-t-il certaines méthodologies de conception? Ou est-ce simplement une question de choisir les bons algorithmes pour le travail?
la source
L'évolutivité est mesurée en termes de débit basé sur une variable. Par exemple, nombre de demandes / seconde avec X utilisateurs. La manière la plus simple de décrire l'évolutivité est la suivante:
La première chose que vous devez comprendre lors de la conception de l’évolutivité est la mesure la plus importante pour votre application. Il existe plusieurs façons de mesurer l’ efficacité, élément clé de l’évolutivité:
Il existe davantage de mesures d'efficacité pouvant être utilisées, mais elles sont communes aux systèmes Web ou aux systèmes de traitement par lots.
Le prochain aspect de l’évolutivité consiste à mesurer l’évolution de votre efficacité lorsque la charge augmente. Les moyens courants d'augmenter la charge sont les suivants:
L'objectif d'une application évolutive est de maintenir ou d'améliorer l'efficacité lorsque nous traitons le problème de charge. En bref, si le temps de réponse est trop long, pouvons-nous ajouter un autre serveur pour répartir la charge de manière égale? Cette approche réduit la charge de travail d'un serveur et permet aux serveurs de fonctionner dans cette "zone idéale" d'efficacité.
Votre application devra être conçue spécifiquement pour être à l'échelle. Cela signifie que vous devez être prudent avec les données de session, en acheminant les demandes au bon serveur, en réduisant les goulots d'étranglement qui limitent la capacité de l'application à évoluer.
la source
Vous voulez essentiellement éviter les goulots d'étranglement lorsque vous augmentez le nombre d'utilisateurs et / ou que vous traitez un jeu de données plus volumineux, et / ou que vous proposez votre interface dans plusieurs langues, etc.
Essentiellement, vous examinez votre schéma de base de données, vos algorithmes et votre processus de développement logiciel pour tenter de prévoir les problèmes futurs. Vous souhaitez également configurer la surveillance des performances pour identifier les problèmes lorsqu'ils commencent à se développer.
J'ai lu ces conseils lorsque j'ai lu la création de sites Web évolutifs (lien vers amazon).
J'espère que cela t'aides!
la source
La seule façon pour les applications d'être réellement évolutives est de ne pas avoir de restrictions qui ne peuvent pas être passées (ou seulement très cher).
Un exemple typique est ce qui se passe lorsque vous manquez de cycles de traitement disponibles. Si votre programme est multi-crénelé, vous pouvez utiliser une boîte à plusieurs cœurs, mais que se passe-t-il lorsque vous ne pouvez plus acheter une boîte plus grande? Votre application ne peut tout simplement plus se développer et n'est donc pas évolutive.
Toute application véritablement évolutive doit être capable de s'étendre de manière transparente sur plusieurs ordinateurs, sans aucun décalage notable. Ce n’est pas facile et c’est l’une des raisons du succès de Google.
la source
Il existe des problèmes uniques liés à la prise en charge d'applications de grande taille. L'offre d'emploi recherche des candidats qui ont travaillé dans cet environnement et qui ont dû résoudre de tels problèmes.
Depuis une application de haut niveau, les applications sont évolutives en se posant constamment la question de savoir ce qui se passerait si cet élément de code devait être exécuté des milliers de fois sur une très courte période. Cela signifie gérer vos empreintes de mémoire, utiliser la mise en cache des totaux et des données, utiliser des sources de données évolutives, etc.
la source
Si vous construisiez une fonction de recherche qui fonctionnait bien quand il y avait 100 lignes dans la base de données pour la recherche et que 10 utilisateurs l'utilisaient à la fois. Quelle serait sa performance lorsque 100 utilisateurs l'utilisaient en même temps et qu'il y avait 100 000 lignes à rechercher.
Si la performance est la même, peu importe ce qui se passe, alors c'est très bon. il fonctionne si proportionnellement à la quantité d’utilisateurs / données (ce qui signifie 10 fois plus de données == 10 fois plus long à traiter) que c’est bien. Si le nombre de données à traiter est beaucoup plus faible (traitement du mode 10x == 10x ^ 10 plus long), la mise à l’échelle est mauvaise.
Mes exemples doivent vraiment figurer en notation Big O, mais je ne les connais pas assez bien pour écrire les exemples en Big O.
Vous pouvez simuler plus de données en vidant des données factices dans votre base de données. Il existe des outils pour simuler plus d'utilisateurs tels qu'Apache AB.
la source