Frage

Welche best practices sollten durchgeführt werden, für eine website, die Bedürfnisse zu "skalieren", um Griff Kapazität?Dies ist besonders relevant, jetzt, dass die Menschen angesichts der cloud, kann aber nicht auf die Grundlagen.

Ich bin daran interessiert zu hören, über alles, was Sie als eine best practice-von der Entwicklung-level-Aufgaben, für die Infrastruktur, das management.

War es hilfreich?

Lösung

Design für Parallelität

Das heißt, wenn Sie codieren, planen Sie, mehrere Threads zu haben. Planen Sie den gemeinsamen Zustand (oft nur die DB). Planen Sie mehrere Prozesse. Planen Sie die physische Verteilung.

Auf diese Weise können Sie Ihr System auf mehrere Maschinen und mehrere Prozesse mit Lastausgleich verteilen. Sie können redundante Prozesse im Fehlerfall ausgeführt werden. Wenn Sie das System an Ort und Stelle ändern müssen, müssen Sie nicht den gesamten Service töten.

Andere Tipps

Ein paar Dinge, die Sie in Betracht ziehen könnten:

  • Trennung von Lese- und Schreibseite Ihrer Datenspeicherung.
    • CQRS/Event Sourcing
    • CQS
    • Nachrichten-Passing/Schauspieler
  • Vermeiden Sie gemeinsamen Prozess- und Thread -Status
    • Daher vermeiden Sie das Schließen
    • Sie können dies durch das Typsystem vermeiden, indem Sie Ihre Klassen, Strukturen und andere Datentypen erstellen, um unveränderlich zu sein, dh nach der Konstruktion nicht nachzukommen. Insbesondere für komplexe abstrakte Datentypen funktioniert es überraschend gut (zB JQuery -Implementierung)
  • Nicht blockieren Webserver -Threads auf IO. Wenn Sie ASP.NET verwenden, verwenden Sie asynchrone Seiten/Aktionen mit der APM-Muster/Task-Parallel-Bibliothek (TPL)
  • Sparen Sie keine Menge Zustand im Benutzer-Session-Wörterbuch
    • Dies muss über Threads hinweg bewegt werden, wenn Fadenmigrationen in IIS auftreten.
    • Intelligenter Routing, so dass nicht sichere/statische Ressourcen nicht mit demselben Anwendungsrahmen (z. B. ASP.NET) bedient werden, das Overhead hinzufügt. Schauen Sie sich zum Beispiel verschiedene Webserver an.
  • Schreiben von Codes-Passing-Code mit einem asynchronen Workflow-Muster (z.
  • Verwenden Sie die Warteschlangentheorie, um zu berechnen, wo Ihre Engpässe auftreten können
  • Verwenden Sie Push- und Pull-basierte Updates, um Lesemodelle und andere Anwendungsstatus zu erhalten. EG durch Rabbitmq/Nservicebus
  • Verwenden Sie die am wenigsten geltenden "HTTP-Handler" am wenigsten.
  • Für statische Dateien servieren Sie E-Tags und Cache-Ablaufrichtlinien, damit die Webinfrastruktur so funktioniert, wie sie sollte (z. B. mit Tintenfisch-Proxy).
  • (Stellen Sie mich ein, um Ihre Skalierungsprobleme zu lösen und Tutorials vor Ort zu erhalten;))

Teilen Sie nichts Architektur.

In diesem Sinne und im Gegensatz zu dem, was Sie vielleicht denken, springen Sie nicht sofort zu einer Skala-Out-Lösung. Der Off-System-Overhead im Vergleich zu einem In-System-Anruf sollte nicht unterwogen werden. Beispielsweise dauert es viel länger, um eine DB -Verbindung über eine beliebige Netzwerkschnittstelle herzustellen, als ein lokaler Anruf zu tätigen. Budget, wie viel Zeit in Management, Strom und Tuning-Bemühungen im Scale-out im Vergleich zu den zusätzlichen $ für ein echtes großes System benötigt werden.

Unabhängig davon gibt es in "Architekturen" "nichts" -Shedical "-Anchitekturen immer noch einen großen Wert, und Sie können Ihre Systeme in der Zeit schichten und skalieren.

Parallelisieren-Anfragen über mehrere Hostnamen

Der Teil der HTTP-standard ist ein Abschnitt, der sagt webclients Anfrage wird maximal 2 Sitzungen pro DNS-Host.Hier ist eine Lösung, wo Sie und alias aus Ihrem www.domain.com und erhalten eine höhere Anforderung Parallelität, Ihre Seite schneller geladen:

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

Grundsätzlich erfordert die Bearbeitung Ihrer ASP.NET HTTP-Handler zur Alternative des Ziel-hosts senden Sie Kunden, wo jeder host ist ein CNAME für "www".

Sichere, schnelle, zuverlässige DNS

Ich fand einige Websites mit hoher Kapazität mit dem DNS-Server des Registrars, der keine SLA für Betriebszeit oder Leistung hatte. Darüber hinaus befanden sich ihre Server in Indien und allein die Latenz erhöht die Wahrscheinlichkeit, dass ein DNS -Spoofer die Kunden Ihres Kunden oder den Intermediate -ISP -Cache vergiften könnte. Dies würde dazu führen, dass selbst Ihr von SSL geschützter Verkehr umgeleitet wird, ohne dass jemand es wusste.

Die DNS -Geschwindigkeit wirkt sich auch auf die anfängliche Ladezeit Ihres Servers aus, bevor die Datensätze zwischengespeichert werden.

Ich benutze Dyndns oder Neustar für die meisten meiner Kunden, da sie eine ziemlich solide DNS -Infrastruktur haben (obwohl es teuer ist und ich keine andere Zugehörigkeit zu diesen Unternehmen habe).

Ich denke, dass der Schlüssel einfach sein wird:

Habe einfachen Code. Das bedeutet etwas, das Sie betrachten und verstehen. Wenn Sie Server erweitern und ändern, müssen Sie wissen, was los ist. Möglicherweise müssen Sie auch Codierer hinzufügen, die schnell verstehen müssen. Hooks und XML -Dateien, die zufällige Code aufrufen, ist sehr schlecht.

Dann können Sie die Probleme testen und finden.

Schau hier: http://blog.servint.net/2013/08/27/ing-big-how-to-scale-a-website-part-1-infrastructure-that-scales/

Wir bei Stellarbuild versuchen, sicherzustellen, dass unsere Websites ohne Zeitraum skalieren. Das bedeutet, dass Sie wissen müssen, was Ihr Code tut und wo er es tut. Selbst wenn Sie eine andere Maschine testen, können Sie nicht zu lange dauern. Die meisten Menschen beginnen nur, wenn es fast zu spät ist. Sie können nur dann optimieren, wenn Sie dies meiner Meinung nach tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
scroll top