Über mich
Bernhard Wick

29 Jahre jung
!
Seit 2013 bei TechDivision GmbH
Softwarearchitekt für appserver.io
Heute mal nicht in Lederhosen
Agenda
Agenda
• Was ist appserver.io?
• Vorstellung und Idee
!
• Wozu das alles?
• Vorteile und Nutzen
!
• Wie nutze ich appserver.io
• Anwendungsentwicklung und Beispiel
Vorstellung | Nutzen | Anwendungsentwicklung
!
!
!
!
Was ist ?
Vorstellung | Nutzen | Anwendungsentwicklung
Ziel"
Application Server für PHP, in PHP
!
• Alternative zu bestehender Infrastruktur
• Konzept von Application Server verfügbar machen
• Infrastruktur in der Zielsprache
• Alles Open Source
Vorstellung | Nutzen | Anwendungsentwicklung
!
!
Ein Application Server ist eine Plattform die Anwendungen
über ein Netzwerk bereitstellt und über definierte
Schnittstellen ansprechbare Zusatzdienste bietet.
Vorstellung | Nutzen | Anwendungsentwicklung
• Webserver liefern statische Inhalte aus
• Nutzen Drittprogramme für dynamische Inhalte
• Interne Sub-requests ([Fast]CGI)
• Selbst keinen Bezug zur Anwendung
Vorstellung | Nutzen | Anwendungsentwicklung
• Market share von ~81%
• Rasant ansteigende Beliebtheit seit 2000
!
!
!
!
!
• Aber: Schritt in die Enterprise Welt fällt schwer W3Techs, 2015
Netcraft, 2013
Vorstellung | Nutzen | Anwendungsentwicklung
Projekthistorie"
• Idee besteht seit 2005
!
• Erster Prototyp 2011
• Für interne Projekte
!
• Erster commit am 1.7.2013
Vorstellung | Nutzen | Anwendungsentwicklung
Seit August 2012: Threading"
• Als Extension pthreads by Joe Watkins
• Erlaubt echte parallele Verarbeitung
• Bietet Inter-Thread Daten Container auf Objektebene
!
!
• Aber: Sehr aufwändiger Umbau am PHP Core
Vorstellung | Nutzen | Anwendungsentwicklung
• Erstes Produktivprojekt am 12.6.2014
• Nur Webserver
• Anwendungslogik in Webserver Module
!
• Erstes Webservice Projekt am 10.11.2014
!
• Release 1.0.0 „Iron Horse“ am 16.2.2015
!
Vorstellung | Nutzen | Anwendungsentwicklung
Aktueller Produktumfang
!
• 24 Jahre Entwicklungszeit (COCOMO Model)

• Ca. 96.000 Zeilen Code

• 40+ Repositories

!
• 8 Produktivprojekte

• 2 Partnerfirmen
Vorstellung | Nutzen | Anwendungsentwicklung
!
!
!
Wozu das alles?
Vorstellung | Nutzen | Anwendungsentwicklung
Infrastruktur in der Zielsprache"
!
• Erleichtert das Verstehen von Abläufen
!
• Homogenisiert den Technologie-Stack
!
• Befähigt zu Infrastrukturveränderung und -erweiterung
Vorstellung | Nutzen | Anwendungsentwicklung
• „I am a Teapot“ Module
Vorstellung | Nutzen | Anwendungsentwicklung
Beispiel
• Rewrite Modul für Anwendung
• 3,2 Milliarden Rewrites in Server verlagert
!
• Backend API Analytics
• Analytics für RESTful API Aufrufe
Vorstellung | Nutzen | Anwendungsentwicklung
Alles aus einem Guss"
!
• Infrastruktur
!
• Framework
!
• Laufzeitumgebung
Vorstellung | Nutzen | Anwendungsentwicklung
Technologische Sicherheit
• PSRs sind super Idee
!
• Wir pflegen 10 eigene PSRs
• Decken alle Aspekte der Anwendungsentwicklung ab
!
• Nutzen semantic Versioning
• Feste APIs bis Version 2.0.0!
Vorstellung | Nutzen | Anwendungsentwicklung
!
• Komplett Open Source
!
• Community Support per GitHub und Gitter
Vorstellung | Nutzen | Anwendungsentwicklung
!
!
!
Wie nutze ich ?
Vorstellung | Nutzen | Anwendungsentwicklung
Installation"
Installierbare Pakete verfügbar für:
!
!
+ homebrew cask
!
!
!
!
+ Repository
Vorstellung | Nutzen | Anwendungsentwicklung
Zusätzlich
Vorstellung | Nutzen | Anwendungsentwicklung
Konfiguration
Vorstellung | Nutzen | Anwendungsentwicklung
Vorstellung | Nutzen | Anwendungsentwicklung
Problem"
Aufwändiges Bootstrapping (Framework, etc.)
!
Lösung"
!
Servlets
Servlets sind Klassen, deren vorgeladene Instanzen die
Request- und Response Verarbeiten auf Seite des Servers
übernehmen.
—> Controller
Vorstellung | Nutzen | Anwendungsentwicklung
• Lifecycle Management und Routing durch Servlet
Engine
• Erlaubt Bootstrapping noch vor dem ersten Request
!
!
Vorstellung | Nutzen | Anwendungsentwicklung
• Mapping über Annotation oder XML
Vorstellung | Nutzen | Anwendungsentwicklung
• Implementieren Methoden für HTTP Operationen
• doGet(), doPost(), …
• Erhalten Request und Response Objekte
Vorstellung | Nutzen | Anwendungsentwicklung
Problem"
Stateless Server, Stateful Client
!
Lösung"
!
Session Beans!
Session- und andere Beans sind serverseitige Klassen,
die die Business Logik einer Anwendung beinhalten. Sie
werden zentral verwaltet und stehen meist als fertige
Instanz bereit.
Vorstellung | Nutzen | Anwendungsentwicklung
Verschiedene Arten
• Stateless: Neue Instanz für jede Anfrage
• Stateful: Persistente Instanz, gebunden an
Nutzersession
• Singleton: Persistente Instanz, unabhängig von
Session immer gleich
• MessageDriven: Zur asynchronen Verarbeitung von
MQ Nachrichten
Vorstellung | Nutzen | Anwendungsentwicklung
Vorstellung | Nutzen | Anwendungsentwicklung
Beispiel
• Einkaufswagen als Stateful Bean
!
• Repliziert State eines stateful Clients
• Hält z.B. Nutzerdaten sicher im Speicher
• Erlaubt Caching von komplexen Abfrageergebnissen
Vorstellung | Nutzen | Anwendungsentwicklung
Hat jemand persistent gesagt?"
Konzept von DataSources:
!
!
!
!
!
• Per XML konfigurierbare Datenquellen
Vorstellung | Nutzen | Anwendungsentwicklung
Problem"
Threading und Frameworks
!
Lösung"
!
appserver.io Funktionalität
appserver.io bringt viel Funktionalität eines modernen
Frameworks mit, aber erlaubt Multithreading und feste
Integration in die Infrastruktur
Vorstellung | Nutzen | Anwendungsentwicklung
AOP
Vorstellung | Nutzen | Anwendungsentwicklung
Dependency Injection
Vorstellung | Nutzen | Anwendungsentwicklung
Design by Contract und Typsicherheit
Fragen / Questions
Fazit
!
!
• PHP sollte sich weiter entwickeln
!
• Es macht Sinn in Infrastruktur zu investieren
!
• Standardisierung ist ein Muss
Fragen / Questions
!?
Thanks!
appserver.io is a registered
trademark of TechDivision GmbH



Spinnereiinsel 3a

83059 Kolbermoor
Tel. +49 8031 / 221055-0

Fax +49 8031 / 221055-22
info@appserver.io

Bernhard Wick

Softwarearchitect
bw@appserver.io
!
!
!
Further readings
http://appserver.io/
https://github.com/appserver-io/appserver
https://www.techdivision.com/
https://gitter.im/appserver-io/appserver
Bildernachweis
"Tux" by lewing@isc.tamu.edu and The GIMP. Licensed under Attribution via Wikimedia Commons -
https://commons.wikimedia.org/wiki/File:Tux.png#/media/File:Tux.png!
!
"Fedora logo" by Wondigoma - Own work. Licensed under Public Domain via Wikimedia Commons -
https://commons.wikimedia.org/wiki/File:Fedora_logo.svg#/media/File:Fedora_logo.svg!
!
"Openlogo-debianV2" by Debian Project - www.debian.org/logos/. Licensed under CC BY-SA 3.0 via
Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Openlogo-debianV2.svg#/media/
File:Openlogo-debianV2.svg!
!
„Docker (container engine) logo“ von dotCloud, Inc. - http://www.docker.io/static/img/docker-top-logo.png.
Lizenziert unter Apache License 2.0 über Wikimedia Commons - https://commons.wikimedia.org/wiki/
File:Docker_(container_engine)_logo.png#/media/File:Docker_(container_engine)_logo.png!
!
„Vagrant“ von Fco.plj - Eigenes Werk. Lizenziert unter CC BY-SA 3.0 über Wikimedia Commons - https://
commons.wikimedia.org/wiki/File:Vagrant.png#/media/File:Vagrant.png

Bernhard Wick - appserver.io - code.talks 2015

  • 2.
    Über mich Bernhard Wick
 29Jahre jung ! Seit 2013 bei TechDivision GmbH Softwarearchitekt für appserver.io Heute mal nicht in Lederhosen
  • 3.
    Agenda Agenda • Was istappserver.io? • Vorstellung und Idee ! • Wozu das alles? • Vorteile und Nutzen ! • Wie nutze ich appserver.io • Anwendungsentwicklung und Beispiel
  • 4.
    Vorstellung | Nutzen| Anwendungsentwicklung ! ! ! ! Was ist ?
  • 5.
    Vorstellung | Nutzen| Anwendungsentwicklung Ziel" Application Server für PHP, in PHP ! • Alternative zu bestehender Infrastruktur • Konzept von Application Server verfügbar machen • Infrastruktur in der Zielsprache • Alles Open Source
  • 6.
    Vorstellung | Nutzen| Anwendungsentwicklung ! ! Ein Application Server ist eine Plattform die Anwendungen über ein Netzwerk bereitstellt und über definierte Schnittstellen ansprechbare Zusatzdienste bietet.
  • 7.
    Vorstellung | Nutzen| Anwendungsentwicklung • Webserver liefern statische Inhalte aus • Nutzen Drittprogramme für dynamische Inhalte • Interne Sub-requests ([Fast]CGI) • Selbst keinen Bezug zur Anwendung
  • 8.
    Vorstellung | Nutzen| Anwendungsentwicklung • Market share von ~81% • Rasant ansteigende Beliebtheit seit 2000 ! ! ! ! ! • Aber: Schritt in die Enterprise Welt fällt schwer W3Techs, 2015 Netcraft, 2013
  • 9.
    Vorstellung | Nutzen| Anwendungsentwicklung Projekthistorie" • Idee besteht seit 2005 ! • Erster Prototyp 2011 • Für interne Projekte ! • Erster commit am 1.7.2013
  • 10.
    Vorstellung | Nutzen| Anwendungsentwicklung Seit August 2012: Threading" • Als Extension pthreads by Joe Watkins • Erlaubt echte parallele Verarbeitung • Bietet Inter-Thread Daten Container auf Objektebene ! ! • Aber: Sehr aufwändiger Umbau am PHP Core
  • 11.
    Vorstellung | Nutzen| Anwendungsentwicklung • Erstes Produktivprojekt am 12.6.2014 • Nur Webserver • Anwendungslogik in Webserver Module ! • Erstes Webservice Projekt am 10.11.2014 ! • Release 1.0.0 „Iron Horse“ am 16.2.2015 !
  • 12.
    Vorstellung | Nutzen| Anwendungsentwicklung Aktueller Produktumfang ! • 24 Jahre Entwicklungszeit (COCOMO Model) • Ca. 96.000 Zeilen Code • 40+ Repositories ! • 8 Produktivprojekte • 2 Partnerfirmen
  • 13.
    Vorstellung | Nutzen| Anwendungsentwicklung ! ! ! Wozu das alles?
  • 14.
    Vorstellung | Nutzen| Anwendungsentwicklung Infrastruktur in der Zielsprache" ! • Erleichtert das Verstehen von Abläufen ! • Homogenisiert den Technologie-Stack ! • Befähigt zu Infrastrukturveränderung und -erweiterung
  • 15.
    Vorstellung | Nutzen| Anwendungsentwicklung • „I am a Teapot“ Module
  • 16.
    Vorstellung | Nutzen| Anwendungsentwicklung Beispiel • Rewrite Modul für Anwendung • 3,2 Milliarden Rewrites in Server verlagert ! • Backend API Analytics • Analytics für RESTful API Aufrufe
  • 17.
    Vorstellung | Nutzen| Anwendungsentwicklung Alles aus einem Guss" ! • Infrastruktur ! • Framework ! • Laufzeitumgebung
  • 18.
    Vorstellung | Nutzen| Anwendungsentwicklung Technologische Sicherheit • PSRs sind super Idee ! • Wir pflegen 10 eigene PSRs • Decken alle Aspekte der Anwendungsentwicklung ab ! • Nutzen semantic Versioning • Feste APIs bis Version 2.0.0!
  • 19.
    Vorstellung | Nutzen| Anwendungsentwicklung ! • Komplett Open Source ! • Community Support per GitHub und Gitter
  • 20.
    Vorstellung | Nutzen| Anwendungsentwicklung ! ! ! Wie nutze ich ?
  • 21.
    Vorstellung | Nutzen| Anwendungsentwicklung Installation" Installierbare Pakete verfügbar für: ! ! + homebrew cask ! ! ! ! + Repository
  • 22.
    Vorstellung | Nutzen| Anwendungsentwicklung Zusätzlich
  • 23.
    Vorstellung | Nutzen| Anwendungsentwicklung Konfiguration
  • 24.
    Vorstellung | Nutzen| Anwendungsentwicklung
  • 25.
    Vorstellung | Nutzen| Anwendungsentwicklung Problem" Aufwändiges Bootstrapping (Framework, etc.) ! Lösung" ! Servlets Servlets sind Klassen, deren vorgeladene Instanzen die Request- und Response Verarbeiten auf Seite des Servers übernehmen. —> Controller
  • 26.
    Vorstellung | Nutzen| Anwendungsentwicklung • Lifecycle Management und Routing durch Servlet Engine • Erlaubt Bootstrapping noch vor dem ersten Request ! !
  • 27.
    Vorstellung | Nutzen| Anwendungsentwicklung • Mapping über Annotation oder XML
  • 28.
    Vorstellung | Nutzen| Anwendungsentwicklung • Implementieren Methoden für HTTP Operationen • doGet(), doPost(), … • Erhalten Request und Response Objekte
  • 29.
    Vorstellung | Nutzen| Anwendungsentwicklung Problem" Stateless Server, Stateful Client ! Lösung" ! Session Beans! Session- und andere Beans sind serverseitige Klassen, die die Business Logik einer Anwendung beinhalten. Sie werden zentral verwaltet und stehen meist als fertige Instanz bereit.
  • 30.
    Vorstellung | Nutzen| Anwendungsentwicklung Verschiedene Arten • Stateless: Neue Instanz für jede Anfrage • Stateful: Persistente Instanz, gebunden an Nutzersession • Singleton: Persistente Instanz, unabhängig von Session immer gleich • MessageDriven: Zur asynchronen Verarbeitung von MQ Nachrichten
  • 31.
    Vorstellung | Nutzen| Anwendungsentwicklung
  • 32.
    Vorstellung | Nutzen| Anwendungsentwicklung Beispiel • Einkaufswagen als Stateful Bean ! • Repliziert State eines stateful Clients • Hält z.B. Nutzerdaten sicher im Speicher • Erlaubt Caching von komplexen Abfrageergebnissen
  • 33.
    Vorstellung | Nutzen| Anwendungsentwicklung Hat jemand persistent gesagt?" Konzept von DataSources: ! ! ! ! ! • Per XML konfigurierbare Datenquellen
  • 34.
    Vorstellung | Nutzen| Anwendungsentwicklung Problem" Threading und Frameworks ! Lösung" ! appserver.io Funktionalität appserver.io bringt viel Funktionalität eines modernen Frameworks mit, aber erlaubt Multithreading und feste Integration in die Infrastruktur
  • 35.
    Vorstellung | Nutzen| Anwendungsentwicklung AOP
  • 36.
    Vorstellung | Nutzen| Anwendungsentwicklung Dependency Injection
  • 37.
    Vorstellung | Nutzen| Anwendungsentwicklung Design by Contract und Typsicherheit
  • 38.
    Fragen / Questions Fazit ! ! •PHP sollte sich weiter entwickeln ! • Es macht Sinn in Infrastruktur zu investieren ! • Standardisierung ist ein Muss
  • 39.
  • 40.
    Thanks! appserver.io is aregistered trademark of TechDivision GmbH
 
 Spinnereiinsel 3a
 83059 Kolbermoor Tel. +49 8031 / 221055-0
 Fax +49 8031 / 221055-22 info@appserver.io
 Bernhard Wick
 Softwarearchitect bw@appserver.io ! ! !
  • 41.
  • 42.
    Bildernachweis "Tux" by lewing@isc.tamu.eduand The GIMP. Licensed under Attribution via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Tux.png#/media/File:Tux.png! ! "Fedora logo" by Wondigoma - Own work. Licensed under Public Domain via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Fedora_logo.svg#/media/File:Fedora_logo.svg! ! "Openlogo-debianV2" by Debian Project - www.debian.org/logos/. Licensed under CC BY-SA 3.0 via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Openlogo-debianV2.svg#/media/ File:Openlogo-debianV2.svg! ! „Docker (container engine) logo“ von dotCloud, Inc. - http://www.docker.io/static/img/docker-top-logo.png. Lizenziert unter Apache License 2.0 über Wikimedia Commons - https://commons.wikimedia.org/wiki/ File:Docker_(container_engine)_logo.png#/media/File:Docker_(container_engine)_logo.png! ! „Vagrant“ von Fco.plj - Eigenes Werk. Lizenziert unter CC BY-SA 3.0 über Wikimedia Commons - https:// commons.wikimedia.org/wiki/File:Vagrant.png#/media/File:Vagrant.png