2009-06-24 15 views
2

Wir haben ein neues Projekt für eine Web-App, die Banner-Anzeigen auf Websites (als Netzwerk) anzeigen wird und unsere Schätzung ist es für 20 bis 40 Milliarden Impressionen pro Monat.Beste Skalierungsmethoden für eine stark frequentierte Webanwendung?

Unsere aktuelle Sprache ist in ASP ... aber sind auf PHP umgestellt. Hat PHP 5 seine Grenzen bei der Skalierung von Webanwendungen? Oder sollte mein Team in die Übernahme von JSP investieren?

Oder ist es eine Frage des App-Servers und/oder DB? Wir planen, Oracle 10g als Datenbank zu verwenden.

+1

Und wie wäre es mit Cloud Computing? Und werden Sie Datenbanken benutzen? – Michiel

+2

40 billon a month ... lol –

+0

Wenn Sie mehrere Web-/Datenbank-Server-Combos verwenden, benötigen Sie eine Echtzeit-Kommunikation/Synchronisation zwischen ihnen oder wird ein rund-robbing DNS zu cpompleely trennen Systeme (mit vielleicht ein Datenbank-Update/Replikation einmal am Tag) genügen? – VolkerK

Antwort

1

Ich denke, dass es keine Frage der Sprache ist, aber es kann eine Frage der Datenbankgeschwindigkeit als CPU-Verarbeitungsgeschwindigkeit sein. Haben Sie eine Webfarm in Betracht gezogen? Auf diese Weise können Sie mehr als eine Maschine für Ihre Anwendung bereitstellen. Es gibt einige Möglichkeiten, diese Lösung zu implementieren. Sie können mit zwei Servern beginnen und weitere Server hinzufügen, wenn die App mehr Verarbeitungsvolumen anfordert.

In anderen Punkt ist Oracle 10g ein sehr guter Datenbankserver, meiner bescheidenen Meinung nach brauchen Sie nur einen eigenständigen Oracle-Server, um das Volumen der Anfrage zu begehen. Denken Sie daran, dass ein SQL-Server schneller ist, da die Leute mehr oder weniger die gleichen Dinge jedes Mal anfordern und es in der Webanwendung passiert, wenn Sie Ihr Datenbankschema sorgfältig planen.

Sie müssen auch alle Ad Server-Anwendungslösungen überprüfen und es gibt eine sehr gute, versuchen Sie einfach Google mit "Open Source AD-Server".

6

Sie erkennen, dass 40 Milliarden pro Monat ist etwa 15.500 pro Sekunde, richtig?

Skalierung wird nicht Ihr Problem sein - Infrastruktur Zeitraum wird Ihr Problem sein. Egal, für welchen Technologie-Stack Sie sich entscheiden, Sie werden eine enorme Menge an Hardware benötigen - wie andere in Form einer Farm oder Cloud gesagt haben.

+0

Sagen wir, dass jede Banner-Anzeige 20k groß ist und niemals zwischengespeichert wird. Das sind über 300 MB pro Sekunde, die Sie benötigen, um zu bedienen. –

+0

Sie brauchen tatsächlich nur eine ausreichende Menge, um als Ursprung für ein CDN zu dienen. –

+0

Theoretisch müssen Sie genug sein, um sowohl als Ursprung für ein CDN als auch direkt zu dienen. – BigSack

2

Diese Frage (und das gesamte Thema) ist ein bisschen subjektiv. Sie können ein langsames Hundeprogramm in jeder Sprache schreiben und es auf irgendwas hosten.

Ich denke, Ihre beste Wette ist zu sehen, wie Ihre aktuelle Implementierung unter Last funktioniert. Vielleicht werden nur ein paar Optimierungen die Dinge für Sie arbeiten lassen - aber die Veränderung Ihres zugrunde liegenden Frameworks scheint ein bisschen viel zu sein.

Das soll gesagt werden - Ihr Infrastruktur-Team wird auch einbezogen werden müssen, da es scheint, dass Sie einige schwere Lastanforderungen haben.

Viel Glück!

1

PHP wird in der Lage sein, Ihre Bedürfnisse zu erfüllen. Wie andere bereits gesagt haben, wird Ihre erste Netzwerkgrenze jedoch Ihre Netzwerkinfrastruktur sein.

Aber Ihre zweite Grenze wird schreiben skalierbaren Code sein. Sie werden eine gute Abstraktion und Isolation benötigen, damit Ressourcen auf jeder Ebene leicht hinzugefügt werden können. Dinge wie eine schnelle Datenobjekt-Mapper, mehrere Daten-Caching-Mechanismen, separate Konfigurationsdateien und so weiter.

8

Nichts für ungut, aber ich vermute stark, dass du weit überschätzt wie viele Impressionen wirst du bedienen.

Das heißt:

PHP oder andere in der Anwendungsebene verwendet Sprachen wirklich wenig mit Skalierbarkeit zu tun haben.Da die Anwendungsebene ihren Status an die Datenbank oder ein gleichwertiges Element delegiert, ist es einfach, so viel Kapazität hinzuzufügen, wie Sie hinter dem entsprechenden Lastenausgleich benötigen. Die Wahl der Sprache beeinflusst die Effizienz des Servers und damit die Kosten, aber das ist anders als die Skalierbarkeit.

Es skaliert den Zustand/Datenspeicher, der komplizierter wird.

Für Ihre App haben Sie drei grundlegende Jobs:

  1. welche ad zeigen wir?
  2. dient das Add
  3. Protokollierung der Eindruck

Jedes von ihnen Gedanken erfordern und wahrscheinlich verschiedene Werkzeuge.

Die zweite, die die Zugabe dient, ist am einfachsten: Verwenden Sie eine CDN. Wenn Sie tatsächlich das von Ihnen beanspruchte Volumen bedienen, sollten Sie in der Lage sein, günstige Raten auszuhandeln.

Die Entscheidung, welche Anzeige angezeigt wird, hängt sehr stark von Ihrem Netzwerk ab. Das kann so einfach sein wie das Lesen einiger Zeilen aus einer Datenbank, die für eine bestimmte Eigenschaft für einen bestimmten Kalenderzeitraum Anzeigen-Placements bereitstellen. Oder es kann komplexe kontextbezogene Werbung wie Google sein. Wenn man davon ausgeht, dass es eher die erstere ist und die Datenbank der Platzierungen klein ist, dann ist dies die einfache Aufgabe, die Datenbanklesevorgänge zu skalieren. Sie können Replikationsbäume oder alternativ einen Caching-Layer wie memcached verwenden.

Die letzte wird letztlich am schwierigsten sein: Wie skaliert man die Schreibvorgänge? Ein gängiger Ansatz wäre, Datenbanken weiterhin zu verwenden, aber eine skalierende Skalierungsstrategie zu übernehmen. Exotischere Optionen könnten die Verwendung eines Schlüssel/Wert-Speichers sein, der Zähleranweisungen unterstützt, beispielsweise Redis, oder eine skalierbare OLAP-Datenbank wie Vertica.

Alle oben genannten Annahmen gehen davon aus, dass Sie Platz im Rechenzentrum und die Netzwerkbereitstellung sicherstellen können, die diese Belastung bewältigen können, was bei den von Ihnen gesprochenen Nummern nicht trivial ist.

Verwandte Themen