34
FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2018 Michael Theis, Lehrbeauftragter

FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen

Sommersemester 2018 Michael Theis, Lehrbeauftragter

Page 2: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Was bringt uns die Cloud?

2

Page 3: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Diese Cloud Native Firmen zeigen die gleichen Charakteristiken:

Hohe Innovationsgeschwindigkeit

Permanent verfügbare Dienste

Web Scale IT (Gartner)

Optimale User Experience auf mobilen Endgeräten

3

Page 4: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

4

Unbegrenztes Datenvolumen

• Big Data

• Hohe Verfügbarkeit durch weltweite Replikation

• Hohe Sicherheit durch redundante Abspeicherung

Unbegrenzte Rechenpower

• Rechenpower mit automatischer Lastanpassung

• Verarbeitung beliebig großer Datenmengen (auch in Echtzeit)

• Nur die genutzte Rechenleistung wird verrechnet

Unbegrenzte Bandbreite

• Gerüstet für Connected Services mit Millionen von Endgeräten

• Bereit für das Internet der Dinge (IoT)

• Dynamische Anpassung der Bandbreite in Selbstbedienung

Page 5: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

5

Agile Infrastruktur

• Provisionierung beliebiger Infrastruktur in Selbstbedienung

• Kurzfristiger Auf- und Abbau möglich

• Hohe Automatisierung (Infrastructure as Code)

• Abrechnung im Stundentakt

Eingebaute Sicherheit

• Hohe Ausfallsicherheit durch Verteilung auf mehrere Standorte

• Abschottung durch virtuelle private Netzwerke

• Permanente Sichtbarkeit des aktuellen Systemzustandes

• Robustheit durch Redundanz

• Private Direktverbindungen

Page 6: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

6

On Premise / Private Cloud

• Höchste Sicherheit

• Höchste Kontrolle

• Beschränkte Skalierbarkeit und Bandbreite

• Eingeschränkte Verteilung auf Standorte (nur wo eigene Datacenter vorhanden)

Off Premise / Public Cloud

• Ausreichende Sicherheit (AWS DE, Azure DE)

• Ausreichende Kontrolle

• Unbeschränkte Skalierbarkeit und Bandbreite

• Weltweite Verteilung auf Standorte

• Anbindung an Firmennetze möglich (Express Route, Direct Connect)

Hybrid Cloud / Multi Cloud

• Höchste Flexibilität

• Auswahl des besten Providers für die spezifische Anforderung (Bandbreite, Kosten, Office 365)

• Portabilität durch Cross-Cloud-Plattformen wie Cloud Foundry oder OpenShift möglich

Page 7: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Was für eine Architektur brauchen unsere Applikationen für die Cloud?

7

Page 8: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

8

Cloud Native Computing Foundation Landscape

Page 9: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

9

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 10: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

10

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 11: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

11

(1) CodebaseEine Codebasis unter Versions-kontrolle mit vielen Deployments

(2) AbhängigkeitenDeklariere und isoliere Abhängigkeiten explizit

(3) KonfigurationSpeichere Konfiguration in der Umgebung ab

(4) Unterstützende DiensteBehandle unterstützende Dienste (u.a. DBs) wie angehängte Ressourcen

(5) Build Release RunTrenne die Build-Phase strikt von der Run-Phase

(6) ProzesseFühre deine App als einen oder mehrere zustandslose Prozesse aus

(7) Bindung an PortsExportiere Dienste über Port-Bindungen

(8) NebenläufigkeitSkaliere über das Prozessmodell(9) Verfügbarkeit

Maximiere Robustheit durch schnelles Hochfahren und problemlosen Runterfahren

(10) Parität zwischen DEV und PRODHalte alle Umgebungen so gleich wie möglich

(11) LogsBehandle Logs wie Ereignisströme

(12) Admin-ProzesseFühre Verwaltungsaufgaben als Einmal-Prozess aus

12 FactorApps

Quelle: https://12factor.net

Page 12: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

12

(13) API FirstDefiniere deine API (= Consumer Driven Contract) als erstes und setze auf Consumer-Driven-Contract-Testing.

12+ FactorApps

(14) Trenne Credentials von Konfiguration & CodeCredentials gehören in einen Secret Store!

(15) Binde Services über NamenBinde Services immer über Namen und nie über IPs oder Ports

(16) Teile nichtsTeile keine Datenbank, kein Dateisystem und kein Domänenmodell

(17) Halte keinen Zustand vorJeder API-Call ist auf sich allein gestellt (keine HTTP-Session, keine Session-Stickiness).

(18) Tokenbasierte Authentisierung & AutorisierungZustandslose App kann keine Informationen über angemeldeten Benutzer halten => Aufrufer muss diese liefern => Einsatz von tokenbasierter Security erforderlich

(19) TelemetrieEine App in der Cloud ist wie eine Sonde im Weltraum: kein SSH, keine Logdateien => Einsatz und Integration von Monitoring- und Log-Analyse- Tools unausweichlich

(20) BASE statt ACIDVerteilte Transaktionen über lose gekoppelte Services nicht umsetzbar => Stelle dich auf eventuelle Konsistenz ein und priorisiere nach dem CAP-Theorem

Quelle: Kevin Ho€man Beyond the Twelve-Factor App Exploring the DNA of Highly Scalable, Resilient Cloud Applications von Pivotal

Page 13: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

13

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 14: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

14

Microservices sind ein Architekturmuster der Informationstechnik, bei dem komplexe Anwendungssoftware aus unabhängigen Prozessen komponiert wird, die untereinander mit sprachunabhängigen Programmierschnittstellen kommunizieren. Die Dienste sind weitgehend entkoppelt und erledigen eine kleine Aufgabe. So ermöglichen sie einen modularen Aufbau von Anwendungssoftware.

Quelle: Wikipedia; https://de.wikipedia.org/wiki/Microservices

Page 15: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

15

• Eine Plattform

• Eine Datenbank

• Ein Prozess, eine Deployment Unit, ein Release

• Hohe Einheitlichkeit

• Hohe Abhängigkeit

• Großes Team mit klaren Rollen

• Unterschiedliche Plattformen

• Polyglotte Persistenz

• Viele Prozesse, viele Deployment Units, viele Releases

• Hohe Flexibilität

• Keine Abhängigkeit

• Kleine cross-funktionale Teams

Monolith Microservices

Page 16: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

16

Modelliert um eine Geschäftsdomäne

Prinzipien von Microservices

Quelle: Sam New, Building Microservices

Kultur der AutomatisierungVerstecke Details der

Implementierung

Dezentralisiere alle Dinge

Deploye unabhängig

Consumer FirstIsoliere Fehler

Hohe Überwachbarkeit

Page 17: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

17

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 18: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Benötigte Infrastruktur und Services kann sich jeder selber provisionieren (Kiosk)

Provisionierung von Infrastruktur dauert Minuten statt Monate

Unterstützt Automatisierung (Infrastructure as Code)

Abgerechnet werden nur die tatsächlich genutzten Ressourcen

Status der provisionierten Ressourcen für jedermann einsehbar

Verantwortung für provisionierte Ressourcen wandert ins Entwicklungsteam (DevOps)

18

Page 19: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

19

Plattform für Produktionsumgebungen

Plattform für Integrations- und Testumgebungen

Plattform für Toolchains

INT A INT BTEST A TEST B

PROD A PROD B PROD C

Tools A Tools B Tools C

PlattformenProdukte

AgilesDevOps-Team

Produktentwicklung

AgilesDevOps-Team

Plattformbetrieb

Page 20: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

20

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 21: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Commit Stage

•Wird durch Commit angestoßen

•Checkt Code aus

•Kompiliert Code

•Führt Unit-Tests durch

•Analysiert Code

•Erstellt Artefakt (Deployment Unit)

Integration Test Stage

•Deployt Artefakt auf Integrations-Umgebung

•Führt System-Tests aus

•Rollt bei Problemen automatisch auf Vorgängerversion zurück

User Acceptance Test Stage

•Deployt Artefakt auf User-Acceptance-Test-Umgebung

•Führt System-Tests durch

•Tester führen manuelle Abnahme-Tests durch

•Product Owner gibt Artefakt für Produktion frei

•Rollt bei Problemen automatisch auf Vorgängerversion zurück

Capacity Test Stage

•Deployt Artefakt auf Capacity-Test-Umgebung

•Führt System-Tests durch

•Führt Last- und Stress-Tests durch

Production Stage

•Deployt Artefakt auf Produktions-Umgebung

•Führt System-Tests durch

•Rollt bei Problemen automatisch auf Vorgängerversion zurück

21

Page 22: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

22

ContinuousIntegration Server

Code Quality Analyzer

Integration Test

User Acceptance

Test

CapacityTest

Production

Build Tool

Version Control System

deploy artifact,run tests

run analysis

build artifact

deploy artifact,run tests

deploy artifact,run tests

deployartifact,run testsArtifact

Repository

push/pull artifact

Drone

Jenkins

Test Tools

test artifact

Gitea

trigger build

Page 23: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

23

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 24: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Motivation: Verbergen von Implementierungsdetails gegenüber dem Nutzer

Außer der API wird nichts mehr geteilt

Synchrone und asynchrone Kommunikation möglich

Zahlreiche Herausforderungen Kompatibilität, Granularität, Austausch

großer Datenmengen, Orchestrierung oder Choreographie, HATEOAS

Consumer Driven Testing erforderlich

24

Page 25: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

25

Micro-services

12 FactorApps

Agile Infrastruktur mit Selbst-bedienung

Voll-automati-

siertesDeploy-

ment

API-basierte Zusammen-

arbeit

Anti-fragilität

Cloud Native Architecture

Page 26: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

26

Antifragilität ist mehr als Resilienz oder Robustheit. Das Resiliente, das Widerstandsfähige widersteht Schocks und bleibt sich gleich; das Antifragile wird besser […]Das Antifragile steht Zufälligkeit und Ungewissheit positiv gegenüber, und das beinhaltet auch – was entscheidend ist – die Vorliebe für eine bestimmte Art von Irrtümern. Antifragilität hat die einzigartige Eigenschaft, uns in die Lage zu versetzen, mit dem Unbekannten umzugehen, etwas anzupacken – und zwar erfolgreich –, ohne es zu verstehen.

Quelle: Nassim Nicholas Taleb, Antifragilität, S.21/22

Page 27: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

In massiv verteilten Systemen lautet die Frage nicht, ob Fehler auftreten werden sondern wann sie auftreten werden!

Motivation: Antifragile Systeme werden durch Ausfälle besser

Extrem erfolgreiches Beispiel für Antifragilität durch Chaos Engineering: Netflix mit seiner Simian Army

Bestimmte Patterns helfen bei der Umsetzung von Antifragilität

27

Page 28: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Sind leicht zu übersehen aber essentiell wichtig

Aufrufe aus eigenem Prozess heraus mit Timeouts versehen

Eintretende Timeouts müssen am besten aktiv überwacht jedoch mindestens passiv protokolliert werden

Finden des richtigen Timeout-Wertes ist harte Arbeit!

28

We discovered the hard way that systems that just act slow are much harder to deal with than systems that just fail fast.

Quelle: Sam Newman, Building Microservices, S. 210.

Page 29: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

29

Upstream Service

Downstream ServiceCaller

Upstream Service

Downstream ServiceCaller

Upstream Service

Downstream ServiceCaller

Upstream Service

Downstream ServiceCaller

(1) Aufrufe schlagen fehl oder laufen in Timeout

(2) Die Verbindung wird unterbrochen bei Erreichen eines Schwellwertes und Aufrufe schlagen schnell fehl

(3) Verfügbarkeit wird periodisch überprüft und Aufrufe schlagen schnell fehl

(4) Verbindung wird wieder hergestellt, wenn Schwellwert für positive Gesundheitschecks erreicht. Aufrufe werden wieder durchgereicht.

Quelle: Michael Nygard

Page 30: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

30

Upstream Service

Downstream Service

Connection Pool

Caller

Upstream Service

Caller CallerCaller

Downstream Service

Downstream Service

Downstream Service

Connection Pool Connection Pool

Gemeinsamer Connection Pool / Thread Pool

• Ausfall eines Downstream Services führt zum Verhungern des Pools

• Alle Nutzer des gemeinsamen Pools betroffen

Getrennte Connection Pools / Thread Pools

• Ausfall eines Downstream Services führt nur zum Verhungern des zugeordneten Pools

• Nur Nutzer des dedizierten Pools betroffen

Page 31: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

31

Page 32: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

32

Page 33: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Josh Long, Kenny Bastani: Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud and Cloud FoundryO´Reilly UK Ltd, 1. Auflage, 22. August 2017; ISBN 978-1449374648

Sam Newman: Building Microservices: Designing Fine Grained SystemsO´Reilly & Associates, 1. Auflage, 25. September 2015; ISBN 978-1491950357

Michael T. Nygard: Release It! Design and Deploy Production-Ready SoftwareThe Pragmatic Bookshelf, 1. Auflage, 12. Juli 2017, ISBN 978-0978739218

Casey Rosenthal, Lorin Hochstein, Aaron Blohowiak, Nora Jones, Ali BasiriChaos Engineering: Building Confidence in System Behavior Through ExperimentsO´Reilly Media, Inc; 1. Auflage August 2017; eBook

Eric Evans: Domain Driven Design: Tackling Complexity in the Heart of SoftwareAddison Wesley 2004; ISBN 0-321-12521-5

Nassim Nicholas Taleb: Antifragile: Things that Gain from DisorderPenguin, 6. Juni 2013; ISBN 978-0141038223

33

Page 34: FWP Aktuelle Technologien zur Entwicklung verteilter Java … · 2018-04-02 · Microservices sind ein Architekturmuster der Informationstechnik, ... auf Capacity-Test-Umgebung •Führt

Michael TheisLehrbeauftragter Hochschule München

email [email protected] + 49 170 5403805web http://www.tschutschu.de/Lehrauftrag.html

34