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

  1. Matthias says:

    Dieser Rosenkranz-Algorithmus ist echt der Hammer. Eure Entwickler haben was drauf, Respekt!

  2. rolf says:

    Nanana – was hat denn der Name einer Applikation damit zutun, wieviele Sicherheitslücken sie hat? Zudem mal ganz am Rande; mit welchem Programm verwaltest du deine DB’s? 😉 Nicht etwa phpMyAdmin, oder?

    Und jetzt, nach dem 2. Durchlesen des Beitrags hab ich auch den Sarkasmus von Matthias kapiert 😉

  3. Rosenkranz-Algorithmus = “Mein erstes PHP-Programm”-Niveau?

    Ich denke, ich habe nicht rübergebracht, was das Schwierige daran ist… Ich ergänze den Text…

    Meldet mir, falls ihr immer noch gähnt. Und erklärt mir denn gleich noch, wie der Algorithmus im Hintergrund funktioniert. 😉

    Was die Sicherheitslücken angeht: Natürlich gibt es keinen direkten Zusammenhang zwischen einem Namen eines Programms und dem Sicherheitsniveau. Das ist etwas überspitzt dargestellt. Dieses plakative, undifferenzierte Darstellen wirst Du in diesem Blog immer wieder finden. Wir wollen Diskussionen auslösen. Wir sind kein PR-Blog.

    Doch sind viele Programme, welche mit “php” beginnen, nicht für den kommerziellen Einsatz entwickelt worden. Sonst hätten sie auch einen besser vermarktbaren Namen. Solche Programme haben nicht die die gleichen Sicherheitsansprüche wie ein “enterprise level”-Programm (sorry, für das Strapazieren dieses Begriffs). Ausserdem handelt es sich bei den “php*”-Programmen um eher ältere Programme, wo man “register_globals” noch auf “on” hatte. Ein gutes Beispiel ist hierfür phpBB mit seinem Wurm. Auch phpAdsNew hatte schon Sicherheitslücken.

    Wir benutzen nicht phpMyAdmin, da deren Browser-Benutzerschnittstelle für unsere Zwecke zu umständlich ist. Wir benutzen Mysql Query Browser. Kann ich empfehlen.

  4. Schakko says:

    Sorry Silvan, aber “selbstentwickelter Rosenkranz-Alogrithmus” klingt doch sehr hochtrabend.

    Ich habe das Verfahren mal in einer ersten Banner-Module für phpChrystal vor 5 oder 6 Jahren implementiert (wenn ich deine Ausführungen den Algo betreffend richtig verstanden habe).

  5. Okay okay… Vielleicht ist der Algorithmus doch nicht so der Wahnsinn (Damals vor drei Jahren fand ich ihn jedenfalls extrem komplex).

    Dann kann ich halt damit niemanden damit beeindrucken 🙁 Ja nu… Ich werde darüber hinwegkommen 🙂

    Ich passe noch den Text schnell an und entferne das “selbst entwickelt”…

  6. Schakko says:

    Getreu dem Motto: “Werrr hats erfunden?” 😉

  7. Heiko says:

    Tja, wenn jemand bereit ist, diese Eigenentwicklung zu finanzieren ? Mal so eben ist das nicht hinprogrammiert.

    Heiko