Ich möchte ein E-Commerce-Portal basierend auf LAMP skalieren. Vor kurzem haben wir einen enormen Verkehrsanstieg gesehen.
Was wären Schritte (bitte in der Reihenfolge angeben), um es zu skalieren:
Sollte ich auf Amazon EC2 oder ähnliches umsteigen? Was könnten mögliche Probleme beim Serverwechsel sein?
Müssen wir die Datenbank neu gestalten? Ich lese, Facebook wechselte von MySql zu Cassandra. Welche Art von Codeänderungen sind erforderlich, wenn zu Cassandra gewechselt wird? Wäre Cassandra eine bessere Wahl als MySql?
Möglichkeit von Hadoop , nicht einmal sicher?
Irgendwelche anderen Dinge, an die gedacht werden muss?
Dieser Beitrag wurde hilfreich gefunden. Dieser Blog hat auch schöne Artikel. Was ich wissen möchte, ist eine Liste von Schritten, die ich bei der Skalierung dieser App berücksichtigen sollte.
Zuerst würde ich vorschlagen, sicherzustellen, dass jede Ressource, die von Ihrem Server bedient wird, geeignete Cache-Steuer-Header setzt. Das Ziel ist es sicherzustellen, dass wirklich dynamischer Inhalt jedes Mal frisch serviert wird und jeder stabile oder statische Inhalt so oft wie möglich aus dem Cache eines anderen bedient wird. Warum sollten Sie jedem AOL-Kunden ein Produktbild liefern, wenn Sie es an das erste liefern und es an alle anderen liefern lassen?
Wenn Sie Ihren Webserver und dbms gleichzeitig auf derselben Box ausführen, können Sie die dbms auf einen dedizierten Datenbankserver verschieben.
Sobald Sie das oben genannte getan haben, müssen Sie beginnen, die Besonderheiten zu messen. Welche Ressource wird zuerst ihre Kapazität erreichen?
Wenn zum Beispiel der Webserver fast voll ausgelastet ist, während der Datenbankserver im Leerlauf ist, macht es keinen Sinn, zwischen Datenbanken zu wechseln oder Replikation usw. zu implementieren.
Wenn der Webserver im Leerlauf ist, während der dbms ständig tuckert, macht es keinen Sinn, sich mit dem Wechsel zu einem Cluster load-balanced webservers zu beschäftigen.
Passen Sie zuerst auf die einfachen Dinge auf.
Wenn das dbms der wahrscheinlichste Engpass ist, vergewissern Sie sich, dass Ihre Datenbank über die richtigen Indizes verfügt, damit sie während der Suche schnell Zugriffszeiten erhalten und während der Aktualisierungen keine unnötige Zeit verschwenden. Stellen Sie sicher, dass sich die dbms an einem anderen physischen Medium als an den Tabellen selbst anmelden. Stellen Sie sicher, dass die Anwendung keine verschwenderischen Abfragen usw. ausgibt. Stellen Sie sicher, dass Sie keine kostspieligen analytischen Abfragen für Ihre Transaktionsdatenbank ausführen.
Wenn der Webserver der wahrscheinlichste Engpass ist, profilieren Sie ihn, um zu sehen, wo er die meiste Zeit verbringt und reduzieren Sie die Arbeit, indem Sie Ihre Anwendung ändern oder neue Caching-Strategien implementieren usw. Stellen Sie sicher, dass Sie nichts tun, was Sie verhindert vom Verschieben von einem einzelnen Server auf mehrere Server mit einem Load Balancer.
Wenn Sie sich um das oben Gesagte gekümmert haben, werden Sie viel besser darauf vorbereitet sein, zu mehreren Webservern oder Datenbankservern zu wechseln. Sie werden viel besser darüber informiert sein, ob Sie Ihre Datenbank mit Replikation skalieren oder zu einem völlig anderen Datenmodell wechseln sollen.
1) Als erstes - messen Sie, wie viele Anfragen pro Sekunde Sie am meisten besuchten Seiten bedienen können. Für gut geschriebene PHP-Sites im Durchschnitt muss die Hardware in 200-400 Anfragen pro Sekunde liegen. Wenn Sie nicht dort sind - müssen Sie den Code optimieren, indem Sie die Anzahl der Datenbankanforderungen reduzieren, indem Sie selten geänderte Daten im Memcached / Shared Memory zwischenspeichern, indem Sie PHP accelerator verwenden. Wenn Sie etwa 10-20 Anfragen pro Sekunde haben, müssen Sie Ihr sperriges Framework loswerden.
2) Zweitens - wenn Sie noch auf Apache2 sind, müssen Sie zu lighthttpd oder nginx + apache2 wechseln. Persönlich mag ich die zweite Option.
3) Dann verschieben Sie alle Ihre statischen Daten auf separaten Server oder CDN. Stellen Sie sicher, dass sie mindestens 24 Stunden lang mit "expires" -Headern versehen ist.
4) Erst nach all diesen Dingen sollten Sie darüber nachdenken, zu EC2 / Hadoop zu gehen, mehrere Server zu bauen und die Last auszugleichen (nginx würde Ihnen auch dort helfen)
Nach den Schritten 1-3 sollten Sie in der Lage sein, täglich 10'000'000 Treffer pro Tag zu bedienen.
Wenn Sie nur 1,5-3 mal mehr brauchen, würde ich für einen einzelnen leistungsstärkeren Server (8-16 Kerne, viel RAM für Caching und Datenbank) gehen.
Mit Schritt 4 und mehreren Servern sind Sie auf dem Weg zu 0,1-1 Milliarden Zugriffen pro Tag (aber für wesentlich größere Hardware- und Supportkosten).
Finden Sie heraus, wo Probleme auftreten (oder wahrscheinlich auftreten werden, wenn Sie sie jetzt nicht haben). Zu wissen, was Ihre größte Ressourcennutzung ist, ist wichtig, wenn Sie eine Lösung evaluieren. Bleiben Sie bei Lösungen, die Ihnen die größte Verbesserung bringen.
Betrachte: - Höhere als die benötigte Bandbreitennutzung x Benutzer ist etwas, das Sie ansprechen möchten, unabhängig davon, ob Sie zu ec2 wechseln. Es kostet Sie auf jeden Fall Geld, also ist es einen Versuch wert, solche Dinge anzuschauen: Ссылка - Investieren Sie nicht in das Ändern von Datenbanken, wenn dies kein Problem ist. Finden Sie zuerst heraus, ob das wirklich das Problem ist, und selbst wenn Sie Probleme mit der Datenbank haben, könnte es sich um ein Code-Problem handeln, d. H. Die Datenbank wird oft pro Anfrage geknackt. - Wenn wir nicht über v. große Zahlen sprechen, sollten Sie keine Probleme mit hoher CPU-Auslastung haben, wenn Sie herausfinden, wo sie auftreten / Optimierung lohnt sich dort, wo spezifischer Code eine große Auswirkung auf die gesamte Ressourcennutzung hat. - nachdem Sie sichergestellt haben, dass das oben genannte sinnvoll ist, können Sie beim Caching große Verbesserungen erzielen. In Bandwith (Sicherstellen, dass Browser / Proxy ihren Beitrag zum Caching leisten können), lokale Ressourcennutzung (Vermeidung der wiederholten / wiederholten Wiedergewinnung der gleichen Informationen).
Ich behaupte nicht, dass Sie mit dem oben Genannten alles machen sollten, gerade genug, um sicherzustellen, dass Sie in den nächsten Monaten nicht die gleichen Probleme bekommen. Genug, um herauszufinden, wo Ihre größten Gewinne liegen und ob Sie von den Skalierungsoptionen genügend profitieren. Auf diese Weise können Sie auch zurückkommen und Fragen zu bestimmten Problemen stellen und wie sich diese Skalierungsoptionen auf diese beziehen.
Sie sollten sich vorbereiten, indem Sie einen flexiblen Rahmen wählen und sicher sein, dass sich die Dinge auf dem Weg ändern werden. In manchen Situationen ist es schwierig, das Verhalten Ihres Benutzers vorherzusagen.
Wenn Sie in letzter Zeit eine Verkehrsexplosion gesehen haben, analysieren Sie, welche Seiten am langsamsten sind.
Sie können in die Cloud wechseln, aber EC2 ist nicht die beste. Stellen Sie sicher, dass keine andere Optimierung möglich ist.
Die Datenbank könnte neu gestaltet werden, aber ich bezweifle das alles. Siehe auch die Problempunkte.
Sowohl Hadoop als auch Cassandra sind ziemlich geschickt, aber sie könnten übertrieben sein.
Tags und Links database scalability lamp e-commerce