Patrick Figel: StartUp: Optimale Serveraufteilung (Beispiel ist gegeben)?

Beitrag lesen

  1. Webserver, dedicated:
  • Ist Ziel-IP des DNS-Eintrags der Domain
    Das wäre ein SPOF. Je nachdem, welches Risiko ein Ausfall für dich bedeutet, sollte hier ein Cluster eingesetzt werden. die Hochverfügbarkeit von RDS und S3 bringt nichts, wenn der Webserver ausfällt.

Gibt es da empfehlenswerte Anbieter? Server Housing wollte ich jetzt nicht in Anspruch nehmen, wegen der Anschaffungskosten. Aber da gibt es bestimmt auch fertige Angebote, nur findet man die *nicht* bei 1&1 und Konsorten... fällt dir da spontan was ein?

Serverhousing ist in DE zwar ziemlich billig (in AT fast nicht leistbar ...), aber bei drei Servern wirst du mit Service-Verträgen etc. mindestens € 10.000 an Anschaffungskosten haben.
Die dedicated Server bei Host Europe haben ein gutes P/L-Verhältnis.

Bei der Server-Dimensionierung solltest du auf möglichst viel Arbeitsspeicher achten. Vielleicht ist auch eine Kombination von nginx als Load Balancer und einem anderen Webserver (zB lighttpd mit php) für die dynamischen Inhalte sinnvoll - das hängt aber vom Anwendungsfall ab.

Schön, ich war sowieso am überlegen, ob ich nginx oder lighty verwende. Die Idee mit dem Load Balancer klingt sinnvoll. Das wäre dann technisch gesehen ein Server (also tatsächlich ein hardwaretechnisches Gerät) als Load Balancer und dann mindestens 2 Server dahinter. Oder macht man sowas inzwischen virtualisiert?

nginx lässt sich als caching reverse proxy einrichten. Dabei werden die Requests an die dahinterliegenden PHP-Webserver weitergeleitet. Der Response kann dann anschließend von nginx gecached werden, sodass spätere Requests direkt von nginx aus dem Cache (statisch) bedient werden können.
Bei der Konfiguration des nginx-Cache gibt es mehrere Wege zum Ziel. Du kannst z.B. Cache-Control-Header in deiner Anwendung mitschicken, die von nginx ausgewertet werden.
Virtualisieren lässt sich das ganze natürlich auch, würde das ganze aber komplizierter machen.

S3 bzw. CloudFront lässt sich sehr gut als CDN einsetzen (Edge-Standorte weltweit mit CloudFront). Die Transferraten sind sehr hoch, die Latenz in Ordnung. Damit würdest du den Webserver sehr stark entlasten, sämtliche statische Inhalte können über S3 ausgeliefert werden

Dann ist S3 perfekt geeignet, vor allem mit dem EC2 - genau so hatte ich mir das vorgestellt! Aber du hast mich da auf eine weitere Idee gebracht:

Wenn ich nun ein Template für die Startseite baue, dass z. B. alle 5 oder 10 Minuten durch einen Cronjob neu mit Inhalten befüllt und als index.html abgespeichert wird - dann habe ich eine statische Startseite, die trotzdem immer top-aktuell ist. Da viele Leute nur die Startseite ansurfen und direkt wieder gehen, würde dafür dann gar kein PHP-Parser anspringen müssen. Ich hab von dieser Methode mal gehört, da ging es um Optimierung einer Website für TV-Werbung.

Wenn ich das so machen würde, und die statische Startseite dann vielleicht auch noch auf dem S3 speichern würde - wäre das nicht zusätzlich Entlastung? Ich könnte den Aufruf der index.html per RewriteRule vom Webserver auf den S3 umlenken. Oder wäre das deiner Meinung nach eher viel Aufwand für nichts?

Genau diesen Effekt erreichst du mit der oben genannten nginx-Konfiguration.

Beim Load Balancing hättest du auch noch die Möglichkeit, den Elastic Load Balancer zu verwenden. Dabei werden die Anfragen auf alle anderen EC2-(Webserver)-Instanzen verteilt. Fällt einer der Webserver aus, wird dies vom Load Balancer erkannt und der Webserver nicht mehr verwendet.
Vorteil bei dieser Lösung wäre, dass du nicht auch noch ein Load Balancing-Cluster aufbauen müsstest, weil sich Amazon darum kümmert. ELB kostet ungefähr $ 18/Monat ohne Traffic.
Allerdings musst du dich um das Caching bei dieser Lösung an anderer Stelle kümmern (direkt im Webserver). Und natürlich müssten auch alle Webserver in EC2 betrieben werden, da der Load Balancer nur mit EC2-Instanzen funktioniert (Vielleicht lässt sich das ganze über Ubuntu Enterprise Cloud irgendwie mit einem dedicated Server kombinieren ...).