performance-tuning von spring boot / cloud

69
Performance-Tuning von Spring Boot / Cloud Ingo Düppe | Crowdcode

Upload: others

Post on 24-Feb-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Performance-Tuningvon Spring Boot / CloudIngo Düppe | Crowdcode

Performance & Microservice-ArchitekturWas ist anders zum Monolithen?

TransformationMicroservices

Service

Service

Service

Service

Service

Service

FK 1

Monolithen

FK 2 FK 3 … FK n

Komplexitätssteigerung

Java Virtual Machine

Anwendung

VM / Container

Datenbank

UI

Java EE Server

Monolithen

JVM

VM / Container

Datenbank

Anwendung

Java EE Server

JVM

VM / Container

Datenbank

Anwendung

Java EE Server

JVM

VM / Container

Anwendung

Java EE Server

UI

JVM

Anwendung

Java EE Server

VM / Container

Microservices

Spring Boot / Cloud Architektur

Edge Server (Zuul)

Monitor Dashboard(Hystrix & Turbine)

TracingDashboard(Zipkin)

AdminDashboard

LoggingDashboard

Service Discovery(Eureka)

Composite Services

Core Services

Product Stock Accounting

Order-Composite

Service Consumer(curl)

Load Balancer (Ribbon)

Circuit Breaker (Hystrix)

Load Balancer (Ribbon)

Vgl. Building microservices with Spring Cloud and Netflix OSS, part 1

Horizontale Skalierung

Service Discovery(Eureka)

Register

Renew

Cancel

GetRegistry

ApplicationClient

DiscoveryClient

Service Discovery(Eureka)

Service Discovery(Eureka)

ApplicationService

DiscoveryClient

Replicate

Replicate

ApplicationService

DiscoveryClient

ApplicationClient

DiscoveryClient

Get

Reg

istr

y

Get

Reg

istr

y

Zone 1 Zone 2 Zone 3

Make RemoteCall

Make Remote

Call

Get

Reg

istr

y

Make Rem

ote

Call

Vgl. http://techblog.netflix.com/2012/09/eureka.html

Latenzen

Servlet AP

I

Server Request Latenz Netzwerklatenz

Netzw

erk

Server

Vgl. Andreas Ever (2016) Netflix OSS and HATEOAS deployed on production

Latenzen

Se

rvlet A

PI

Server Request Latenz Netzwerklatenz

Ne

tzwe

rk

Se

rver

Vgl. Andreas Ever (2016) Netflix OSS and HATEOAS deployed on production

OptimierungsstrategienSuche nach dem Optimum...

Optimierungsstrategien

Request Response

Caching | Indexing Streaming

Parallelisierung

Suche nach dem OptimumAufwand

Änderung Koordination

Optimum

Verschiebt sichnach jedem Zyklus

Kopplungeng lose

Wann sollte die Performance überprüft werden?

„Performance sollte so früh wie möglich und kontinuierlich geprüft werden.“

Performance-Analyse in Continuous Integration integrieren

Kontinuierliche Überprüfung

Vgl. Menard, C. (2003): Continuous Performance – The Next Advance in Software Development, http://www.theserverside.com/articles/article.tss?l=ContinuousPerformance.

Allgemeines VorgehensmodelZiele definieren

Testteam aufbauen

Dedizierte Testumgebung

Tests automatisieren

Fehler beseitigen

Messpunkte definieren

Ein-Benutzer-Szenario optimieren

Mehr-Benutzer-Szenario optimieren

Konfiguration optimieren

Vgl. Cömert et al. (2004): Performancemangement von Enterprise-Java-Anwendungen, in Objektspektrum, 1/2004, S. 32

“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.”

Donald Knuth (1974)

Also nicht raten, messen!

Analysemethoden

§ Profiling§ Monitoring§ Benchmarking

Optimierung

§ Strategie§ Nur Stellen optimieren, wo die Performance signifikant gesteigert wird.§ Ansonsten die Optimierung verwerfen.

§ Vorgehen1. Identifizieren der 3 größten Schwachstellen2. Die am einfachsten und schnellsten zu behebende Schwachstelle

überarbeiten3. Überprüfung der signifikanten Performance-Steigerung4. Wieder mit 1. beginnen.

Strategie bei der Optimierung

Regeln§ Nur dann optimieren, wenn es nötig ist!§ Niemals ins Blaue hinein optimieren!§ Eine Optimierung ist kein Design-Pattern!§ Niemals mehrere Stellen auf einmal optimieren!§ Nur signifikante Optimierungen beibehalten!

Vorgehen bei einer Microservice-Architektur§ Langsame Services

durch Monitoring beim Lasttest erkennen

§ Potenzielle Servicesmit Engpässen identifizieren und isoliert analysieren.

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vorgehensmodel

LasttestWie verhält sich das System unter realistischer Last?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Lasttest

Realistische Lasttests sind eine Herausforderungen:§ Wie simuliert man die zu erwartende Last?§ Wie verhalten sich die zukünftigen Nutzer auf dem System?§ Sind die Logs der Vergangenheit auf die Zukunft übertragbar?§ Es geht nicht darum, dass System kaputt zu testen!

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Werkzeuge für LasttestsLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Open Source

Cloud-Basiert

Kommerzielle

Vgl. Lani Carrol (2015): https://anturis.com/blog/top-load-testing-tools/

Lasttest mit JMeter oder Gatling

§ Entwicklung eines Lasttests mit JMeter oder Gatling§ Aufzeichnung von Click-Pfaden § Manuelle Nachbearbeitung

§ Alternativ: Verbindung von JMeter oder Gatlingmit Swagger-UI bzw. der REST-Dokumentation

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Ansonsten...Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Ansonsten...Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

GatlingRealtime Monitoring

Vgl. http://gatling.io/docs/current/realtime_monitoring/

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

GatlingRealtime Monitoring§ Graphite > InfluxDB > Grafana

Vgl. http://gatling.io/docs/current/realtime_monitoring/

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Monitoring & TracingWie verhält sich das System unter realistischer Last

Monitoring & Tracing

§ Request-PerspektiveWo wird die Zeit eines Requests verbraucht?

§ Service-PerspektiveWie hoch ist die Last einzelner Services?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Tracing mit ZipKin

§ Request-Perspektive

§ OpenTracing.io§ Zipkin.io und Spring Cloud Sleuth§ Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

Vgl. Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - https://research.google.com/pubs/pub36356.html

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Zipkin | Spring SleuthLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Siehe http://zipkin.io/

Zipkin | Architektur

Siehe http://zipkin.io/pages/architecture.html

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Zipkin | SequenzdiagrammLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Siehe http://zipkin.io/pages/architecture.html

Monitoring mit Hystrix

§ Service-Perspektive: Hystrix Dashboard

Vgl. Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - https://research.google.com/pubs/pub36356.html

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

MonitoringCircuit Breaker - Dashboard

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. Andreas Ever (2016) Netflix OSS and HATEOAS deployed on production

MonitoringCircuit Breaker - Dashboard

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Analyse aus der Vogelperspektive

§ Gibt es offensichtliche Engpässe?§ Gibt es Auffälligkeiten in den Metriken?§ Passen die Anzahl der Requests zu den Use Cases?

§ Was ist die Ursache§ Verarbeitung im Service zu langsam?oder§ Zu viele (unnötige) Requests an den Service?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Isolierter Lasttest

§ In einem isolierten Lasttestpotenzielle Service mit Profiling Werkzeugen im Detail analysieren

§ Zum Beispiel mit

§ JMeter > Service > WireMock (http://wiremock.org/)

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Siehe http://wiremock.org

Meine WerkzeugkisteLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Memory Analyzer (MAT)

Profiling im Docker-Container

§ JProfiler-Agent im Container

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

RUNwget http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_agent_linux-x86_10_0.tar.gz\&&tar -xvf jprofiler_agent_linux-x86_10_0.tar.gz-C/

...

EXPOSE8849...

ENTRYPOINT["java","-agentpath:/jprofiler10/bin/linux-x64/libjprofilerti.so=port=8849,nowait","-Djava.security.egd=file:/dev/./urandom","-Xmx128M","-jar","demo-application.jar"]

JProfiler TelemetrieLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Analyse der Telemetriken

Suche nach Hinweisen, in welche Richtung die weitere Analyse geht:

§ Wie sieht der GC-Log aus? § Wie sieht der Speicherbedarf aus?§ Wie sieht die CPU Nutzung aus?§ Wie sehen die Threads aus?§ Gibt es Auffälligkeiten bei den SQL/Datenbank-Abfragen?§ Gibt es Auffälligkeiten bei den IO-Operationen?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Memory Profiling

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Konfiguration des GC-Algorithmus

Vgl. https://mechanical-sympathy.blogspot.de/2013/07/java-garbage-collection-distilled.html

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Wahl der GC-Strategie§ Durchsatz

§ Verfügbarkeit

§ Anwendungszeit§ GC-Koordination§ GC-Durchführung (Stop-The-World)

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Analyse des GC

§ Parameter

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

java -Xloggc:gc.log-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintTenuringDistribution-jar anwendung.jar

Overflow-Pattern vermeidenLasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

Speicher§ Anatomie eines Java-Objekts

§ 32 bit

§ 64 bit

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. http://www.ibm.com/developerworks/java/library/j-codetoheap/

Speicherkonfiguration§ Was ist, wenn der Service weniger als 4 GB Heap nutzt?

§ Compressed Ordinary Object Pointers (OOPS)-XX:+UseCompressedOops

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Memory Profiling§ Wie viel Speicher braucht Spring Boot?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. Dave Syer - https://spring.io/blog/2015/12/10/spring-boot-memory-performance

CPU-ProfilingIn welchen Modulen wird wieviel Zeit verbracht?

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Thread-Profiling

§ Zum Beispiel wie§ Log4j synchronize Blockoder§ CommonDB synchronize Blockà Tomcat JDBC Pool wesentlich besser

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Database-ProfilingDie Datenbank ist immer Schuld...

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Nach Stolpersteinenbei Spring Data JPA suchenBeispiel

à 3 SQL-Statements um einen Datensatz zu löschen

à 2 SQL-Statements um einen Datensatz zu löschen

à1 SQL-Statement um einen Datensatz zu löschen

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

EmployeeRepository extends JpaRepository {}

@ManyToOne(fetch=LAZY)PrivateCustomercustomer;

idversionnameaddressphoneemail

Customer

userIdEmployee

1

* employees

customer

int deleteByCustomerIdAndUserId(...)//ansonstenDefault-Einstellung

@Query(“DELETEFROMEmployee e WHEREe.customerId =:customerId ANDe.userId =:userId“)int deleteByCustomerIdAndUserId(...)

IO-Profiling

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

IO-Profiling

§ Umstellung auf Web-Socket§ JSON vs. XML-Marshalling§ Unterschiede zwischen Tomcat / Jetty / Undertow

§ Tomcat§ Neuer NIO-Connector org.apache.coyote.http11.Http11NioProtocol§ Von 500req/sec à 950 req/sec*

Lasttest Skripten

Tracing & Monitoren

Analyse Engpässe

Isolierter Lasttest

Telemetriken analysieren

Mem

ory

CP

U

Threads

Database

IO

Multi Services

Single Service

Vgl. https://de.slideshare.net/SpringCentral/spring-one2gx-juliendubois-30225094

Fail-Over-TestingWie verhält sich das System, wenn einzelne Teile scheitern?

Fail-Over-Tests

§ Jede Komponente im System kann ausfallen

§ Anwendung§ Netzwerk§ Filesystem§ Datenbank§ Services§ u.s.w.

... aber was ist mit den Daten, wenn sie wieder anläuft?

Siehe https://github.com/Netflix/SimianArmy

MicrobenchmarkingWelche Implementierungsalternative ist die bessere?

“Without exception every microbenchmarkI’ve seen has had serious flaws”

Dr. Cliff Click

Vgl. http://www.azulsystems.com/presentations/art-of-java-benchmarking

Java Microbenchmark Harness (JMH)

§ OpenJDK-Projekt: http://openjdk.java.net/projects/code-tools/jmh§ „Java harness for building, running, and analyzing

nano/micro/milli/macro benchmarks written in Java and otherlanguages targeting the JVM“

§ De-facto-Standard for writing benchmarks on JVM§ JEP 230: Microbenchmark Suite (Status: Candidate)

FazitPerformance-Tuning ist nicht kompliziert, man muss es nur tun!

Danke

Beispielprojekthttps://github.com/crowdcode-de/spring-cloud-performance-tuning

[email protected]@crowdcode

P.S. Wir suchen Verstärkung ([email protected])