phpAdsNew im kommerziellen Einsatz

BillboardHöre ich von Web-Applikationen, deren Namen mit “php” beginnen, sträuben sich bei mir die Nackenhaare: Meist sind dies löchrige Bastelarbeiten für die private Homepage. Eine derartige App sorgt aber für 95% von unserem Umsatz: phpAdsNew.

Täglich über drei Millionen Bannereinblendungen werden bei tilllate durch dieses Tool ausgeliefert. Damit eine derartige Performance überhaupt möglich ist, mussten wir phpAdsNew in einem Cluster aufbauen: Request auf das Ad-Tool laufen über einen Load Balancer auf momentan zwei identische Dual-Xeon/4GB/Gentoo-Mühlen. Dort läuft die Applikation (natürlich mit e-Accelerator) und greift auf einen weiteren DB-Server zu (MySQL5).

Die Banner werden jedoch nicht direkt über das phpAdsNew-Frontend eingebaut. Das Tool wird von unserer Kampagnenverwaltung über eine selbst entwickelte XML-RPC-Schnittstelle ferngesteuert. Kampagnen und Banner werden damit nur noch an einem Ort eingetragen.

Arbeit am Quellcode

Die Banneranzeige wurde ebenfalls gepimpt: Bei den gängigen Adtools werden die Banner nach dem Zufallsprinzip angezeigt. 5 Banner sind im Pool. Mit rand(1,5) wird einer ausgewählt und dem Besucher ausgeliefert. Dies hat aber zur Folge, dass gewisse Banner oft angezeigt werden, andere selten. Hier ein Muster, welche Banner ausgeliefert werden:

153512552411415425522523211234

10 Pageviews muss Kunde “4” auf sein Banner warten, bis es angezeigt wird. Das sorgt für Ärger. Dank dem Rosenkranz-Algorithmus erreichen wir eine deterministische und damit gerechtere Verteilung. Jeder Besucher erhält unabhängig von den anderen Besucher auf der Seite die folgende Folge von Bannern:

123451234512345123451234512345

Der Algorithmus unterstützt auch unterschiedliche Wahrscheinlichkeiten unter den Bannern (d.h. Banner 1 hat Gewicht 3 und Banner 2 hat Gewicht 2) und liefert immer noch deterministisch aus.

Schön ist phpAdsNew quelloffen. Nur so sind solche Anpassungen möglich.

Security-Probleme

Ein Problem mit eigenhändigen Quellcode-Modifikationen ist aber, dass man nicht mehr einfach neue Versionen aufspielen kann. Gerade bei php*-Applikationen sind Sicherheitslecks häufig. Kommt eine neue Version der App raus, müssen Aenderungen mittels mühsamen diff und patch-Operationen halbautomatisch eingespielt werden.

Ein Vernachlässigen dieser Pflicht hatte vor einem Jahr zur Folge, dass jemand unseren Ad-Server für einen DDOS verwendet hat.

Wie lange noch?

Das gelbe vom Ei ist phpAdsNew (resp. OpenAds, unter dem es auch vermarktet wird) aber nicht. Alter, äusserst gammliger Spaghetti-Code führt zu instabilem Verhalten. Die Entwicklung an der Applikation ist stehen geblieben. Und die neue Major Version, OpenAds 2.3/Max Media Manager ist noch im alpha-Stadium.

Kommerzielle Ad-Server, welche wir evaluiert haben, z.B. Open AdStream überzeugen uns punkto Preis/Leistung nicht. Und: Wie sollen wir bei einer Closed-Source-Software neue Funktionen einbauen?

Wir werden sicher noch eine Weile bei phpAdsNew – oder besser tilllateAdsNew – bleiben.

(Geändert, 17.1.2007, 11:10)

This entry was posted in tilllate.com. Bookmark the permalink.

8 Responses to phpAdsNew im kommerziellen Einsatz