J'ai posé cette question sur la défaillance du serveur autour de l'évolutivité du site Web, mais c'était plus ciblé autour de la configuration matérielle, de la mémoire croissante, etc., donc je pensais que je le demanderais ici aussi bien que le côté de ma question de développement. < / p>
Selon la question, j'ai un bon fonctionnement de l'ASP.NET-MVC parfait avec SQL Server Backend et en utilisant le cache de Nibernate et Syscache 2nd de niveau et j'ai une demande d'augmentation de la base d'utilisateurs d'environ 1000 à 7000 et j'essaie d'essayer Pour déterminer où je devrais concentrer mes énergies de développement en termes de choses qui fonctionnent parfaitement bien maintenant, mais vont causer des problèmes à l'échelle. Je fais beaucoup de lecture et j'ai jusqu'à présent des choses qui semblent intéresser d'un point de vue codant sont; p>
Mon serveur SQL aujourd'hui est de 4 Go et en termes de données, je m'attendrais à ce que quelques-uns de la table augmentent de taille linéairement (comme une table de personnes qui passerait de 1000 lignes à 7 000 rangées) avec cette augmentation des utilisateurs mais La plupart des autres tableaux (données de référence, etc.) ne doivent avoir que la croissance marginale (une table comme un emplacement similaire peut-être doublerait) p>
3 Réponses :
Vous devez vraiment avoir un système solide de sauvegarde de données. Avec la chance d'éviter une erreur critique avec la quantité d'utilisateurs, un bon système de sauvegarde est très important. Aussi, vous pouvez aller hors ligne et perdre des données. P>
Les données ont besoin d'une maison. La création d'un système robuste de stockage de données est très important. Ceci est pour quand vous êtes hors ligne pour une raison quelconque. P>
Les tests de stress vous aideront à savoir quoi corriger. Remplissez la base de données avec 10 000 éléments aléatoires et testez toutes les fonctions que vous pouvez. Essayez de rechercher des spécifications numéros d'identification. P>
Assurez-vous que la bande passante du serveur sera en mesure de le gérer. L'augmentation de la base d'utilisateurs chargera de plus en plus le serveur. Plus les utilisateurs sont plus utilisés à la fois. P>
Comme la quantité de données demandée augmente, les chances d'impasse augmentent-elles. Vous voudrez peut-être lire Ceci A > Article P>
L'architecture que vous décrivez n'est pas évolutive. Mais sur la base des chiffres que vous avez fournis, peut-être que l'évolutivité n'est pas une nécessité pour vous du tout? Être pragmatique avant de concevoir une évolutivité. Ne vous impliquez pas si vous en avez besoin. P>
Quoi qu'il en soit, si vous voulez aller pour cela, vous devez mettre l'échelle comme suit. P>
Premièrement, distinguer entre Commandes et questions . Commandes Modifier les données, les requêtes Récupérez les données. P>
Pour les commandes, vous pouvez utiliser un courtier de messages (par exemple, Rabbit MQ ) ou un bus de service (par exemple < un href = "https://particult.net/nservicebus" rel = "noreferrer"> nservicebus ). L'idée est que Web Server peut rapidement placer une commande sur la file d'attente et renvoyer la réponse à l'utilisateur. L'évolutivité est obtenue en éteignant le nombre de gestionnaires de commandes sans toucher le serveur Web. Évidemment, si vous souhaitez informer l'utilisateur, vous devez utiliser une technologie telle que Signalr . P >
Pour les requêtes, vous devez comprendre qu'ils ne sont pas si bons à l'échelle que les commandes sont. Donc, vous devez être créatif avec ceux-ci. P>
J'approcherais ce problème dans plusieurs étapes pour obtenir les meilleurs résultats. P>
En règle générale dans mes projets, certains des pièges de performance les plus performants proviennent de plusieurs requêtes de DB par charge. Essayez de charger des pages et de consulter les journaux de la requête de base de données. S'il existe des requêtes supplémentaires, essayez de consolider les demandes d'éclaircissement de la charge sur la DB. p>
En outre, assurez-vous que toutes vos feuilles de style et vos actifs JavaScript sont compilées dans des fichiers simples minifiés dans votre environnement de production. Cela réduira la charge sur votre serveur Web. P>
Affichez vos journaux de base de données et voyez quelles transactions causent les analyses de la table la plus latté ou la plus déclenchante. Ajoutez de bons index à ces zones problématiques et surveillez vos performances de l'application. P>
Dans un environnement de test (!!!) Utilisez un outil de fabrique d'entrée de base de données telle que Faker ( C'est rubis mais vous avez l'idée). Testez des transactions communes avec une taille de table beaucoup plus grande que d'habitude et les goulots d'étranglement de la performance commenceront à se montrer plus en évidence. P>
L'augmentation de la base de l'utilisateur entraîne-t-elle une multiplication de 7x de l'ensemble de données stockée ou 7X les utilisateurs accédant à la même taille de données de données que les 1 000 utilisateurs font aujourd'hui?
Bonne question, j'ai ajouté ma réponse dans les questions ci-dessus. laissez-moi savoir si cela répond à votre question
Oui, dans la théorie, vos requêtes existantes de NHibernate ne devraient pas souffrir à cause d'un ensemble de données beaucoup plus grand. Du côté de la base de données, vos problèmes peuvent venir de manipuler un nombre beaucoup plus important de demandes - problèmes de concurrence / verrouillage, etc.
Merci pour le commentaire. J'imagine que SQL Server est utilisé pour des systèmes beaucoup plus grands et concurrents que la mienne :). Existe-t-il des recommandations spécifiques au niveau de la base de données que vous pensez être examinées lors de la gestion de cette échelle. Jusqu'à présent, je viens de confirmer que nous avons suffisamment d'espace disque pour grandir.
Je suis d'accord sur SQL Server, il peut gérer de très grandes bases de données. Que lesdites bases de données plus grandes nécessitent une maintenance et un réglage constants. J'ai une application Web exécutant 5000 utilisateurs et nous rencontrons toujours des problèmes de performance occasionnels après plusieurs années - principalement en raison de la croissance des données.
Une augmentation de 1000 à 7000, je ne m'attendais pas à ce que vous ayez besoin de faire beaucoup. Le plus grand cou de bouteille est invariablement la base de données. Je regarderais les requêtes les plus chères que vous exécutées, puis dans votre environnement de test, augmente votre nombre d'utilisateurs avec un faux générateur de données d'environ 10000, puis essayez d'exécuter le site, il montrera bientôt tout point de douleur que vous pourriez avoir. Après cela, examinez les tests de charge pour voir si les pages qui ont vos requêtes les plus coûteuses à souffrir de plusieurs utilisateurs frappent. Ce serait mon point de départ
Base de données - et éviter les impasses. Avec une augmentation des utilisateurs viendra une augmentation des impacts possibles. Je voudrais examiner un plan solide de détection et de prévention de l'impasse et de sauvegarder des graphiques de dépôt.
Ce n'est jamais la faute de personne, cependant, lorsque vous évomhez sauvagement, vous trouverez des pièges dans «Qu'est-ce qui a fonctionné alors« vs »ce qui est nécessaire maintenant». Vous pouvez bénéficier de serrures de relaxation sur les opérations de lecture pour signaler les procédures stockées, par exemple.