Große Webapplikationen - Worauf muss man achten?

Julian Maicher

Erfahrenes Mitglied
Hey ..

Bislang habe ich nur relativ "kleine" bzw. nicht-viel-besuchte Webapplikationen geschrieben. Mich würde interessieren, in wie fern man seinen Programmierstil (ruhig allgemein, können es aber auch nur auf PHP beziehen) ändern muss und auf was man besonders achten sollte?!
Gehen wir mal von einer Seite wie dem StudiVZ aus. Pro Tag ~15.000 Neuanmeldungen und mittlerweile fast einer Million User.
Mit so einem Ansturm konnte sie nicht rechnen, deshalb läuft die Seite im Moment auch hinten und vorne nicht. Ich gehe mal schwer davon aus, dass es nicht nur an der Hardware liegt, oder irre ich mich da?

Mich würde auch mal interessieren, was für Server hinter einer solchen Webapplikation stehen?
Bekommt man bei so großen Seiten evt. Schwierigkeiten durch den Gebrauch von PHP?
Was ist im Bezug auf die Datenbanken wichtig?

Bislang habe ich in solchen Größenordnungen nicht gedacht, muss es in Zukunft aber tun - deswegen würde ich mich über viele Antworten freuen.

Danke schonmal im Vorraus!

Gruß,

Julian
 
Je größer das Projekt, desto wichtiger ist ein gut durchdachtes Konzept. Das fängt bei der Wahl der Programmiersprache an und reicht bis zur Wahl einer passenden Hardware.
Was den Programmierstil betrifft, sollte auch dort viel Vorarbeit geschehen. Wenn es mehrere Entwickler gibt, sollte sich auf ein Standard geeinigt werden, damit der Code auch von den anderen verstanden wird und problemlos miteinander interagieren kann. Auch eine Modularisierung ist sinnvoll, solange es eine gemeinsame Schnittstelle gibt.
 
Danke für Deine Antwort.
Okay, das waren jetzt grundlegende Tipps für große Projekte.
Mir ist natürlich bewusst, dass ein großes Projekt ein gutes Konzept braucht.
Mehrere Entwickler wird es auch geben und deswegen müssen auch Konventionen eingeführt werden - richtig.

Was mich mehr interessieren würde, sind die Programmiertechniken.
Bspw. werfe ich jetzt mal das Stichwort Nested Sets in den Raum.
Gehen wir mal von einer Seite aus, die vorerst nur nach dem Prinzip E-V-A (Eingabe, Verarbeitung, Ausgabe) funktioniert (Bspw. das StudiVZ).
 
Der Tree-Traversal-Algorithmus (graphentheoretischer Baum, im deutschen Sprachraum wohl eher als „Nested set“ bekannt) ist ja nur eine Möglichkeit, eine hierarchische Struktur auf einer Datenbank abzubilden. Die Frage wäre also, in welchem Kontext dies benötigt wird.
 
Ich habe mich damit noch nicht konkret beschäftigt, allerdings erlangt man durch die Verwendung von Nested Sets Performance-Vorteile, oder sehe ich das falsch?
Evt. könntest du mir kurz erläutern, was es damit auf sich hat und welche Vorteile sich daraus ergeben? Ich habe darüber schon einen Artikel [1] gefunden, den ich mir heute Abend mal durchlesen werde. Für weitere Lektüre die mir weiterhelfen könnte (nicht zwingend über Nested Sets) wäre ich auch dankbar.

[1] http://www.klempert.de/nested_sets/artikel/
 
Hallo!

Clustering:
Für sehr große Webanwendungen lohnt es sich bestimmte Teile der Infrastrukur redundant (beispielsweise
in Fom eines Clusters) auszulegen (Web Server, Application Server, Datenbank) um Load-Balancing betreiben zu können.
Einen einzelnen Server in diesem Verbund nennt man dann Cluster-Knoten.

Load-Balancing:
Mehrere Server bieten die gleichen Services (z.Bsp. Web-Anwendung) an. Über eine Lastverteilungsstrategie
wie etwa Round Robin wird dann einem Request einen bestimmten Server zugeordnet. Dabei schlägt jeder Request erstmal auf einem bestimmten Server ein der dann einen einen anderen Server aus dem Verbund heraussucht und dann die Anfrage an diesen weiterleitet. Die Architektur kann hier so gewählt sein, dass potentiell jeder Request auf einem neuen Server landen kann.
Darüber hinaus kann man noch solche Eigenschaften wie "Server-Affinity" einstellen, die besagt, dass der
erste Server der den Request von einem bestimmten Client aufgefangen hat auch alle darauf folgenden
Requests von diesem Client bekommt. Das ganze kann man sich auch auf Http-Sessionebene vorstellen. Der
Server auf dem die Http-Session gestartet wurde ist für die Behandlung der Anfragen von diesem Client zuständig.

Ausfallsicherheit durch Replikation:
Um Ausfallsicherheit innerhalb des Clusters zu gewährleisten müssen bestimmte Informationen zwischen
den einzlenen Cluster-Knoten ausgetauscht (und zum Teil Repliziert werden) werden. Dazu gehören etwa u.a. Heart-Beat Informationen (ist der Knoten X noch am Leben?), Session Informationen (Wenn ein Session auf Server X existiert,
und dieser Server ausfällt muß ein anderer Server in der Lage sein die Session zu übernehmen und weiterzuführen).
Replikation kann dabei nicht nur auf Web-Server Ebene sondern über alle Schichten der Anwendung (Application Server, Datenbank erfolgen). Die meisten Web Server, Application Server und Datenbanken bieten diesbezüglich vielfältige Möglichkeiten an.

Weiterhin sollte man soweit es geht statische Seiten verwenden... bietet man beispielsweise große Bildergalerien an, so muß man die nicht immer dynamisch aus der Datenbank generieren... es reicht vollkommen aus dies einmal zu tun un dann das Ergebnis abzuspeichern und an den Client auszuliefern und dann bei Bedarf (z.bsp. bei Änderung an der Datenbasis) das ganze neu zu erzeugen.

Des weiteren sollte man bei solch einem Projekt einen Datenbankspezialisten an Board haben, der zum einen ein performantes Datenmodell entwirft und zum anderen entsprechende Tuningmaßnahmen ("geschickte" Index-Erstellung, Daten-Partitionierung, Abfrage-Optimierung, Daten-Bereinigung etc.) auf der Datenbank umsetzen kann.

Darüber hinaus sollte man statische Resourcen (Bilder, große Dateien) von einem eigenen (web)-Server liefern lassen der auf I/O optimiert ist.

Gruß Tom
 
Jedes Datenmodell hat Vor- und Nachteile. Bei der Abbildung von hierarchischen Strukturen etwa gibt es zwei populäre Modelle: einmal das Adjazenz-Modell, bei dem jedem Element ein Elternelement zugeordnet wird, und das Tree-Traversal-Modell, bei dem jedem Element das „benachbarte“ Element bekannt ist. Gijs Van Tulder hat diese beiden Modelle mal in einem Artikel gegenübergestellt und die Vor- und Nachteile erläutert.
 
Zurück