Slide 1

Slide 1 text

Vue.js und µServices für myHermes Stephan Stapel, Kirsten Schneider, Jan Ciriack Hermes Germany GmbH Hamburg, 25.04.2017

Slide 2

Slide 2 text

Inhalt 01 Willkommen bei Hermes 02 Der Weg zu Vue.js & µServices 03 Vue.js & µServices heute 04 Ausblick Fragen gerne jederzeit zwischendurch.

Slide 3

Slide 3 text

Der Weg nach vorne für Hermes: Alles Commodity? Ort, Datum 01 Willkommen bei Hermes Germany

Slide 4

Slide 4 text

Willkommen bei Hermes Germany! Wer sind wir? • Gegründet 1972 • Wir sind Teil des Otto-Konzerns • Eine von mehreren Hermes-Gesellschaften in Europa • Wir stellen derzeit 350 Millionen Pakete pro Jahr zu • Hermes Germany ist ein Unternehmen im Wandel – Ausrichtung auf digitale Geschäftsmodelle 4

Slide 5

Slide 5 text

myHermes.de • Aktuelle Fassung basiert auf IBM WebSphere Portal Server • Zahlen: • 15 Millionen Sendungen/ Jahr • 300 Millionen Seitenaufrufe/ Jahr • Problem: Keine Flexibilität: • Für die Weiterentwicklung • In der Gestaltung der Oberfläche 5

Slide 6

Slide 6 text

Grundprinzipien für die Neuentwicklung: • Kürzere Entwicklungszyklen • Intuitive Nutzbarkeit • Bereit für Wachstum des Geschäfts myHermes.de 6

Slide 7

Slide 7 text

02 Der Weg zu Vue.js & µServices

Slide 8

Slide 8 text

Ziele • Schnelle, überschaubare Auslieferungen von dynamischen und statischen Inhalten • Legacy-System Schritt für Schritt ablösen • Skalierung einzelner Komponenten • Nachhaltige Entwicklung, die Spaß macht 8

Slide 9

Slide 9 text

Verwendete Technologien 9 Backend Services Spring Boot Logging ELK Monitoring Spring-Boot-Admin Prometheus/Grafana CMS FirstSpirit Deployment Jenkins Resilience Hystrix UI ? Infrastruktur Docker Konfiguration Spring Cloud Config

Slide 10

Slide 10 text

Typische Seite 10 dynamischer Content dynamischer Content statischer Content statischer Content Footer Header

Slide 11

Slide 11 text

Voraussetzungen - Layout 11 • UI Komponenten und Module im Pattern Lab bereitgestellt • Es existiert ein Prototyp auf Basis von Twitter Bootstrap und JQuery

Slide 12

Slide 12 text

Voraussetzungen – CMS Aufgaben 12 CMS FirstSpirit

Slide 13

Slide 13 text

Voraussetzungen – CMS Funktionsweise 13 Die Redakteure legen auf Basis der myHermes Vorlagen Seiten und Web Content an Content Repository Deployment CMS Content v1.0 CSS Images JS HTML HTML CMS - FirstSpirit Content Creator Site Architect myHermes Seitenvorlagen Absatzvorlagen CMS Content v2.0 HTML CSS Images JS HTML

Slide 14

Slide 14 text

Erster Ansatz: serverseitiges Rendern 14 µService µService CMS CMS CMS CMS • statische Inhalte und das Seitengerüst werden durch das CMS generiert • ein µService ist für eine oder mehrere Seiten zuständig • ein µService kann auch HTML- Fragmente ausliefern • dynamische Inhalte werden über Thymeleaf Fragmente/Includes oder Server-Side- Includes eingebunden

Slide 15

Slide 15 text

Docker Erster Ansatz - Übersicht CMS Content Repository Nginx-Container Reverse Proxy Nginx-Container CMS Content Spring Boot-Container TrackingService Spring Boot-Container UserService 2 4 1 3 15 CMS Content v1.0 CMS Content v2.0

Slide 16

Slide 16 text

Erster Ansatz – Fazit Vorteile Nachteile • bekannte Technologie, zunächst schneller Fortschritt • µService liefert HTML-Seite aus • durch Thymeleaf Fragmente und SSI keine Vorschau im CMS • Jeder µService hat zur Laufzeit Abhängigkeit zum CMS Content • Namenskonventionen zwischen µService und CMS • JavaScript Code komplex und schwer zu testen • Konfigurierbarkeit eingeschränkt Lösung: clientseitiges Rendern der dynamischen Inhalte 16

Slide 17

Slide 17 text

Javascript Frameworks – Github stars 17 Quelle: https://risingstars2016.js.org/#framework

Slide 18

Slide 18 text

Warum Vue.js? • sehr leicht erlernbar • gute Dokumentation • leichtgewichtig • HTML-basierte Templates passen gut zu den Vorgaben im Pattern Lab • UI-Komponenten können einfach ins CMS eingebunden werden sehr gute Erfahrung am "Forschertag" Umsetzung der Kundenregistrierung an einem Tag 18

Slide 19

Slide 19 text

Aktueller Ansatz 19 Vue.js Vue.js CMS CMS CMS CMS • Statische Inhalte und das Seitengerüst werden durch das CMS generiert • Dynamische Inhalte werden clientseitig über Vue.js Komponenten gerendert • ein µService beinhaltet Vue.js Komponenten und REST-Interface

Slide 20

Slide 20 text

Docker Zweiter Ansatz - Übersicht Nginx-Container Reverse Proxy Nginx-Container CMS Content Spring Boot-Container tracking.js TrackingService Spring Boot-Container user.js UserService 2 3 3 1 20 CMS Content Repository CMS Content v1.0 CMS Content v2.0 3

Slide 21

Slide 21 text

03 Vue.js & µServices heute

Slide 22

Slide 22 text

Docker Heute - Überblick Nginx-Container Reverse Proxy Trackingservice UI REST tracking.js index.js template.html tracking.json Nginx-Container CMS Content Userservice UI REST user.js index.js template.html user.json index.html

Slide 23

Slide 23 text

Vue.js • Clientseitiges JavaScript-Framework zum Erstellen von interaktiven Webanwendungen • Erstes Release Dez. 2013, v1.0.0 in 2015, aktuell v2.2.6 • Konzepte:  Deklaritives Rendern  Reactivity  Komponenten  Data Binding • Modulare Struktur • Umsetzung des MVVM-Patterns • Beispiele: https://vuejs.org/v2/guide/

Slide 24

Slide 24 text

Docker Heute - Überblick Nginx-Container Reverse Proxy Trackingservice UI REST tracking.js index.js template.html tracking.json Nginx-Container CMS Content Userservice UI REST user.js index.js template.html user.json index.html

Slide 25

Slide 25 text

Vue.js - Sendungsverfolgung 25 Die statische Ergebnisseite

Slide 26

Slide 26 text

Vue.js – Sendungsverfolgung Integration in die Ergebnisseite

Slide 27

Slide 27 text

Docker Vue.js - Überblick Nginx-Container Reverse Proxy Trackingservice UI REST tracking.js index.js template.html tracking.json Nginx-Container CMS Content Userservice UI REST user.js index.js template.html user.json index.html

Slide 28

Slide 28 text

Vue.js - Sendungsverfolgung 28 Das Ergebnisfragment setzt sich aus mehreren Teilbereichen zusammen.

Slide 29

Slide 29 text

Vue.js – Sendungsverfolgung Verzeichnisstruktur und JavaScript der Suchergebnis- Komponente

Slide 30

Slide 30 text

Vue.js – Sendungsverfolgung Template der Suchergebnis- Komponente:

Slide 31

Slide 31 text

Vue.js – Sendungsverfolgung Template der Suchformular- Komponente

Slide 32

Slide 32 text

Vue.js – Sendungsverfolgung JavaScript der Suchformular-Komponente

Slide 33

Slide 33 text

Vue.js Bauen der Artefakte index.js template.html third-parties + dependencies tracking.js webpack frontend-maven-plugin mvn tracking.jar java

Slide 34

Slide 34 text

Docker Heute - Überblick Nginx-Container Reverse Proxy Trackingservice UI REST tracking.js index.js template.html tracking.json Nginx-Container CMS Content Userservice UI REST user.js index.js template.html user.json index.html CMS

Slide 35

Slide 35 text

Content Management System • Produkt: FirstSpirit • mächtiges System • Ziel: Hohe Flexibilität des Redakteurs

Slide 36

Slide 36 text

Der Weg nach vorne für Hermes: Alles Commodity? Ort, Datum 04 Bewertung und Ausblick

Slide 37

Slide 37 text

Bewertung und Ausblick • Clientseitige Integration sinnvoll • Vue.js gute Wahl • Integrationsansatz auf Code und Daten funktioniert bis jetzt gut, aber • Technologische Abhängigkeit zwischen Services • Release Management zwischen Services • Hybridlösung? • Vue SSR • Single Page Application vs. Multipage Page Application • CMS Integration? • Wie geht Seitensteuerung? (vue-router) • Wie geht SEO? • Redaktionelle Flexibilität vs. „CMS as a platform“

Slide 38

Slide 38 text

Bewertung und Ausblick • Schrittweise Migration eingeleitet • Continuous Delivery im Blick • Immer in Bewegung

Slide 39

Slide 39 text

Vielen Dank!