Wie codieren Sie in PHP die Skalierbarkeit?

8

Ich weiß, dass dies eine allgemeine Frage sein mag, aber was genau geht in die Skalierung für alle Benutzer ein, denen Sie begegnen werden, auch wenn dies nicht in den nächsten Monaten der Fall ist? Ich habe einige Nachforschungen angestellt und das meiste, was getan wird, ist serverseitig, mit Caches und ähnlichen Dingen. Alle Punkte in die richtige Richtung wären hilfreich.

Andy
quelle

Antworten:

24

"Auch wenn nicht in den nächsten Monaten" riecht nach vorzeitiger Optimierung. Tu das nicht:

  • Es lohnt sich nicht. Viele Menschen glauben bei der Realisierung eines Projekts, dass ihr Projekt das zweite Facebook sein wird. Dann veröffentlichen sie es und bemerken dann, dass zehn Besucher pro Monat das Beste sind, was sie tun können. Es würde helfen, weniger Geld und Zeit für die Optimierung für weitere Skalierbarkeit und mehr Zeit für das Nachdenken über das Projekt selbst aufzuwenden.

  • Es ist wie bei Engpässen und Profilen: Sie haben immer den Eindruck, dass Sie genau wissen, wo sich der Engpass befindet, und in den meisten Fällen stellen Sie fest, dass Sie sich bei der Profilerstellung geirrt haben. Machen Sie zuerst Ihre Bewerbung. Sehen Sie, wie es verwendet wird. Profiliere es. Sammeln Sie BI-Daten. Sammeln Sie Leistungsmetriken. Analysieren Sie es. Überprüfen Sie, ob Ihre Analyse richtig war. Machen Sie basierend auf Ihrer Analyse Vorhersagen über die Zukunft und optimieren Sie dann für die Skalierbarkeit, was Sie wirklich zur Optimierung benötigen.

Beispielsweise muss eine skalierbare Webanwendung auf mehreren Servern gehostet werden können. Das letzte Projekt, das ich für meinen Kunden durchgeführt habe, sollte skalierbar sein. Es gab die Wahl: Entweder verbringen wir 1,5 Monate mehr damit, dass die Web-App auf mehreren Servern funktioniert, oder der Kunde kauft einen hochwertigen Server (nur ein Computer) und die Web-App wird nur auf diesem Computer gehostet. Der Kauf eines teuren Servers war viel günstiger, wobei sowohl die direkten Kosten (Preis des Servers gegenüber dem Preis von 1,5 Monaten Arbeit) als auch die langfristigen Einsparungen (Stromverbrauch eines qualitativ hochwertigen Servers gegenüber Stromverbrauch mehrerer niedriger Server) berücksichtigt wurden -end Server). Jetzt läuft die App einige Monate und wenn es nach den Metriken eines Tages ein Problem mit der Skalierbarkeit geben würde, würde dies in erster Linie die Datenbank betreffen.

Jetzt kann eine Anwendung in mehreren Punkten mehr oder weniger skalierbar sein:

  • Datenbank: Nach meiner persönlichen Erfahrung stammen die meisten Probleme im Zusammenhang mit der Skalierbarkeit aus der Datenbank. Hoffentlich gibt es viele Möglichkeiten, die Datenbank für jedes branchenübliche Datenbankmodul skalierbar zu machen, und schon vorher gibt es viele Möglichkeiten, die Datenbankstruktur zu verbessern und die Abfragen zu optimieren . Caching hilft auch.

  • Netzwerk: Bandbreite kann in einigen Konfigurationen ein echtes Problem sein, und manchmal können Sie nichts dagegen tun, ohne Kosten zu verursachen, die Sie sich nicht leisten können. Um auf dieser Ebene nicht blockiert zu werden, können Sie das visuelle Design der Website optimieren , um weniger Bilder oder besser komprimierte Bilder zu erhalten , das Layout der Seite zu optimieren, die HTTP-Anforderungen (über CSS-Sprites ) zu reduzieren und die HTML-Menge zu reduzieren Code gesendet (über AJAX ) usw. HTTP-Komprimierung ist ein Muss. Browser-Caching auch, aber Ihre Metriken können zeigen, dass viele Clients einen leeren Cache haben.

  • CPU- und Speicherauslastung: Das Portieren einer Anwendung, die von mehreren Servern gehostet werden soll, kann sowohl auf Infrastruktur- (Hardware-) als auch auf Anwendungs- (Software-) Ebene ebenfalls schmerzhaft sein. Um dies zu vermeiden, verwenden Sie umfangreiches Caching und profilieren Sie die Anwendung, um die Engpässe schrittweise zu beseitigen .

Arseni Mourzenko
quelle
Vielen Dank. Derzeit entwickle ich mich nicht dafür. Zufälligerweise werde ich eigentlich nur Informationen sammeln, um zu sehen, wohin die Dinge gehen. Ich war nur neugierig, was andere wissen, aber danke für den Rat!
Andy
Aha. Ich habe die Antwort geändert, um Ihr Anliegen besser anzusprechen.
Arseni Mourzenko
5

Die Skalierbarkeit ist sehr sprachunabhängig, daher gibt es keine PHP-spezifische Sache dafür. Schlüsselfaktor ist die Entkopplung von Subsystemen, die über sprachunabhängige Protokolle kommunizieren (wenn Sie beispielsweise den Webservice von Ihrem PHP-Code aus aufrufen müssen, verwenden Sie keine PHPs serialize, sondern JSON, auch wenn beide Komponenten derzeit beide in PHP implementiert sind). Auf diese Weise können Sie Komponenten durch andere Alternativen ersetzen, die möglicherweise in anderen Technologien entwickelt wurden.

Auf dem Blog highscalability.com finden Sie viele Beispiele für skalierbare Architekturen, die mit PHP implementiert wurden

vartec
quelle
Ich verstehe, was Sie sagen, also teilen Sie die Arbeit im Wesentlichen auf. Ich schätze den Rat.
Andy
Ich habe mir das PHP-Dokument beim Serialisieren angesehen. Ich bin damit nicht allzu vertraut. Was ist der Zweck, wenn es Ihnen nichts ausmacht, wenn ich frage?
Andy
Ich werde bestimmte Beiträge nicht verlinken, da sie möglicherweise voreingenommen sind, sondern nur nach SOA (Service Oriented Architecture) und Distributed Systems suchen. Im Internet fehlen Bibliotheken und Richtlinien zu PHP. Der einfachste Einstieg ist eine Messaging-Infrastruktur und ein ereignisgesteuertes Design.
Andho
2
@Andy: Zweck von serializeist es, den Status des Objekts in einen String zu serialisieren. In anderen Sprachen verwendete Synonyme für Serialisierung sind Marshalling oder Beizen. Das Problem bei dieser Art der Serialisierung ist, dass sie sprachspezifisch ist. Aus diesem Grund sind gut definierte Standards wie JSON besser für die Weitergabe von Daten an Webdienste geeignet.
Vartec
Oh ja, ich habe mich tatsächlich gefragt, wie ich bestimmte Informationsserverseiten speichern würde, und ich denke, das hilft mir dabei. Um sicherzugehen, dass ich die Seite des Cookie-Informationsservers speichern möchte, würde ich Serialize verwenden? Vielen Dank!
Andy
1

Die Sorge um die Skalierbarkeit lohnt sich wahrscheinlich nicht: Wenn Ihr Projekt startet und die Marke erreicht, von der aus Sie nicht skalieren können, indem Sie mehr Hardware hinzufügen, haben Sie genug Geld, um gründlichere Maßnahmen zu finanzieren. Wenn dies nicht der Fall ist, ist jede Anstrengung, die Sie jetzt unternehmen, eine Verschwendung Ihrer Zeit und Ressourcen.

Es gibt jedoch einige Dinge, die Sie tun können und sollten, um Ihre Anwendung wartbar zu halten. Wenn Sie diese Richtlinien befolgen, wird die Berücksichtigung der Skalierbarkeit später im Spiel viel einfacher. Eine ideale Lösung ermöglicht es Ihnen, den gesamten Datenspeichercode mit nur minimalen Änderungen an der Programmlogik und ohne Änderungen am Präsentationscode auszutauschen.

tdammers
quelle