Anwendung ◦ Verbindet Nutzer mit Fahrzeug für z.B. ▪ Automatisches Abschließen der Tür ▪ Vorkonfiguration der Standheizung/Klimaanlage ◦ B2B Use Case ▪ “Pay how you drive” ◦ Anlage und Verwaltung von Nutzerkonten ◦ Sichere Fahrzeugverknüpfungsprozesse ◦ Prozesse für Dienstaktivierung • Großer deutscher Automobilhersteller 5
3 Geos • Komplett auf Java EE 6 basiert - läuft auf WAS 8 • Schnittstellen zu externen Komponenten via ◦ JMS ◦ HTTP ◦ SOAP ◦ JDBC (DB2) Technische Details der Anwendung 7
Geschwindigkeit & Zyklen • Klarere Domain-spezifische Trennung der Anwendung • Beispiel Hotfix Data Center WAS App Cloud Micro Services App Kick-off Q3 2016 Zukunft 8
◦ Lauffähig in einem Container ◦ Idealerweise Unterstützung eines Liberty Buildpacks/Runtime ◦ Skalierbar ◦ Stateless • Wahl der Variante mit geringstem Risiko • Ermöglichung eines fließenden Wechsels / Zero-downtime 12
WAS App Cloud Foundry Liberty Buildpack Liberty App Cloud Foundry Various Buildpacks App‘ App‘ App‘ App‘ „WAS in container“ „Liberty Profile“ „Reimplementierung Cloud Native“ Initiale Ausrichtung • Einfacher WAS nur sehr bedingt Container-tauglich • WAS Cluster unmöglich • Zu lange Startup Zeit • Von IBM nicht empfohlen
App Cloud Foundry Liberty Buildpack Liberty App Cloud Foundry Various Buildpacks App‘ App‘ App‘ App‘ „WAS in container“ „Liberty profile“ „Reimplementierung Cloud Native“ • Gewünschter Zielzustand • Erfordert Umschreiben großer Teile • Zu riskant für direkte Umstellung von alter zu neuer Architektur • Bedeutet zwei parallele Code-Branches bis zum Go-Live Initiale Ausrichtung 15
als Runtime • Ansatz mit gleicher Backend Komponente für minimalste Änderung • Proof of Concept “Anwendung kann in Liberty laufen” • Fokus auf möglichst wenig Änderung im Code und Logik, sondern in hauptsächlich in der Konfiguration • Dauer ca. 2 Monate Phase I - WAS nach WLP Local Operating System WAS App Local Operating System WLP App 19
WorkArea API/SPI nicht verfügbar • WebSphere Web Services Security API nicht verfügbar • Java API for RESTful Web Services (JAX-RS) muss Version 2.0 sein • JNDI Lookups mit “ejblocal” Prefix sind nicht unterstützt • WAS toleriert mehr (auch außerhalb der Java EE Specs) ◦ z.B. Klasse mit @Singleton und @Stateless annotiert 25
wird “sauberer” in WLP • PoC sehr hilfreich - Modell außerhalb “Agile” • IBM Tools hilfreich, aber nicht immer akkurat - “hört sich eventuell schlimmer an als es wirklich ist” • Bietet gute Grundlagen, reicht aber allein oft nicht aus • Kompatibilitätsmatrix sehr hilfreich • IBM Support hilfreich 26
Bufferpool & Tablespaces ◦ Administriert und gewartet von “Kunden-Ops” ◦ Betrieben in eigenem Datencenter • Flyway zur Datenbankmigration • Apache OpenJPA als OR-Mapper 29
• Das manuelle migrieren der Migrationsskripte zeigte auf, welche DB2-spezifischen Mechanismen verwendet wurden (bspw. MERGE INTO Statements) • Wechsel zwischen AzureSQL und MySQL mit geringem Aufwand verbunden (Sequences müssen entfernt / ersetzt werden) 33
verschiedenen Technologien • Anwendungslandschaft erfordert weiterhin asynchrone Kommunikation, auch in / aus der Cloud 36 App SOAP / REST / JMS Request SOAP / REST / JMS Response App
Cloud-native • AMQP-Broker via JMS-Interface möglich, jedoch nicht eingesetzt • Gewählt wurde Async-REST: ◦ REST Call übergibt Callback-URL ◦ AMQP-broker transparent integriert 37 App Outbound REST Call incl. Callback-URL acknowledge REST Callback acknowledge App B r o k e r
auf • Apache QPID hätte können JMS via AMQP ermöglichen, wenn es im CDI-Container wäre • Azure Service Bus mit QPID in der benötigten Version inkompatibel • Async REST wird entfernt sobald “alles in der Cloud ist” ; AMQP bevorzugt 38
zu betreiben • Erster Ansatz in einer lokalen Dev VM mit Anbindung existierender Services für Datenbank und Messaging • Zweiter Ansatz mit public Variante PCF auf Microsoft Azure und Anbindung cloud-basierter Services für Datenbank und Messaging 40
lokaler Entwicklungsumgebung betreiben • Erster Ansatz mit gleicher Persistenz und Messaging Backends wie zuvor Local Operating System Liberty App Local Operating System Liberty App Local CF env 43
• DB und Messaging Migration kann weitergemacht werden während App migriert wird • Minikube/Minishift als Alternativen • Sehr positive Erfahrungen mit Pivotal Cloud Foundry und Microsoft Azure • Übergang von Dev zu Public quasi über Nacht 54
den Monolithen gepackt • Zerteilung des Monolithen mit Hilfe des Strangler Patterns ◦ Vorhandene Funktionalität wird in neuem Service abgebildet und damit im Monolithen redundant und ersetzbar gemacht 56 CF Spring „new“ REST Liberty App CF Liberty App‘ Liberty App‘ Nodejs App‘ Spring new Ruby/ Go/ Swift MS‘ New dev Decomposition