
Abb 1: Hans Höchtl + appserver.io Team beim Brainstorming
Ablauf
Nach einer rund einstündigen Vorstellung zur Historie und zum aktuellen Stand des appserver.io Projektes wurden gemeinsam Themen erarbeitet, die im Zuge des Hackathons umgesetzt werden sollten. Anschließend wurden Teams gebildet, die sich dann mit der Umsetzung der erarbeiteten Themen befassten.
Application Environments
Hans Höchtl und Bernhard Wick beschäftigten sich mit der Umsetzung eines, aus dem 8select Projekt-Team, von Andreas Klaiber kommenden Featurewunsches. 8select setzt appserver.io als Infrastrukturlösung für deren Curated Shopping as a Service Platform ein. Hierbei geht es primär um die Integration verschiedener Application Environments für Developlment, Staging und Production Context einer Anwendung. Einwickler haben damit die Möglichkeit, für jeden Kontext einer Anwendung eigene Konfigurationsdateien zu hinterlegen, die dann während des Bootvorgangs, abhängig von einer Umgebungsvariable, eingelesen werden. Wir gehen davon aus, dass wir das Features noch mit der nächsten Version 1.1.1, die Ende dieser Woche fertiggstellt wird, ausliefern können.

Abb 2: Hans Höchtl + Bernhard Wick
Windows Azure Cluster Umgebung
Ein Team rund um Michael Döhler vom Shopsoftwarehersteller Intellishop beschäftigte sich mit dem Aufbau einer Clusterumgebung in Microsoft Azure auf Basis einer maximal reduzierten appserver.io Infrastruktur und Ansible. Ein weiteres Ziel des Teams bestand darin, die Standard Servlet-Engine durch ein eigenes Webserver Modul zu ersetzen, das die Integration und Verwendung beliebiger Frameworks auf Basis des appserver.io Webservers, einem leichtgewichtigen multithreaded Webserver, geschrieben in PHP für PHP, erlaubt. Als Proof-of-Concept wurde eine minimale, funktionsfähige Servlet-Engine umgesetzt, die ein rudimentäres Session-Handling auf Basis von Redis implementiert.
Das Ergebnis kann über das freigegebene Bitbucket Repository als Basis für eigene Projekte verwendet werden.
Konsolenanwendung für appserver.io Konfiguration
Martin Mohr konzentrierte sich nach einer Testinstallation der aktuellen Intellishop Version auf die Implementierung einer Konsolenanwendung über die sich die Einstellungen einer lokalen appserver.io Instanz verwalten lassen. Im Rahmen das Hackathons konnte Martin ein Restart Command, ein Command zum neu anlegen/entfernen eines Servers, sowie zur Anpassung der Parameter implementieren. Erste Ansätze für das Scaffolding sind ebenfalls bereits vorhanden.

Abb 3: Martin Mohr, Tim Wagner + Ilya Shmygol
mod_include
Ilya Shmygol beschäftigte sich nach kurzer Einarbeitungszeit mit der Implementierung eines Server-Side-Include Moduls, das sich in seiner Funktionalität stark an Apache mod_include orientiert. Nach anfänglichen Problemen konnten die ersten Hürden schnell genommen und die Basisfunktionalität eines Webservermoduls implementiert werden. Ilya wird die minimal benötigte Funktionalität im Laufe der nächsten Wochen fertigstellen. Das Modul sollte somit in einer der nächsten Versionen des Webservers der Community zur Verfügung gestellt werden können und ergänzt den Webserver um ein neues und interessantes Feature.
fhreads und rockets
Bereits Ende letzten Jahres begann Johann Zelger mit der Arbeit an fhreads und rockets. fhreads wird Multithreading in PHP vollkommen neu definieren und, entgegen dem von Joe Watkins mit phtreads gewählten Ansatz, soweit wie möglich die Implementierung im Userland vornehmen.
Die Library stellt lediglich einen Wrapper für die Funktionen der POSIX Thread Implementierung dar, Klassen wie Threads, Mutex und Conditions werden hingegen in PHP implementiert. PHP Entwickler haben somit wesentlich tiefere Einblicke in die Internals und können benötigte Funktionalität bei Bedarf selbst integerieren. Zusätzlich hebt die Library, für PHP Entwickler schwer nachvollziehbare, Einschränkungen bei der Verwendung von zu synchronisierenden Objekten auf. Mit fhreads werden somit automatisch alle Objekte, egal ob in C oder im Userland implementiert, ohne Einschränkungen synchronisiert. Die interne, performancekritische Serialisierung von Objekten, die Übergabe von PHP Userland Objekten ausschließlich als Kopie sowie die Beschränkung, dass Objekte keine Closures enhalten dürfen fallen ebenfalls weg. Gleiches gilt für das Handling von Resourcen wie z. B. Sockets, bei dem es sich bisher um eines der größten Probleme bei der Implementierung von Serveranwendungen handelte.
rockets wird eine leichtgewichtige und multithreading kompatible *Next-Generation* Socket Implementierung, die anstatt schwergewichtigen, über Threads hinweg nur kompliziert zu verwaltende, PHP Resourcen einfache Integerwerte als Referenz auf Diese verwendet. Dadurch werden zum Einen die aktuellen Probleme bei der Verwendung von Sockets in multithreaded Umgebungen gelöst, zum Anderen werden momentan komplexe Implementierungen wie ein multithreaded Websocket Server einfacher und zwingend notwendige Features wie HTTP/2 überhaupt erst umsetzbar.
Im Rahmen des Hackathons konnte Johann Zelger fhreads und rockets an die aktuellsten PHP Version anpassen und den aktuellen Stand auf Github veröffentlichen. Aktuell befinden sich beide Libraries noch in der Betaphase, können zu Testzwecken aber jederzeit heruntergeladen und ausprobiert werden. Über Feedback sind wir natürlich immer dankbar. Siehe fhreads library.
Fazit
Da sich der Wissenstand hinsichtlich appserver.io bei den Teilnehmer auf einem durchaus unterschiedlichen Level befand, wurde natürlich versucht, das notwendige Wissen für Anpassungen, Neu- oder Weiterentwicklung im Rahmen des Hackathons in konzentrierter Form zu vermitteln. Aufgrund der Ergebnisse und des Feedbacks der Teilnehmer, kann man davon ausgehen, dass das auf jeden Fall gelungen ist.
Über den gesamten Hackathon hinweg hat sich gezeigt, dass der Webserver, als Basis von appserver.io künftig mehr in den Mittelpunkt des Projektes rücken wird. Zum Einen, da Dieser den ideale Einstiegspunkt für bereits bestehende Projekte, egal ob in Form eines Servermoduls oder einer eigenen Serverimplementierung darstellt, zum Anderen weil er durch seinen einfachen, komponentenorientierten Aufbau den Einstieg in das appserver.io Ökosytem enorm vereinfacht. Zusätzlich stellt der Webserver gerade beim Thema Microservices, eine leichtgewichtige Alternative zu Apache und nginx dar, die sich, bei Bedarf, auch mit einem Microservice oder dem SCS bundeln und ausliefern lässt.
Nachdem Samstag Nachmittag und Sonntag Vormittag konsequent an der Umsetzung der besprochenen Features gearbeitet wurde, konnten die Teilnehmer am Sonntag Nachmittag ihre Ergebenisse präsentieren. Auch wenn keines der Features vollständig fertggestellt wurde, so hat der Hackathon gezeigt, dass in relativ kurzer Zeit und zum Teil ohne Vorwissen, in kürzester Zeit beachtliche Features umgesetzt werden können, die bei konsequenter Weiterentwicklung sehr vielversprechend aussehen.
Final waren sich alle Teilnehmer einig, dass der erste Hackathon einerseits viel Spaß gemacht, andererseits das Projekt aber auch einen weiteren Schritt nach vorne gebracht hat. Das appserver.io Team wird versuchen, derartige Veranstaltungen künftig im Abstand von einigen Monaten zu organisieren und somit, insbesondere die für ein Open Source Projekt so wichtige Community Arbeit voran zu treiben. Darüberhinaus planen wir zukünftig Webinare und Online-Schulungen um die ersten Schritte mit appserver.io leichter meistern zu können. Mehr dazu demnächst!