web-dev-qa-db-fra.com

Que dois-je faire pour accomplir un site Web à fort trafic?

Quelles meilleures pratiques devraient être entreprises pour un site Web qui doit "échelle" pour gérer la capacité? Ceci est particulièrement pertinent maintenant que les gens envisagent le nuage, mais peuvent manquer sur les fondamentaux.

Je suis intéressé à entendre parler de tout ce que vous envisagez de prendre une meilleure pratique des tâches au niveau du développement, de l'infrastructure, de la gestion.

14
goodguys_activate

Conception pour la concurrence

C'est-à-dire que vous codez, prévoyez d'avoir plusieurs threads. Planifiez l'état partagé (souvent juste le dB). Planifier plusieurs processus. Planifier la distribution physique.

Cela vous permet de distribuer votre système sur plusieurs machines et de multiples processus avec équilibrage de la charge. Il vous permet d'avoir des processus redondants en cas d'échec et au cas où vous avez besoin de modifier le système en place, vous n'avez pas à tuer tout service pour le faire.

16
Fishtoaster

Quelques choses que vous pourriez envisager:

  • La séparation lecture et en écriture côtés de votre stockage de données.
    • CQRS/Sourcing événement
    • CQS
    • Passage de messages/Acteurs
  • Éviter les processus partagé et un état de fil
    • Par conséquent évitant verrouillage
    • Vous pouvez éviter cela à travers le système de type en créant vos classes, struct et d'autres types de données immuables, à savoir la non-changement après la construction. Surtout pour les types de données abstraites complexes, il fonctionne étonnamment bien (par exemple la mise en œuvre de jQuery)
  • Le blocage d'threads du serveur Web sur IO. Si vous utilisez ASP.Net Utilisez les pages asynchrones/actions avec la bibliothèque de modèle APM/tâche parallèle (TPL)
  • N'épargnent pas les charges de l'Etat dans le dictionnaire de session utilisateur
    • Ceci doit être déplacé à travers des fils lors de la migration de threads se produisent dans IIS.
    • Ayant le routage intelligent, de telle sorte que des ressources non sécurisées/statiques ne sont pas servis avec le même cadre d'application (par exemple ASP.Net) qui ajoutent les frais généraux. Regardez ayant différents serveurs Web, par exemple.
  • Écriture d'un code de passage de continuation avec un flux motif asynchrone (par exemple, se lient (Haskell) /callcc/Tasks.ContinueWith/F#'s async)
  • Utilisez la théorie faire la queue pour calculer où vos goulots d'étranglement peuvent se produire
  • Utilisez plutôt que des mises à jour Push- base traction à lecture modèles et autres état de l'application. Par exemple. par RabbitMQ/nServiceBus
  • Utilisez les moins caractéristiques applicable " gestionnaire http "
  • Pour les fichiers statiques servent e-tags et les politiques d'expiration du cache pour permettre à l'infrastructure Web au travail comme il se doit (par exemple avec proxy squid)
  • (Engagez-moi pour résoudre vos problèmes de mise à l'échelle et d'obtenir des tutoriels sur place;))
13
Henrik

Partager rien de l'architecture.

Avec cela à l'esprit, et contrairement à ce que vous pensez peut-être, ne sautez pas immédiatement à une solution d'échelle. La surcharge hors système contre un appel dans le système ne doit pas être sous-pesée. Par exemple, il faut beaucoup plus de temps pour créer une connexion de DB dans n'importe quelle interface réseau qu'elle ne pourra apporter un appel local. Budget Combien de temps dans la gestion, le pouvoir et l'effort de réglage sont nécessaires dans l'échelle de l'échelle par rapport à l'extra $ pour un véritable grand système.

Quoi qu'il en soit, je reste un excellent rapport qualité-prix dans les architectures "Partager" et vous pouvez calmer et élaborer vos systèmes lorsque le moment est venu.

4
Jé Queue

Secure, rapide, fiable DNS

J'ai trouvé quelques sites Web de haute capacité à l'aide du serveur DNS du registraire, qui n'avait plus SLA pour disponibilité ou performance. De plus, leurs serveurs étaient situés en Inde et la latence seule augmente la chance que Le spoofer DNS pourrait empoisonner le cache de votre client ou de votre ISP intermédiaire. Cela entraînerait la redirection de votre trafic SSL protégé sans que personne sache.

La vitesse DNS affecte également la période de charge initiale de votre serveur, avant que les enregistrements soient mis en cache.

J'utilise des dyndns ou de Neustar à la plupart de mes clients car ils ont une infrastructure DNS assez solide (bien que cela coûte cher et que je n'ai aucune autre affiliation à ces entreprises).

0
goodguys_activate

parallèle des demandes sur plusieurs noms d'hôte

Une partie de la norme HTTP est une section indiquant que WebClients demandera un maximum de 2 sessions par hôte DNS. Voici une solution où vous et Alias ​​sur votre site Web www.domain.com et obtenez une simultanéité de demande plus élevée, ce qui permet de charger votre page plus rapidement:

https://stackoverflow.com/questions/3653609/how-do-- -code-my-asp-net-page-a-paralliser-townloads-Aross-hostnames

Fondamentalement, il implique de modifier votre gestionnaire HTTP ASP.NET pour alterner les hôtes cibles que vous envoyez des clients à ce que chaque hôte est un CName à "www".

0
goodguys_activate

Je pense que la clé va être simple:

Avoir un code simple. Cela signifie quelque chose que vous regardez et comprenez. Lorsque vous développez et modifiez les serveurs, vous devez savoir ce qui se passe. Vous pourriez également avoir besoin d'ajouter des codeurs qui doivent bien comprendre. Crochets et fichiers XML qui appellent du code aléatoire qui n'est pas évident est très mauvais.

Ensuite, vous pouvez tester et trouver les problèmes.

Regardez ici: http://blog.servint.net/2013/08/27/fra-big-how-to-scale-a-website-par--infrastructure-chat-scales/

Nous avons à Stellarbuild essayons de vous assurer que nos sites Web échouent sans temps de temps. Cela signifie que vous devez pouvoir savoir quel est votre code et où il le fait. Même si vous testez une machine différente, vous ne pouvez pas prendre trop de temps à l'échelle. La plupart des gens ne commencent que quand il est presque trop tard, malheureusement. Vous pouvez optimiser une fois que vous avez fait cela à mon avis.

0
msj121