events-meetups

JAX 2019 - Herbst

// 15-12-2019

Web-Apps mit Angular Workshop

In dem Workshop wurde eine Webapplikation basierend auf Angular und Typescript, sowie Spring Boot auf Serverseite erstellt. Der Client kommunizierte dabei über einen REST Service, welcher mit der HATEOAS Architektur implementiert wurde. Der große Vorteil dabei ist, dass die vom Server zurückgegeben Hypermedia Links den Status der Applikation steuern. Dadurch ist es unter anderem möglich, ein API weiterzuentwickeln, ohne dabei einen älteren Client entsprechend anpassen zu müssen.

Außerdem wurden einige Tipps und Tricks gezeigt, wie man mit Hilfe der Entwicklungstools wie npm und Jasmine effizient eine Angular Applikation aufbauen und entwickeln kann. Die hohe Konfigurierbarkeit dieser Tools ermöglicht einen schnellen Einsatz auf unterschiedlichen Systemumgebungen.

Domain-Driven Design

Zahlreiche Vorträge handelten davon ob DDD in einem Projekt sinnvoll oder überhaupt anwendbar ist. Hitzige Bühnendiskussion, wie dieses Konzept ins Unternehmen eingebracht werden kann, haben denn Stellenwert untermauert. 

Das Ziel ist das Softwareprojekt in seine fachlichen Bereiche zu gliedern. Der erste Schritt dafür, ist das Aufteilen der Domäne in ihren “Bounded Context”, dabei soll in jedem Bereich die fachliche Sprache angewendet werden, die “Ubiquitous language”. Es stellt dabei kein Problem dar, wenn Entitäten in verschiedenen Bereichen des Domänenmodells doppelt vorkommen oder etwas anderes bedeuten. Wenn dieses Design auf das Projekt übertragen ist, kann auch der Schritt Richtung Microservices gewagt werden.

Microservices

Wie baue ich eine Microservice Architektur? Wie konvertiere ich meinen Monolithen zu modernen modularen Microservices?  In einem Workshop der genau diese Themen behandelt, hat Johannes anhand eines e Commerce Beispiels ein Microservice Projekt gebaut. Zuerst wurde das Projekt mithilfe von DDD aufgeteilt und Micro und Macro –Architekturen aufgrund von Best Practices beschlossen. Danach wurden Docker Container gebaut, REST APIs geschrieben und Kubernetes eingerichtet. Als Nächstes wurden die klassischen Herausforderungen von Microservices behandelt:

  • Service Discovery (Kubernetes) 
  • Load Balancing (Kubernetes) 
  • Routing (Kubernetes) 
  • Tracing (Jaeger) 
  • Resilience (Envoy und Istio) 
  • Monitoring (Grafana und Prometheus) 
  • Logging (Elastic Stack) 

Da Kubernetes alleine nicht ausreichend für diese Problemstellung war, wurde die Service Mesh-Plattform Istio verwendet. Mittels Istio wurden die Themen Traffic Management sowie Sicherheits-, Verbindungs- und Monitoring-Funktionen diskutiert und erstaunlich schnell und einfach umgesetzt.

DevSecOps – Securitychecks als Teil der CI

Im Rahmen des Freitag-Workshops wurde behandelt, wie Security-Checks in eine Build-Pipeline integriert werden können. Als Erstes wurde in der Test-Applikation manuell nach Sicherheitslücken gesucht. Diese reichten von SQL-Injections bis hin zu Path-Traversal und CSRF (Cross-Site Request Forging) Problemen. Diese Methode ist enorm zeitaufwändig und komplex in der Durchführung. Abhilfe schafft dabei das richtige Werkzeug. So zum Beispiel die Open-Source-Software OWASP ZAP. Das Tool fungiert lokal als Proxy und protokolliert so den Network Traffic. Dieser wird auf Sicherheitsrisiken, etwa unverschlüsselte Passwörter, geprüft. Zusätzlich können aktiv Anfragen gesendet werden, deren Parameter mitunter SQL Statements oder JavaScript Code enthalten und somit auf potenzielle Sicherheitslücken hinweisen. 

Im nächsten Schritt wurde gezeigt, wie diese Security-Tests in eine CI/CD Pipeline mit Jenkins integriert werden können. Jenkins bietet hierfür das ZAP Pipeline Plugin an. Mittels dem Plugin können die Ergebnisse automatisiert ausgewertet werden und Quality Gates definiert werden. Als “good practice” empfiehlt es sich eine bestehende Testautomatisierung als Quelle für die System-Interaktion wiederzuverwenden. Aufgrund der hohen Systemauslastung durch die Security-Tests, sollten diese als Teil des Nightly Builds integriert werden.

IT-Forensik aus der Sicht von Entwicklern

Schadensfälle in der IT können immer auftreten. Seien es Hacker-Angriffe, eine Manipulation der Hardware oder ein Virusinfekt. Wichtig ist dabei, dass man nicht unvorbereitet erwischt wird. Jeder Betrieb sollte ein Konzept bereithalten um im Notfall richtig handeln zu können. Dabei ist ein koordiniertes Vorgehen und Protokollieren essentiell, damit mögliche Spuren nicht verwischt werden. Ein zuvor gut aufgebautes Logging unterstützt dabei bei der Suche nach verbliebenen Spuren.

Kotlin-Workshop

Patrick hat sich am Montag im Zuge eines ganztägigen Workshops dem Thema Kotlin für Java-Entwickler gewidmet. Bei Kotlin handelt es sich um eine statisch typisierte Programmiersprache für die JVM, entwickelt von der Firma Jetbrains (Hersteller der Entwicklungsumgebung Intellij IDEA).  Ziel des Workshops war es, die Grundzüge der Programmiersprache spielerisch anhand eines Übungsprojektes zu erlernen. Hierzu wurde unter anderem das Web-Framework Ktor verwendet. 

Jetbrains hat sich große Mühe gegeben den Problemen, die beim Entwickeln mit Java aufkommen, vorzubeugen und das mit Erfolg – seit Mitte 2019 empfiehlt Google offiziell Android-Apps in Kotlin zu implementieren. 

Warum Kotlin? Kotlin adressiert unter anderem das Thema von Nullpointer Exceptions. Bei Kotlin ist „Null“ ein Bestandteil der Typisierung und muss daher explizit behandelt werden. Viele Nullchecks lassen sich auch mit wenig Code abbilden und ersparen somit Implementierungsaufwand. Ein weiteres mächtiges Feature sind Kotlins Extensions. Mittels Extensions können bestehende Klassen (auch jene dritter, wie es bei Frameworks der Fall ist) um eigens implementierte Methoden erweitert werden. Aus Entwicklersicht sieht es so aus, als ob diese Methoden ein direkter Bestandteil der Klasse sind, obwohl die eigentliche Implementierung an einer ganz anderen Stelle ist.

Zusätzlich gab es einen Ausblick auf weitere Sprachfeatures und wie diese genutzt werden können um sich eine eigene DSL (Domain Specific Language) aufzubauen.

Consumer-Driven-Contracts mit Pact.io

Bei Consumer-Driven-Contracts handelt es sich um eine Form des Schnittstellen-Tests innerhalb einer Microservice-Architektur. Im Rahmen einer Live-Coding Session wurde mittels dem Framework Pact.io gezeigt, wie ein Microservice gegen externe Microservice Tests implementiert und auf Basis dieser Tests ein Vertrag zwischen den Microservices entsteht. Der sogenannte „Pact“. Dieser Pact wird dem Entwicklungsteam des anderen Microservices übermittelt, welches dann auf dem aufbauend automatisierte Tests implementiert. Der Pact beschreibt, welches Ergebnis aufgrund der Input-Daten erwartet wird. Durch dieses Vorgehen werden Schnittstellen-Inkompatibilitäten frühzeitig aufgezeigt, automatisiert getestet und die Kommunikation zwischen Crossfunctional-Teams gefördert.

Fazit

Die W-JAX 2019 war ein voller Erfolg. Beginnend bei der Organisation, der erstklassigen Verpflegung während der Konferenz bis hin zu den eigentlichen Inhalten, bei denen ein jeder auf seine Kosten kam. Egal ob Backend-, Frontend-Entwickler oder Software-Architekt.