22. October 2006, 20:59, by Silvan Mühlemann

Das tilllate-Framework

ScaffoldSymfony, CakePHP, EZPublish… Dutzende Frameworks für PHP sind heuzutage frei verfügbar. Als ich im August 2000 mit der Programmierung von tilllate.com startete, war noch alles Handarbeit. Selbst das Sessionhandling war mit PHP3 noch selbst zu coden.

2006: Die Codebasis ist immer noch die gleiche. Ein Framework haben wir inzwischen. Ein selbstgebautes.

Wie ist dieses aufgebaut? Ein Beispiel: Das folgende Skript ist der sogenannte Invoker für die Grossansicht des Fotos (Hier in vereinfachter Darstellung):

require_once(‘application.php’);
$template = new template();
$template->set_template_file(‘templatepath/default.php’);
$template->set_include_file(1, ‘mo_fot_picture_view.php’);
$template->write();


Zuerst haben wir das Bootstrapping über application.php. Im Bootstrapping-Prozess werden unter anderem folgende Aufgaben behandelt:

  • Libraries includen
  • Sprache des Benutzers bestimmen
  • Site des Benutzers bestimmen (UK, Frankreich, Italien, Schweiz…)
  • Usersession überprüfen und aktivieren
  • Skin bestimmen (tilllate hat je nach Tageszeit – und Werbekunde – unterschiedliche Skins)

Dann wird das Template ausgewählt, welches die grundlegende Gestaltung der Seite definiert. Dies ist plain PHP. Kein Smarty oder ähnliches. Einfach aber schnell. Im vorliegenden Fall ist das Template tpl_default.php, jenes mit der Navigation links, Leaderboard oben, rechts Skyskraper. Der Inhalt der inneren Box, dort, wo das Foto angezeigt wird, wird durch das Modul mo_fot_picture_view.php erzeugt.

Das Framework bietet folgende Funktionen:

  • Unterstützung von n Sprachen (UTF-8)
  • Unterstützung von n Ländersites mit Lokalisierung
  • Skins
  • Unterstützung von Multiple-Master/Multiple-Slave Datenbank
  • Caching (für den Entwickler transparent)
  • feinkörniges Permission-Handling
  • Diverse Security-Funktionen
  • Tracking der Aktivitäten
  • Unit testing support
  • Statistiken
  • Profiling
  • Debug-Output von Queries und Applikationsvariablen
  • benutzt PHP5 & MySQL 5

Nein, aus Sicht Informatiker ist unser Framework kein Vorzeigeobjekt. MVC sucht man vergebens. OOP wird noch nicht applikationsübergreifend eingesetzt. Dem Besucher ist das egal. Solange das Produkt stimmt, ist er glücklich: Monatlich fast eine Million Besucher beweisen das.

Die Zukunft

Swiss Re Tower LondonOb wir nicht mal auf ein neues Framework umstellen wollten? Der Markt biete ja eine grosse Auswahl. Rapid Application Development. Dann wären wir doch viel schneller mit dem Launch von neuen Features.

Natürlich wäre es supersexy, ein richtig modernes Framework zu benutzen. Alles von Grund auf neu zu machen. Search-Engine-Friendly URLs. Supereleganten Code. Modern und “shiny” wir das Swiss-Re-Gebäude in London. Doch ob es rentabel wäre, die gesamte Codebasis in neu zu erstellen? Und bietet uns ein RAD-Framework, welches auf /object/id/action aufbaut, genügend Freiheit? Stimmt die Performance, wenn die gesamten Datenbankzugriffe abstrahiert sind?

Dies sind Fragen, an welchen wir arbeiten: Evaluationen, Case Studies, Prototypen. Doch die Bedeutung des Frameworks soll nicht überschätzt werden. Das Framework gibt nur ein Gerüst vor. Was zählt, ist, wie man das Haus schlussendlich baut.

10 Comments

  1. Das Caching/die Framework-Performance scheinen aber noch etwas Suboptimal, wenn angesichts dieser Besucherzahlen schon 31 (korrigiert mich wenn ich die Zahl falsch im Kopf hab) Server nötig sind.

    Was für Caching-Techniken setzt ihr da ein?

    Comment by Freddy — 23. October 2006 @ 09:02

  2. Ciao Freddy

    Momentan arbeiten wir mit Cache/Lite und mit DB Tabellen. Memcache ist in der Evaluation.

    Es werden allerdings nur jene Seiteninhalte gecached, wo Du im Quelltext den Kommentar “cache” findest. Die anderen sind m.E. zu dynamisch um gecached zu werden.

    Ich würde sehr gerne mit weniger als 31 Server auskommen… Kennst Du Dich in diesem Gebiet aus?

    Comment by silvan — 23. October 2006 @ 09:13

  3. coole blog silvan :-) gar ned gwüsst das de verlinkt isch uf tilllate

    grüessli

    Comment by Lacoste — 23. October 2006 @ 20:48

  4. Ich hab in dem Bereich schon die ein oder andere Erfahrung gemacht ja. Was für Maschinen sind das denn, wenn man fragen darf?

    Hängt es mit dem Caching zusammen, dass eure Onlineuser derart extrem schwanken?
    http://img67.imageshack.us/my.php?image=tilllateeb8.png

    Comment by Freddy — 23. October 2006 @ 23:04

  5. Unsere Infrastruktur geht von selbstgebauten PIII 1GHz Mühlen bis Dell Poweredge 1955 Blade Server mit 2x Dual Core Xeon 3.06, 8GB RAM und 2x 10’000rpm SCSI HD.
    Ich denke, da können wir auch mal einen Artikel schreiben. Das interessiert bestimmt.

    Cool, Du misst unsere Onlineuserzahlen mit dem RRDTool :-) Arbeitest Du bei der Konkurrenz, dass Du so interessiert bist? :-)

    Comment by silvan — 24. October 2006 @ 09:02

  6. Ohne die genaue Serververteilung zu kennen, würde ich behaupten, dass da eigentlich noch mehr drin sein sollte…

    Das “grösste Nightlife-Medium Europas” hat Konkurrenz? :-D

    Comment by Freddy — 24. October 2006 @ 23:52

  7. Der SBB Online Fahrplan kommt mit 4 Web-, 4 Daten- und 2 Realtime-Servern aus.
    Performance Engineering kann schon grosse Kosteneinsparungen auslösen. Ist aber nicht ganz ohne, vorallem in einer PHP-Umgebung… :)

    Wie wärs mit J2EE? :) Go 4 IBM WebSphere!

    Comment by Simcen — 27. October 2006 @ 21:11

  8. Simcen: Wenn Du mir sagen kannst, wie wir auf 10 Server reduzieren können, kannst Du die 26 nicht mehr benötigten Server haben :-)

    Nein, im ernst: Ich denke, unsere App ist einfach sehr komplex: Rund 40 Queries werden für die Homepage benötigt. Und die Tabellen sind gross. Nur schon die User-Tabelle hat 300’000 Rows. Dir Fotos haben 5 Mio Rows.

    SBB ist übrigens gemäss Swiss Website Charts klar kleiner als wir :-)

    Comment by silvan — 27. October 2006 @ 22:52

  9. Wenn ich dir das sagen könnte, wäre ich ein reicher Mann ;-)

    Ja das glaube ich dir gerne, habe selber genug Erfahrung mit PHP und kenne die tücken :)
    Ein falsches Query auf die Mega-Tabellen und die DB geht in die Knie :)

    Hehe, da würde ich nicht alles Geld drauf verwetten :) Nein Scherz beiseite…

    Habt ihrs schonmal mit horizontaler Skalierung versucht? Eine Kombination aus vertikal und horizontal kommt noch recht gut an.

    Comment by Simcen — 28. October 2006 @ 10:05

  10. Hallo Silvan,

    betreffend dem Cache: Ich habe mich da mal gross eingearbeitet als ich den Fachausweis in Applikationsentwicklung vor wenigen Monaten abgeschlossen habe…

    Es gibt da verschiedene Ansätze und Varianten: Cache muss nicht nur im content bereich sein, das kann auch *nur* im source Bereich sein. Das heisst jede php datei wird, ähnlich wie bei serverlets, kompiliert und beim aufruf nur noch abgearbeitet.
    ohne solche caches wird ein PHP script bei jedem aufruf zweimal abgearbeitet. einmal wird er run-time kompiliert und dann effektiv abgearbeitet.
    weiter können gewisse module in C geschrieben werden und als library eingebunden werden.
    es ist ein grosses und tiefes thema, hast ja meine adresse, wenns Dich näher interessiert können wir einmal zusammensitzen.

    grüsse aus bern

    Comment by Dominique — 29. December 2006 @ 13:35

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

© 2017 tilllate Schweiz AG - Powered by WordPress