Interview mit Vasily Zorin

Asynchrones I/O in PHP mit phpDaemon [Interview]
Kommentare

Mit weit gefächerter Datenbank-Unterstützung, Support für etliche Web-Standards und vorbereiteten Anwendungen wird das eventbasierte PHP-Framework phpDaemon von Vasily Zorin mit reichlich Zucker serviert. Was sich unter der Haube verbirgt, und was das Tool für die Zukunft bereit hält, klärt er mit uns im Interview.

PHP Magazin: Wer ist die Zielgruppe von phpDaemon?

Vasily Zorin: Die Zielgruppe sind diejenigen, die ein Projekt mit hoher Last verwalten müssen, und diejenigen, die Non-HTTP-Anwendungen mit WebSockets entwickeln wollen.

Der Daemon ist von Natur aus eventgetrieben. Jeder Worker-Prozess hat nur einen echten Thread, aber da es keine sleep()-Calls gibt, funktioniert das ohne Lags. In einer Code-Basis mit synchronem I/O hingegen, wo es sleep()-Calls gibt (wie sie in Dateisystem-Aufrufen und DB-Anfragen verwendet werden), würden solche Aufrufe den kompletten Prozess blockieren. In einem solchen Fall müsste die Zahl der Worker erhöht und die Zugriffe pro Worker gesenkt werden. Bei asynchronem I/O hingegen (es gibt etliche built-in Clients und APIs) kommt man mit einer kleinen Zahl von Workern aus.

PHP Magazin: Was ist das Tolle an asynchronem PHP? Sind nicht JavaScript und Node.js von Natur aus überlegen, was eventgetriebene Architekturen angeht?

Vasily Zorin: Ich glaube, dass das eine Glaubensfrage ist. Ich persönlich halte es für keine gute Idee, serverseitig mit JavaScript zu arbeiten, weil sein OO-Modell dort nicht gut ist. Entwickler wissen, was ich meine.

PHP Magazin: phpDaemon hat bereits eine Menge Features. Wie lange hast du gebraucht und was waren deine Prioritäten dabei?

Vasily Zorin: Das Projekt begann 2008. Damals nutzte ich PHP auf die übliche Art, also mit nginx und php-fpm. Aber dann begann ich, mich zu wundern, warum PHP mit der Natur von FastCGI bricht und jeder Request komplett von vorne berechnet wird. Es war und ist ein großes Performance-Problem, also schrieb ich zunächst das phpFastCGI-Projekt. Schematisch sah das so aus:

   initWorld();
   for ($i = 0; $i 

Ich habe für jeden Request ein neues Objekt erstellt. Nach einer Weile stellte ich mir die Frage: „Warum sollte ich nicht mehr als einen simultanen Request verarbeiten?“ Dann erstellte ich den memcached-Client und danach phpDaemon. Es nutzte socket_select() und bald darauf fügte ich die Unterstützung für Antony Dovgals pecl-libevent 1.x hinzu.

Damals unterstützte PHP noch keine anonymen Funktionen und sein OO-Modell war noch nicht so ausgereift. Aber das haben wir überlebt. Heutzutage nutzen wir libevent 2.x (die Ehre für pecl-event gebührt an dieser Stelle Ruslan Osmanov).

PHP Magazin: Auf der Projekt-Homepage werbt Ihr mit der Erweiterbarkeit von phpDaemon. Was heißt das?

Vasily Zorin: Man kann seine eigene Anwendung oder einen Netzwerk-Client oder -Server erstellen, komplett in PHP geschrieben. Man kann die Basisklassen um eigene Methoden erweitern. So kann man etwa HTTPRequest->onUploadFileStart() overloaden, um eingehende Dateien nach persönlichem Gusto hochzuladen (auf den eigenen S3-Bucket oder wohin auch immer).

PHP Magazin: Wenn das Projekt schon eine fünfjährige Geschichte hat, warum hören wir dann jetzt erst davon?

Vasily Zorin: Weil wir erst vor wenigen Monaten auf libevent 2.x gewechselt haben, und weil wir diese Woche die neue Homepage daemon.io gelauncht haben. Jetzt gibt es was zu gucken.

PHP Magazin: Was steht noch auf dem Plan für phpDaemon?

Vasily Zorin: Augenblicklich konzentrieren wir uns auf eine bessere Dokumentation und notwendige Protokolle. Darüber hinaus wollen wir Bugs schneller beseitigen und auf Feature-Requests früher reagieren. Das Ziel ist, kleine Issues innerhalb von fünf bis 15 Minuten abzuarbeiten, und für große nicht mehr als ein paar Tage zu benötigen.

PHP Magazin: Wie sieht es mit der gewerblichen Nutzung von phpDaemon aus?

Vasily Zorin: Wir haben uns für die LGPL (Lesser GNU Public License) entschieden, die im Gegensatz zur GPL gewerbliche Nutzung zulässt.

PHP Magazin: Danke für deine Zeit!

Vasily Zorin wurde 1990 in Moskau geboren und programmiert, seit er neun Jahre alt ist. Wenn er nicht programmiert, spielt er Starcraft 2. Schon mit dreizehn hat er etliche Websites gehackt und sich einen Namen in der „Security“-Szene gemacht. Beruflich entwickelt er das File Storage System für Bitfile (Pre-Alpha). Auf GitHub teilt er seine Projekte unter dem Nickname kakserpom.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -