performance-tuning von spring boot / cloud
TRANSCRIPT
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
Suche nach dem OptimumAufwand
Änderung Koordination
Optimum
Verschiebt sichnach jedem Zyklus
Kopplungeng lose
„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)
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 & 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-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?
“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)
Danke
Beispielprojekthttps://github.com/crowdcode-de/spring-cloud-performance-tuning
[email protected]@crowdcode
P.S. Wir suchen Verstärkung ([email protected])