Question

Quelles sont les meilleures pratiques devraient être entreprises pour un site Web qui a besoin de « hors échelle » à la capacité de la poignée? Ceci est particulièrement pertinent maintenant que les gens envisagent le nuage, mais peut manquer sur les fondamentaux.

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

Était-ce utile?

La solution

Conception pour Concurrency

C'est, comme vous codez plan autour de plusieurs threads en cours. Planifier l'état partagé (souvent le db). Plan de plusieurs processus. Plan de distribution physique.

Cela vous permet de distribuer votre système sur plusieurs machines, et à travers de multiples processus avec l'équilibrage de charge. Il vous permet d'avoir des processus redondants en cours d'exécution en cas d'échec, et dans le cas où vous avez besoin de modifier le système en place, vous n'avez pas de tuer tous les services de le faire.

Autres conseils

Quelques choses que vous pourriez envisager:

  • séparatrice lecture et en écriture côtés de votre stockage de données.
    • CQRS / Sourcing événement
    • CQS
    • passage de messages / Acteurs
  • Eviter processus partagé et un état de fil
    • évitant ainsi le 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)
  • bloquant pas les threads de serveur Web sur IO. Si vous utilisez des pages asynchrones d'utilisation ASP.Net / actions avec la bibliothèque de modèle APM / tâche parallèle (TPL)
  • Pas économiser des charges de l'état dans le dictionnaire de session utilisateur
    • Ceci doit être déplacé à travers des fils lors de la migration de threads se produisent dans IIS.
    • Avoir le routage intelligent, ce qui ne sont pas servis avec le même cadre d'application des ressources non sécurisées / statiques (par exemple ASP.Net) qui ajoutent les frais généraux. Regardez ayant différents serveurs Web, par exemple.
  • Code continuation de passage d'écriture d'un flux de travail modèle asynchrone (par exemple, se lient (Haskell) /callcc/Tasks.ContinueWith/F#'s async)
  • Utiliser 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 gigognes en lecture des modèles et d'autres états d'application. Par exemple. par RabbitMQ / nServiceBus
  • Utiliser les moins caractéristiques applicable 'http gestionnaire'
  • Pour les fichiers statiques, servir 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)
  • (me embauchons pour résoudre vos problèmes de mise à l'échelle et d'obtenir des tutoriels sur place;))

Partager l'architecture Rien.

Avec cela à l'esprit, et contrairement à ce que vous pourriez penser, ne pas sauter à une solution d'échelle tout de suite. Les frais généraux hors système par rapport à un appel en système ne doit pas être sous-pesé. Par exemple, il faut beaucoup plus de temps pour établir une connexion DB à travers une interface réseau que d'en faire un appel local. Budget combien de temps dans la gestion, la puissance et l'effort de mise au point est nécessaire à l'échelle de départ par rapport au $ supplémentaire pour un système vrai grand.

Peu importe, je il y a encore une grande valeur dans les architectures « rien partager » et vous pouvez couche et échelle vos systèmes quand vient le temps.

Demandes paralléliser sur plusieurs noms d'hôte

Une partie de la norme HTTP est une section qui dit WebClients demandera un maximum de 2 séances par hôte DNS. Voici une solution où vous et alias votre www.domain.com et obtenir un accès simultané à la demande plus élevée, ce qui rend votre chargement de page plus rapide:

https: / /stackoverflow.com/questions/3653609/how-do-i-code-my-asp-net-page-to-parallelize-downloads-across-hostnames

Fondamentalement, il implique la modification de votre ASP.NET HTTP gestionnaire pour alterner les hôtes cibles que vous envoyez clients à, où chaque hôte est un CNAME « www ».

sécurisée, rapide, fiable DNS

J'ai trouvé quelques sites de grande capacité en utilisant le serveur DNS du bureau d'enregistrement, qui n'a pas SLA pour une disponibilité ou de performance. De plus, leurs serveurs sont situés en Inde et augmente la latence seule la probabilité qu'un usurpateur DNS pourrait empoisonner votre client, ou le cache du fournisseur d'accès Internet intermédiaire. Cela provoquerait même votre trafic protégé par SSL à être redirigés sans que personne ne sache.

vitesse DNS affecte également le temps de chargement initial de votre serveur, avant que les enregistrements sont mises en cache.

J'utiliser DynDNS ou Neustar à la plupart de mes clients, car ils ont une infrastructure DNS assez solide (mais il est cher et je n'ai aucune affiliation à ces entreprises).

Je pense que la clé va être simple:

Code simples ont. Cela veut dire quelque chose que vous regardez et comprenez. Comme vous développez et les serveurs de changement que vous devez savoir ce qui se passe. Vous pourriez aussi avoir besoin d'ajouter des codeurs qui ont besoin de comprendre rapidement. Crochets et fichiers XML qui appellent un 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/going-big-how-to-scale-a-website-part-1-infrastructure-that-scales/

stellarbuild essayer de nous assurer que nos sites sans échelle de temps d'arrêt. Cela signifie que vous devez être en mesure de savoir ce que votre code fait et où elle le fait. Même si vous testez une autre machine, vous ne pouvez pas prendre trop de temps à l'échelle. La plupart des gens commencent seulement quand il est presque trop tard, malheureusement. Vous pouvez optimiser seulement une fois que vous faites cela à mon avis.

Licencié sous: CC-BY-SA avec attribution
scroll top