Upgrade to Pro — share decks privately, control downloads, hide ads and more …

code.talks 2016: Last- und Performancetests in der Cloud [DE]

code.talks 2016: Last- und Performancetests in der Cloud [DE]

Auf der code.talks 2016 in Hamburg habe ich einen Vortrag zum Thema Performance Tests in der Cloud im Track "Big Data & Skalierung" gehalten.

Abstract:
Die Cloud ist unendlich und skalierbar. Punkt. Warum ist es dann noch wichtig, die Performance und Skalierbarkeit von Cloud-basierten Systemen zu testen? Skaliert nicht mein Anbieter mein System, solange ich mir das leisten kann? Ja, aber … Cloud-Anbieter skalieren in erster Linie Ressourcen. Sie sorgen nicht automatisch dafür, dass Anwendungen schnell, stabil und – viel wichtiger – skalierbar sind. Performancetests sind ein wichtiges Instrument, um ein System und dessen Laufzeitumgebung zu verstehen.

https://stormforger.com

19f1245e673133f1f5b36a1a658f8c1d?s=128

Sebastian Cohnen

September 29, 2016
Tweet

More Decks by Sebastian Cohnen

Other Decks in Technology

Transcript

  1. Last- und Performancetests
 in der Cloud?! Sebastian Cohnen – @tisba

    – code.talks 2016
  2. EHLO codetalks.de • Sebastian Cohnen (@tisba) • 7+ Jahre Beratung

    und Entwicklung • Fokus auf Performance und Architektur • Gründer & CTO StormForger.com
  3. Performance

  4. Performance • Fähigkeit eines Systems eine Aufgabe
 in einer definierten

    Dimension zu erledigen • = Effizienz eines Systems • "1 Server schafft 250 rps mit p99 50ms"
  5. Skalierbarkeit

  6. ≠ Performance Skalierbarkeit

  7. 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"
  8. Woran erkenne ich, dass ich ein Performance-Problem habe? http://www.slideshare.net/jboner/scalability-availability-stability-patterns/15-How_do_I_know_if

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

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

  11. Wenn dein System schnell für einzelne Benutzer ist, aber langsam

    unter Last. https://www.flickr.com/photos/jamespaullong/with/714577655/
  12. 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…"
  13. Performance Testing

  14. –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
  15. Performance Tests • System anregen mit einer definierten Last •

    Verhalten beobachten • Eigenschaften verifizieren • Verhalten verstehen
  16. 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
  17. None
  18. ☁Die Cloud☁ • IaaS, PaaS, … • APIs und Automatisierung

    • on-demand • kosteneffektiv • skalierbar
  19. Performance-Tests in der Cloud …finally!

  20. Ja und warum?

  21. Die Cloud™ skaliert
 doch für uns! #

  22. Ressourcen skalieren
 ≠ Anwendungen skalieren

  23. Ressourcen vs Anwendungen skalieren Elastic Load Balancing Amazon EC2 MySQL

    DB instance Auto Scaling group
  24. Und managed Services? • Provider kümmert sich um alles! •

    AWS Lambda, GC Functions, … • AWS DynamoDB, GC Datastore, … • AWS Kinesis/SQS, GC Pub/Sub, …
  25. Komplexe Systeme $

  26. None
  27. –Physik “Komplexe Systeme sind Systeme mit hoher Wechselwirkung.”

  28. Komplexität • Komplexität ist nicht verschwunden • {S,P,I}aaS & Co

    verstecken sie (teilweise) • Auswirkung auf Performance ist nicht trivial
  29. Verständnis aufbauen • Eigene Anwendung • System & Softwarearchitektur •

    Cloud/Laufzeit-Umgebung • Verwendete Dienste und deren Verhalten
  30. Wie?!

  31. Performance-Tests (auch) in der Cloud!

  32. Load Testing • Tests mit normaler, zu erwartender Last •

    Ermittlung von Latenzen, Durchsatz, Fehlerraten, … • Verifikation nicht-funktionaler Anforderungen (SLA)
  33. Stress Testing • Tests mit gesteigerter bis extremer Last •

    Systemverhalten unter (Über)last verstehen • Grenzen und Kapazitäten ermitteln
  34. Stress Testing Vorgehen • Qualitätskriterien festlegen
 (OK / KO) •

    Last stufenweise steigern
  35. Stress Testing Vorgehen • Systemverhalten überwachen • Bottlenecks identifizieren •

    Kapazität pro Ressource ermitteln
  36. Scalability Testing • Wie effektiv werden weitere Ressourcen in Kapazität

    umgesetzt? • Grundlage für Kapazitätsplanung und Kostenabschätzung
  37. Scalability Testing capacity 0 275 550 825 1100 resources 5

    10 15 20 25 30
  38. Spike Testing • Wie verhält sich das System bei (extremen)

    Lastspitzen? • Reagieren wir schnell genug? • Anlässe: Marketing %, Reddit, Hacker News, …, TV Shows
  39. Soak Testing • Wie verhält sich das System unter Last

    über einen langen Zeitraum? • (sehr) langer Load Test • Gibt es Langzeiteffekte? Memory Leaks?
  40. Configuration Testing • Wie ändert sich das Verhalten, wenn sich

    die Konfiguration ändert? • Serie von Testdurchführungen • Auswirkung der Umgebung auf das eigene System untersuchen
  41. …in der Cloud • Instanztypen • Auto Scaling Einstellung •

    Throughput Provisioning • Optimale Nutzung von Diensten?
  42. …und überhaupt… • Hypervisor • Betriebssystem • Web & Application

    Server • Softwarekonfiguration • Softwareabhängigkeiten
  43. Availability & Resilience
 Testing

  44. Availability & Resilience Testing • (Zero-Downtime) Deployments unter Last •

    Änderungen an Infrastruktur • Fehler Szenarien • Failover Testing • => Chaos Engineering
  45. Ist das anders
 im Vergleich zu früher?

  46. Jain… • Notwendigkeit und Methoden unverändert • ABER, neue Möglichkeiten

    der Durchführung durch die Cloud
  47. Testumgebungen in der Cloud • einfach(ere), Bereitstellung von Testumgebungen •

    Infrastruktur, Services, Server, Code, … • viel kostengünstiger und flexibler
  48. Herausforderung: Reproduzierbarkeit

  49. 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?
  50. Fazit

  51. Fazit • Ressourcen ≠ Anwendungen skalieren • Komplexität ist immer

    noch da • Verständnis ist enorm wichtig • Benutzt die Cloud, um das Testen einfacher zu machen!
  52. Fazit • Design • Implementierung • Messen und Validieren •

    Repeat!
  53. Sebastian Cohnen
 sebastian@stormforger.com