View
235
Download
0
Category
Preview:
Citation preview
4. VuFind Anwendertreffen, Konstanz 7.10.2015
"Sind wir ein wenig füllig um die Hüften geworden?"
Günter Hipler, Projekt swissbib, Universitätsbibliothek Basel
Gedanken und Vorschläge hin zu mehr Komponenten und Flexibilität in der VuFind 2/3 Architektur basierend auf Zend Framework 3
Die „Potsdamer Kartoffel“ http://www.spektrum.de/news/um-die-hueften-fuelliger/600896
mandated by
I. Kurze Zusammenstellung der aktuellen VuFind2 / ZF2 Architektur
Outline
II. Gesammelte Erfahrungen in den letzten zwei Jahren: Was haben wir umsetzen können? Wo sind wir an gewisse Grenzen gestossen?
III. neue Möglichkeiten von ZF3 / PHP7 für die VuFind 3 Architektur
Überblick
Kurze Zusammenstellung der aktuellen VuFind2 / ZF2 Architektur
ZF2 Framework(häufig verwendete Koponenten) VF2 Prinzipien
Modulemanager
Eventmanager
Servicemanager
(Konfigurationen verstehenlernen!)
Viewkomponenten
Routing Translation Rendering
Theme-mechanismus(Vererbung!) Lokale
Module
viele mehr
swissbib / VuFind Präsentationskomponente
MVC Komponente
Unittesting CSS / Bootstrap3 /
Less /HTML5
JavaScript
„Clone andRun“
Was haben wir in swissbib auf Basis der bestehenden Architektur bisher umsetzen können?
Was haben wir umsetzen können ?
I. Implementation von Erweiterungsmodulen
juristisches Portal (jus.swissbib.ch)
Verwaltung von administrativen Datender beteiligten rd. 900 Institutionen(admin.swissbib.ch/libadmintest)
Integration der Ergebnisse des linked.swissbib.ch Projekts in der Präsentationskomponente
auf Basis eines ElasticSearch Index(vgl. https://github.com/linked-swissbib)
Erweiterungen für „swissbib classic“ einschliesslich baselbern.swissbib.ch
(vgl. https://github.com/swissbib/vufind)
Was haben wir in swissbib auf Basis der bestehenden Architektur bisher umsetzen können?
Was haben wir umsetzen können ?
II. Umfangreiche Themeerweiterungen
root
bootstrap3
sbvfrd
sbvfrdjus sbvfrdsingle sbvfrdmulti
a) von komplett eigener Oberfläche (bis Mai 2015 – grosser Aufwand aber klare Wiedererkennung des service)
b) danach Benutzung der ResponsiveDesign Implementierung von VF2 mit teilweisen Erweiterungen
Kurzes Fazit zur Architekturübersicht:
Kurze Zusammenstellung der aktuellen VuFind2 / ZF2 Architektur
→ Die VuFind Applikation basiert auf dem umfangreichen ZF2 Framework und hier insbesondere auf dem Model / View / Controller (MVC) Workflow
→ MVC basiert auf einer 'Vielzahl' von Komponenten deren Zusammenspiel von der Applikation verändert werden kann. VuFind nutzt diese Möglichkeiten des Eingriffs geschickt, indem es zum Beispiel eine eigene Themeimplementierung verwendet
Nachteile von MVC in der bestehenden Form:→ heavy-weight (der Durchlauf zur Verarbeitung eines REQUESTS zu einer RESPONSE) ist sehr aufwendig und ressourcenintensiv.
→ nicht für jeden Serviceaufruf die geeignete Form (Beispiele wo schlankere Abläufe wünschenswert sind: Covererstellung, Autosuggestion, ...)
Grenzen der aktuellen VF2 Architektur
Wo sind wir an gewisse Grenzen gestossen
III. Durchgehender Einsatz von schwergewichtiger ZF2 / MVC Architektur für jegliche Art von VuFind Funktionalität
II. Alle VuFind (Anwendungs)-Module plus alle abhängigen Komponenten sind in einem einzigen GitHub Repository enthalten.„Clone and Run“ Prinzip für die einfache Verwendung nicht technikaffiner Institutionen.
Problemfelder:- mangelnde Flexibilität- weniger optimale Umsetzung einzelner UseCases- Erinnerung an unsere „fülligen integrierten Bibliothekssysteme“
I. Verwendung von „Anwendungsmodulen“ anstelle von „Komponenten“.
Wo sind wir an gewisse Grenzen gestossen
„Anwendungsmodul“ versus „Komponente“
Meine Definition für 'Anwendungsmodul' im VuFind Kontext:„Code der vom ZF2 Module Manager bereitgestellt wird um Teil des MVC workflows zu sein“
HTTP Request Bootstrap Routing Dispatch Rendering HTTP
Response
..
Listeners
..
Listeners
..
Listeners
..
Listeners
Schema eines ZF2 „Model View Controller“ workflows:vgl. http://www.zend.com/en/webinars/recorded/show/340_the%20mvc%20architecture%20of%20zf2
ModuleManger (lädt Anwendungsmodule, die sich an Events registrieren)
VuFindModul
VuFindSearchModul
swissbibModul
any otherModule
Obwohl es möglich ist, auch Drittmodule als „libraries“ zu installieren, sehe ich das Modulkonzept nur im Design eines eher engen Anwendungskontexts und i.d.R. innerhalb von MVC.
So ist es viel schwerer einzelne Aspekte oder Funktionalität wie zum Beipiel Schnittstellen und Basisklassen für die Suche ausserhalb des eigentlichen VuFind Applikationskontextes zu verwenden.
Wo sind wir an gewisse Grenzen gestossen
weitere Zitate und Hinweise zur Abgrenzung von „Anwendungsmodul“ versus „Komponente“
Evan Coury (implementor of ModuleManager): http://www.zend.com/en/webinars/recorded/show/341_introducing%20the%20zend%20framework%202%20modulemanager „Resuable pieces of functionality that can be used to construct a more complex application“„ModuleManager – It's the component that will consume Module classes“„What can Modules be? Anything! Plugins, Themes, Libraries, Applications“
Enrico Zimuel: http://www.zend.com/en/webinars/recorded/show/340_the%20mvc%20architecture%20of%20zf2
„Resuable pieces of functionality that can be used to construct a more complex application“„A module is all related code and assets that solve a specific problem. Modules inform the MVC about services and event listeners.
Mike Willbanks : https://speakerdeck.com/mwillbanks/zf2-writing-service-components Modules are more specifically for ZF2 ApplicationsServiceComponents [GH.: libraries installed via Composer] are resusable libraries for any code baseBaseRule:If it involves the MVC; it should more than likely be a module.
Bisher einzige globale VuFind Komponente (vufind-org/vufindhttp):https://packagist.org/packages/vufind-org/vufindhttp zu anfang ebenfalls ein lokales Modul, dann Refactoring zur globalen Komponente
Wie könnten wir lokale Module in globale Komponenten aufteilen?
Wo sind wir an gewisse Grenzen gestossen
Globale Komponenten (Einbindung über Composer) - weniger Anwendungsmodule!
aktuelle Aufteilung Vorschlag global Components
Bootstrap VuFind Appliation
Interfaces / Basis Klassen für Suchtargets
Konkrete Implementierung des Targets
Einzig bisher verfügbarer globaler Service (zu anfang Anwendungsmodul)
singuläre Funktionalität
VuFind schwergewichtige MVC Implementierung (e.g. Controllers)
Anforderung: zusätzliche Abhängigkeiten
Wo sind wir an gewisse Grenzen gestossen
Problem: Nutzung zusätzlicher Bibliotheken die nicht bereits mit dem VuFind Repository mitgeliefert werdenmailing list thread: [VuFind-Tech] Local composer dependencies
http://sourceforge.net/p/vufind/mailman/message/34334936/
unsere aktuelle Lösung: lokale Abhängigkeiten parallel zum VuFind composer.json um Mergekonflikte zu vermeiden (wir sind mit dieser Lösung nicht sehr glücklich)
Mein Vorschlag für VuFind3:
- nicht mehr das „Clone and Run“ Prinzip anwenden- Abhängigkeiten zu Drittbibliotheken sollten nicht mehr Teil des VuFind Repositories sein.
evtl. als Mittelweg einen umfassenden, alle Abhängigkeiten enthaltenen Branch für jeden produktiven Release
https://github.com/linked-swissbib/vufind/tree/vfsb/linked/module/LinkedSwissbib/src/LinkedSwissbib/Backend/Elasticsearch
resources.swissbib.ch: verkleinerter MVC Workflow auf dedizierten Hosts
light MVC in swissbib für Covererstellung
'jeder' Request bedeutet immer noch (wenn auch hier vereinfacht und auf singulären host ausgelagert) :- Laden des Moduls- Laden der Konfiguration (vereinfacht duch Caching in Production)- Suchen nach der passenden Route- Bootstrapping des Moduls und Registrieren der EventManager- Controller Dispatching- Rendering (bei Cover nur Imagerückgabe)
unsere aktuelle Lösung (vor allem zur Verringerung der Last auf den Hosts):- Auslagerung der Covererstellung (immer noch lokales Modul) auf dedizierte Hosts mit angepasstem MVC Workflow https://resources.swissbib.ch/Cover/Show?isn=0133994619&size=small
- Nachteile:→ Codeverdoppelung da von VuFind keine dedizierten, globalen Komponenten angeboten werden → immer noch ZF2/MVC – aktuell keine Alternative vorhanden→ weniger Funktionalität (kein themerelevantes Rendering von Images, für uns nicht notwendig)
Gesucht: 'leichtgewichtige workflows'
Aktueller swissbib Ansatz für die Covererstellung:
Fazit:für spezifische und einfache Requests wie z.B. die Covererstellung oder Autosuggestion -die sehr häufig stattfinden- ist der klassische MVC eine hohe Belastung für den Server, langsamer in der Darstellung auf der Oberfläche und nicht notwendig!
Vorteile von globalen Komponenten und selbst installierten Dependencies
Zusammenfassung: Vorteile von globalen Komponenten und eigener Installation von Dependencies via Composer
1) Flexibere Nutzung von einzelnen Komponenten (durch VuFind selber aber auch durch Drittservices)
2) Merge Konflikte lassen sich leichter vermeiden
3) singuläre globale Repositories würden die Aufteilung der Verantwortung für die Implementierung von bestimmten Funktionen auf einzelne Institutionen erleichtern (Villanova, Finna, Finc, BSZ, swissbib ….. )
4) leichtere Versionsverwaltung: nicht alle Komponenten ändern sich gleich häufg
Erster Ausblick auf Änderungen im neuen ZF3
Ausblick auf Umstellungen im kommenden Zend Framwork 3
1. Aufteilung des singulären ZF2 Repository in viele einzelne Repositories
2. Umsetzung des PHP Specification Request 7 (PSR7) innerhalb des Zend Frameworks als Grundlage für neue sog. 'Middlewarecontainer'
3. Refactoring zentraler Komponenten des Zend Frameworks (vor allem Service Manager und EventManager) https://github.com/zendframework/zend-eventmanager/pull/4 https://twitter.com/mwop/status/643545615478226945
neue Aufteilung des Frameworks in singuläre globale Komponenten mit Metarepository
Aufteilung des singulären Repositories in viele einzelne Komponenten
Why split them at all?"But you can already install components individually!" True, but if you knew how that occurs, you'd cringehttps://mwop.net/blog/2015-05-15-splitting-components-with-git.html
Version < 2.5 Framework in einem Repository (vergleichbar mit dem aktuellen VF2)https://packagist.org/packages/zendframework/zendframework
neue Aufteilung des Frameworks in singuläre globale Komponenten mit Metarepository
ZF2 Repositoryaufbau ab 2.5 (Vorbereitung für ZF3)
Version >= 2.5: insgesamt rund 50 einzelne Repositories
https://packagist.org/packages/zendframework/zendframework
2. Umsetzung des PHP Specification Request 7 (PSR7) innerhalb des Zend Frameworks
neue Möglichkeiten von ZF3 / PHP7 für de VuFind 3 Architektur
PSR 7 in Kürze: einheitliche Interfaces zur Repräsentation von HTTP Nachrichten und URIs
http://www.php-fig.org/psr/psr-7/https://mwop.net/blog/2015-01-26-psr-7-by-example.html https://mwop.net/blog/2015-01-08-on-http-middleware-and-psr-7.html http://blog.alejandrocelaya.com/2015/09/12/my-first-approach-to-zend-expressive/
standardisierte PSR7 Interfaces als Basis für Middleware Software
Zend Middlewarezend-stratigility
zend-expressivezend-diactoros
s. https://github.com/zendframework
Symphony Middlewarehttp://symfony.com/blog/psr-7-support-in-symfony-is-here
otherimplementationsfor Middleware
Müssen wir wegen der neuen Zendversion wie beim Wechsel von VuFind1 zu VuFind2 alles umstellen?
Ausblick auf Umstellungen im kommenden Zend Framwork 3
→ Anpassungen der zentralen Komponenten bekommen wir nahezu 'umsonst' (kleinere Anpassungen in den Schnittstellen ausgenommen)
→ wir 'müssen' kaum etwas umstellen!
→ für VuFind 3 'sollten' wir jedoch die Chance eines Refactorings auf Basis der genannten Erweiterungen (Middleware sowie singuläre Komponenten anstelle von 'Anwendungsmodulen') nutzen, um die geschilderten Schwächen zu beseitigen plus neue zusätzliche Möglichkeiten für Erweiterungen und Flexibilität zu erreichen.
Middleware in a Nutshell
Aufbau eines Middlewarestack
- Middleware als Rahmen (Container) für die Umsetzung eines Requests in eine Response
- Middleware kann, wie in Schalen, verpackt aufeinander aufbauen.
- jede Schale benutzt die einheitlichen Schnittstellen des PSR7 zum Austausch der Daten vom REQUEST und für die RESPONSE
- durch die einheitlichen Schnittstellen können die Container unterschiedliche Aufgaben übernehmen und durch alternative Implementierungen ausgetauscht werden
http://www.zend.com/en/webinars/recorded/show/3033_stratigility%20middleware%20for%20php%20and%20psr-7
https://www.youtube.com/watch?v=B2YqevRpi6E
Middleware in a Nutshell
Möglichkeiten für den Zusammenbau von Middlewarecontainern
Komposition von „Middleware-schalen“:
Authentication /Authorization
VF / Favorites(ZF2 / MVC)
Request
Response
Response(Error)
Middleware in a Nutshell
Möglichkeiten für den Zusammenbau von Middlewarecontainern
Einsatz unterschiedlicher Middleware
VF / Search(ZF2 / MVC)
RequestSearch?lookfor=hello
Response
Response(Error)
„schwergewichtige“ ZF2 / MVC Implementierung
VF Cover / Autosuggest
(lightweight Middleware)
RequestCover/123456
Response
Response(Error)
„leichtgewichtige“ Middleware für den Request von Images / Autosuggest
Middleware in a Nutshell
neue Möglichkeiten von ZF3 / PHP7 für de VuFind 3 Architektur
Einsatz unterschiedlicher Middleware
REST API
Request/api?q=hello world
Response
Response(Error)
- REST API Container - basierend auf Zend apigility (https://apigility.org)- ausgewählte einzelne Repositories implementieren die Funtionalität
linked.swissbib.ch(dependencies:
vufind_corevufind_search_base
swissbib_backend_elasticsearch)
vufind - functionality provided via API(proposal Finna)
(dependencies: vufind_core
various additional componentscould be deployed on dedicated infrastructure)
Wie kann ein Middlewareaufbau im Code aussehen?
mögliche Zusammenstellung von Middleware als einfaches Codebeispiel
weitere praktische Codebeispiele:https://github.com/zendframework/zend-expressivehttp://blog.alejandrocelaya.com/2015/09/12/my-first-approach-to-zend-expressive/
PHP 7 und Vorschlag für einen gestaffelten PHP Umstieg in VuFind
current VuFind Versionout of support!
Kurzinfos zu PHP 7 (produktiver Release im Oktober 2015) :Zend Engine geriet durch die Entwicklung der Facebook HHVM unter Druck → grundlegende Anpassungen und Überarbeitungen → grosse Performanceverbesserungen → TypeHints → ZF3 Minimum: PHP 5.5 / wird gegen PHP 7 getestet https://www.zend.com/en/resources/php7_infographic
Mein Vorschlag welche PHP Versionen wir einsetzen sollten:VF2 → Wechsel zu PHP 5.5 / PHP 5.6VF3 → Entwicklung wird gegen PHP 7 getestet ab 2. Hälfte 2016 Umstellung der Requirements auf PHP 7
Übersicht der aktuellen PHP Versionen
mögliche nächste Schritte ?
Vorschlag nächste Schritte nach dem VuFind Anwendertreffen in Konstanz 2015
→ VuFind Summit: Oktober 2015 Start Diskussion der VuFind 3 Roadmap (an dieser Diskussion sollten viele teilnehmen / ein Grund für diesen Vortrag / englische Übersetzung folgt)
→ Diskussion sollte nicht nur am VuFind Summit stattfinden. Alle aktiven 'coders' sollten in den nächsten Wochen damit beginnen, sich mit den neuen zusätzlichen Möglichkeiten der aktuellen zu PHP und Zend vertrauter zu machen. Dies würden sehr helfen, ein verbessertes Design für die Architektur von VuFind 3 zu finden.
→ Hierfür müssen wir nicht warten, bis das Release von Zend Framework 3 erscheint. Zentrale Komponenenten sind bereits jetzt vorhanden und werden bis zum Release nur noch verbessert. Um es nochmals zu erwähnen: Eine wichtige Voraussetzung, die Aufteilung in einzelne globale Komponenten geschah bereits mit der Version >= 2.5
https://github.com/zendframework/zend-stratigility https://github.com/zendframework/zend-diactoros https://github.com/zendframework/zend-expressive https://apigility.org/ (für Schnittstellen basierend auf REST Prinzipien)
Diskussion / Fragen / Buhrufe / Begeisterung ??
wie kann mich direkt erreichen:guenter.hipler@unibas.chTel.: +41 61 267 31 12
Links für weitere Infos zu den swissbib Projekten und unseren Rahmenbedingungen
Blog: http://swissbib.blogspot.ch/ Twitter: www.twitter.com/swissbib Projektwiki: www.swissbib.org (Memberstatus mit kurzem mail)Code swissbib: https://github.com/swissbib (swissbib „classic“)Code linked-swissbib: https://github.com/linked-swissbibProjektmail: swissbib-ub@unibas.ch
SUK-Programm 2013-2016 P-2 «Wissenschaftliche Information: Zugang, Verarbeitung und Speicherung»
http://www.swissuniversities.ch/de/organisation/projekte-und-programme/suk-p-2-wissensch-information-zugang-verarbeitung-speicherung/
Recommended