Slide 1

Slide 1 text

Sebastian Cohnen, StormForger GmbH Last- und Performancetests in der Cloud?!

Slide 2

Slide 2 text

ELLO! • Sebastian Cohnen (@tisba) • 7+ Jahre Beratung und Entwicklung • Fokus auf Performance und Architektur • Gründer & CTO StormForger.com

Slide 3

Slide 3 text

Performance

Slide 4

Slide 4 text

Performance • Fähigkeit eines Systems eine Aufgabe in einer definierten Dimension zu erledigen • Effizienz eines Systems
 • "1 Server schafft 250 tps mit p99 50ms"

Slide 5

Slide 5 text

Skalierbarkeit

Slide 6

Slide 6 text

≠ Performance Skalierbarkeit

Slide 7

Slide 7 text

Skalierbarkeit • Effektivität, mit der die Kapazität durch Ressourcen gesteigert werden kann
 • "1 Server schafft 250 tps mit p99 50ms"
 und
 "10 Server schaffen 2500 tps mit p99 50ms"

Slide 8

Slide 8 text

Woran erkenne ich, dass ich ein Performance-Problem habe? http://www.slideshare.net/jboner/scalability-availability-stability-patterns/15-How_do_I_know_if Wenn dein System langsam für einen einzelnen Benutzer ist.

Slide 9

Slide 9 text

Woran erkenne ich, dass ich ein Skalierungs-Problem habe? Wenn dein System schnell für einzelne Benutzer ist, aber langsam unter Last.

Slide 10

Slide 10 text

Performance ⚡ Skalierbarkeit "Scaling usually hurts efficiency…" 
 "…Efficiency projects rarely give you enough improvement to have a big effect on scaling." Robert Johnson – https://www.facebook.com/note.php?note_id=409881258919 – Robert Johnson

Slide 11

Slide 11 text

Performance Testing

Slide 12

Slide 12 text

“In software engineering, performance testing is in general, a testing practice performed to determine how a system performs in terms of responsiveness and stability under a particular workload." – Wikipedia https://en.wikipedia.org/wiki/Software_performance_testing

Slide 13

Slide 13 text

Performance Tests • Sammlung nicht-funktionaler Testmethoden • System anregen mit einer definierten Last • Verhalten beobachten • Eigenschaften verifizieren • Verhalten verstehen

Slide 14

Slide 14 text

Performance Tests Load Testing, Stress Testing, Spike Testing, Soak Testing, Endurance Testing, Resilience Testing, Configuration Testing Scalability Testing, … • Nicht ganz trennscharf zu definieren • Unterschiedliche Ziele und Perspektiven

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Die Cloud • IaaS, PaaS, … • APIs und Automatisierung • on-demand • kosteneffektiv • skalierbar

Slide 17

Slide 17 text

Performance-Tests in der Cloud

Slide 18

Slide 18 text

Ja und warum?

Slide 19

Slide 19 text

Die Cloud™ skaliert doch für uns! "

Slide 20

Slide 20 text

Ressourcen skalieren
 ≠ Anwendungen skalieren

Slide 21

Slide 21 text

Ressourcen vs Anwendungen skalieren Elastic Load Balancing Amazon EC2 MySQL DB instance Auto Scaling group

Slide 22

Slide 22 text

Und managed Services? • Provider kümmert sich um alles! • AWS Lambda, GC Functions, … • AWS DynamoDB, GC Datastore, … • AWS Kinesis/SQS, GC Pub/Sub, …

Slide 23

Slide 23 text

"Komplexe Systeme sind Systeme mit hoher Wechselwirkung." – sagen Physiker

Slide 24

Slide 24 text

Komplexität • Komplexität ist nicht verschwunden • {S,P,I}aaS & Co verstecken sie teilweise • Auswirkung auf Performance ist nicht-trivial

Slide 25

Slide 25 text

Verständnis aufbauen • Eigene Anwendung • System & Softwarearchitektur • Cloud/Laufzeit-Umgebung • Verwendete Dienste und deren Verhalten

Slide 26

Slide 26 text

Performance-Tests (auch) in der Cloud!

Slide 27

Slide 27 text

Load Testing • Tests mit normaler, zu erwartender Last • Ermittlung von Latenzen, Durchsatz, Fehlerraten, … • Verifikation nicht-funktionaler Anforderungen (SLA)

Slide 28

Slide 28 text

Stress Testing • Tests mit gesteigerter bis extremer Last • Systemverhalten unter (Über)last verstehen • Grenzen und Kapazitäten ermitteln

Slide 29

Slide 29 text

Stress Testing Vorgehen • Qualitätskriterien festlegen (OK / KO) • Last stufenweise steigern 0 20 40 60 80 100 120 140 160 50 100 150 200 250 300 350 400 450 500 0 20 40 60 80 100 120 Latency (ms) Request Rate (1/s) time (s)

Slide 30

Slide 30 text

Stress Testing Vorgehen • Systemverhalten überwachen • Bottlenecks identifizieren • Kapazität pro Ressource ermitteln

Slide 31

Slide 31 text

Scalability Testing • Wie effektiv werden weitere Ressourcen in Kapazität umgesetzt? • Grundlage für Kapazitätsplanung und Kostenabschätzung

Slide 32

Slide 32 text

Scalability Testing capacity 0 175 350 525 700 resources 5 10 15 20 25

Slide 33

Slide 33 text

Spike Testing • Wie verhält sich das System, bei (extremen) Lastspitzen? • Reagieren wir schnell genug? • Anlässe: Marketing #, Reddit, Hacker News, …

Slide 34

Slide 34 text

Soak Testing • Wie verhält sich das System unter Last über einen langen Zeitraum? • (sehr) langer Load Test • Gibt es Langzeiteffekte? Memory Leaks?

Slide 35

Slide 35 text

Configuration Testing

Slide 36

Slide 36 text

Configuration Testing • Wie ändert sich das Verhalten, wenn sich die Konfiguration ändert? • Serie von Testdurchführungen • Auswirkung der Umgebung auf das eigene System untersuchen

Slide 37

Slide 37 text

…in der Cloud • Instanztypen • Auto Scaling Einstellung • Throughput Provisioning • Optimale Nutzung von Diensten?

Slide 38

Slide 38 text

…und überhaupt… • Hypervisor • Betriebssystem • Web & Application Server • Softwarekonfiguration • Softwareabhängigkeiten

Slide 39

Slide 39 text

Availability & Resilience Testing

Slide 40

Slide 40 text

Availability & Resilience Testing • (Zero-Downtime) Deployments unter Last • Änderungen an Infrastruktur • Fehler Szenarien • Failover Testing • => Chaos Engineering

Slide 41

Slide 41 text

Ist das anders als früher?

Slide 42

Slide 42 text

Jain… • Notwendigkeit und Methoden unverändert • ABER, neue Möglichkeiten der Durchführung durch die Cloud

Slide 43

Slide 43 text

Testumgebungen in der Cloud • einfach(ere), Bereitstellung von Testumgebungen • Infrastruktur, Services, Server, Code, … • viel kostengünstiger und flexibler

Slide 44

Slide 44 text

Herausforderung: Reproduzierbarkeit • Testdaten und "State" im Allgemeinen sind auch in der Cloud ein komplexes Problem • Wie versetzt man Datenbanken, Caches und Dateisysteme in einen definierten Zustand? • Verwaltung von Testdaten? • Automatisierung des ganzen?

Slide 45

Slide 45 text

Fazit

Slide 46

Slide 46 text

Fazit • Ressourcen ≠ Anwendungen skalieren • Komplexität ist immer noch da • Verständnis ist enorm wichtig • Benutzt die Cloud, um das Testen einfacher zu machen!

Slide 47

Slide 47 text

• Design • Implementierung • Messen und Validieren • Repeat! Fazit

Slide 48

Slide 48 text

Danke! Fragen? Sebastian Cohnen (@tisba) https://stormforger.com