Slide 1

Slide 1 text

Last- und Performancetests
 in der Cloud?! Sebastian Cohnen – @tisba – code.talks 2016

Slide 2

Slide 2 text

EHLO codetalks.de • 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 rps 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 rps mit p99 50ms"
 
 und
 
 "10 Server schaffen 2500 rps 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

Slide 9

Slide 9 text

Wenn dein System langsam für
 einen einzelnen Benutzer ist.

Slide 10

Slide 10 text

Woran erkenne ich, dass ich ein Skalierungs-Problem habe? http://www.slideshare.net/jboner/scalability-availability-stability-patterns/15-How_do_I_know_if

Slide 11

Slide 11 text

Wenn dein System schnell für einzelne Benutzer ist, aber langsam unter Last. https://www.flickr.com/photos/jamespaullong/with/714577655/

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Performance Testing

Slide 14

Slide 14 text

–Wikipedia “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.” https://en.wikipedia.org/wiki/Software_performance_testing

Slide 15

Slide 15 text

Performance Tests • System anregen mit einer definierten Last • Verhalten beobachten • Eigenschaften verifizieren • Verhalten verstehen

Slide 16

Slide 16 text

Performance Tests • Sammlung nicht-funktionaler Testmethoden • Nicht ganz trennscharf zu definieren • Unterschiedliche Ziele und Perspektiven Load Testing Stress Testing Spike Testing Soak Testing Endurance Testing Resilience Testing Configuration Testing Scalability Testing

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Performance-Tests in der Cloud …finally!

Slide 20

Slide 20 text

Ja und warum?

Slide 21

Slide 21 text

Die Cloud™ skaliert
 doch für uns! #

Slide 22

Slide 22 text

Ressourcen skalieren
 ≠ Anwendungen skalieren

Slide 23

Slide 23 text

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

Slide 24

Slide 24 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 25

Slide 25 text

Komplexe Systeme $

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

–Physik “Komplexe Systeme sind Systeme mit hoher Wechselwirkung.”

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Wie?!

Slide 31

Slide 31 text

Performance-Tests (auch) in der Cloud!

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Stress Testing Vorgehen • Qualitätskriterien festlegen
 (OK / KO) • Last stufenweise steigern

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Scalability Testing capacity 0 275 550 825 1100 resources 5 10 15 20 25 30

Slide 38

Slide 38 text

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

Slide 39

Slide 39 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 40

Slide 40 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 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Availability & Resilience
 Testing

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Ist das anders
 im Vergleich zu früher?

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

Herausforderung: Reproduzierbarkeit

Slide 49

Slide 49 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 50

Slide 50 text

Fazit

Slide 51

Slide 51 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 52

Slide 52 text

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

Slide 53

Slide 53 text

Sebastian Cohnen
 sebastian@stormforger.com