Posts

Posts mit dem Label "Microservice" werden angezeigt.

IT Stability Health Radar

Bild
How to run IT applications stable in production? Instead of providing one more operations readiness checklist, I created an IT Stability health radar. This helps in agile projects to choose the next stability improvement depending on current situation. All non-functional requirements in this health radar are prioritized by levels, so that you and your Product Owner can plan them properly. IT Stability Health Radar Companies have often operations readiness checklists, which describe what to do before customers can use an IT system in production. These long lists with non-functional requirements are not easy to use and fulfill in agile working environments. Product owners and business stakeholders have a hard time to accept these requirements, if they come all at the same time and might block a big part of the team for several weeks.  In this article I focus on non-functional requirements related to IT stability. I group and order them, so that you learn where to start and which stab...

Performanz Tuning: Strategien und Tipps aus der Praxis

Bild
Performanz-Problemen sind meist schwierig zu lösen. Hier zeige ich euch, wie wir unser letzten Problem analysiert, gemessen und gelöst haben. Unter dem Zeitdruck des bevorstehenden Go-Lives wählten wir Strategien, um Risiken durch Seiteneffekte zu vermeiden. Analyse von Performanz-Problemen Aus Kundensicht ist unser System eine Browser-Anwendung. Wenn die Seiten im Browser langsam laden, haben wir ein Performanz-Problem. Die Diskussion, was langsam bedeutet und ob langsame Ladezeiten in manchen UseCases akzeptabel sind, ignoriere ich hier. Unsere Situation war eindeutig, statt Ladezeiten von 1-2 Sekunden dauerte es in einigen Fällen mehr als 10 Sekunden. Logs sind ein guter Startpunkt für die Analyse. Eventuell habt Ihr einen Log-Eintrag am Anfang und Ende der Anfrage. Mit den Zeitstempeln dieser beiden Log-Einträge könnt Ihr die Bearbeitungsdauer der Anfrage überprüfen. Das bestätigt objektiv euer Preformanz-Problem. Wo treten Performanz-Probleme auf? In unserem Fall betraf das Perfor...

Asynchroner, gepufferter Nachrichten-Austausch mit RabbitMQ und Spring

Bild
RabbitMQ ist ein Nachrichten-Broker mit integrierter Queue zur asynchronen Kommunikation zwischen Services. Der Produzenten-Service übergibt Nachrichten an RabbitMQ ohne auf den Konsumenten-Service zu warten. Der Konsument holt sich Nachrichten aus der RabbitMQ Queue nach Bedarf und kann so nicht vom Produzent mit Nachrichten überflutet werden. Hier zeige ich die Spring AMQP Implementierung zur RabbitMQ Integration. Vorteile des asynchronen, gepufferten Nachrichten-Austauschs Nachrichten Produzent und Konsument müssen nicht aufeinander warten. Wenn der Produzent z. B. für den Benutzer einen Auftrag erstellt, muss der Benutzer nicht warten bis der Konsument den Auftrag erfolgreich verarbeitet hat. Der Produzent übergibt die Nachricht an die RabbitMQ Queue und kann dem Benutzer danach eine Erfolgsmeldung anzeigen. Das ist insbesondere bei lang andauernden Auftragsverarbeitungen im Backend (Konsument) angenehm für den Benutzer, da er nicht warten muss. Der Konsument könnte den Benutzer sp...

REST-API mit OpenAPI Spezifikation und Swagger generieren

Bild
REST-APIs können als OpenAPI Spezifikation menschen- und maschinenlesbar beschrieben werden. Die maschinenlesbare OpenAPI Spezifikation (vormals bekannt als Swagger Spezifikation) dient Code-Generatoren als Vorlage zum Generieren von Client- oder Server-Code in viele verschiedenen Programmiersprachen. Neben den Basics zeige ich euch hier, wie man den Code-Generator mit Maven verwendet, um API Implementierung und Spezifikation immer synchron zu halten. API first & Code Generatoren Beim API first Konzept geht es darum, dass man von Anfang an, die API im Scope der Entwicklung hat. Die API wird vor der Implementierung definiert und kann auch schon mit anderen Teams ausgetauscht werden, welche den Service über die API nutzen. Wird die API als OpenAPI Spezifikation im json oder yaml Format definiert, können mehrere Teams den Client-Code zeitgleich mit der Service-Implementierung entwickeln. Als Unterstützung für den API first Ansatz gibt es Code Generatoren, die für euch ein Client SDK ...

Spring Native Microservices mit GraalVM - Blitzstart in der Cloud

Bild
Der perfekte Microservice skaliert in der Cloud optimal, so dass sprunghaft steigende Last fehlerfrei verarbeitet wird. Mit Spring Native und der GraalVM können wir Cloud native Images bauen. Container von nativen Images starten trotz geringerem Ressourcenverbrauch blitzschnell. Dazu zeige ich euch hier eine Demo. AOT Kompilierung mit GraalVM GraalVM ist eine Java VM (Virtuelle Maschine) und ein JDK (Java Development Kit) in den Java LTS Versionen 11 oder 17. Oracle entwickelt GraalVM und bietet es als freie Community Edition oder lizenzpflichtige Enterprise Edition an. Seit Version 19 im Mai 2019 gilt GraalVM als produktionsreif. Die große Besonderheit von GraalVM ist die ahead-of-time (AOT) Kompilierung des Sourcecodes. Damit bauen wir in der Build-Phase (z.B. mit Maven) ein natives Image. Native Images enthalten alle benötigten Applikations Klassen, Dependencies, 3rd Party Bibliotheken und JDK Klassen. Das native Image ist eine alleinstehende, ausführbare Binärdatei, deren Vorte...

Testautomatisierung von REST-APIs und Microservices

Bild
Services oder Microservices mit REST-API können mit wenigen und einfachen Tools entwicklungsbegleitend getestet werden. Mit dem Spring Boot Standard Technologie-Stack bestehend aus JUnit, Mockito und Maven können EntwicklerInnen direkt loslegen und automatisierte Unit- und Integrationstests schreiben. In diesem Artikel werde ich dies demonstrieren und Tipps zur Integration in eine CICD Pipeline geben. Die Testpyramide bzw. Testarten Wenn ihr nach der Testpyramide sucht, findet ihr relativ viele verschiedene Varianten. Das Prinzip ist aber immer ähnlich: die meisten Tests werden auf der untersten Ebene benötigt, wo die kleinsten Einheiten möglichst umfangreich getestet werden. Das ist typischer Weise die Testart Unit Tests zum Testen von einzelnen Klassen. Je höher man in den Ebenen der Testpyramide aufsteigt, desto weniger Tests werden benötigt, da diese Tests einen deutlich größeren Bereich des Systems durchlaufen. Für Services oder Microservices mit einer REST-API könnte die Test...