Container-basierte Lasttreiber

Docker für Lasttests mit LoadRunner & Performance Center

Docker für Lasttests mit LoadRunner & Performance Center von Matthias Scholze | QMETHODS | November 2017
 

Docker erobert die IT-Welt!

Der Einsatz von Docker ist in aller Munde. Selbst in großen Unternehmen, wo der Fortschritt meist mit einer gewissen Verzögerung Einzug hält, ist Docker bereits im Einsatz oder zumindest in der Planung.
Der Einsatz der Docker-Technologie erweitert auch die Möglichkeiten bei der Durchführung von Lasttests. Diese möchte ich in diesem Blog-Beitrag erläutern sowie die technische Umsetzung am Beispiel des Lasttest Werkzeuges LoadRunner bzw. Performance Center von MicroFocus (ehemals Hewlett Packard Enterprise) aufzeigen.
 

Lasttreiber bzw. Lasttest Generatoren

Lasttreiber bzw. Lasttest-Generatoren sind typische Anwendungskomponenten von Lasttest-Werkzeugen. Diese dienen der Ausführung von Skripten, welche Benutzer oder Anwendung-zu-Anwendung Interaktionen simulieren. Das abzubildende Lastverhalten wird durch die Parallelisierung der Skriptausführung erreicht.
In der Regel werden mehrere Lasttreiber eingesetzt. Ein Grund dafür ist, dass die Ressourcen Auslastung (CPU, I/O, RAM) auf den Lasttreibern durch die Lasterzeugung nicht die Lasttestergebnisse beeinflussen darf und deshalb die Ausführung auf mehrere Lasttreiber verteilt wird. Des Weiteren soll die Lasterzeugung ggf. von verschiedenen Lokationen aus im Netzwerk durchgeführt werden. Anbei ein paar typische Positionierungen von Lasttreibern im Netzwerk:
 
  • internes Netzwerk und ggf. verschiedene Netzwerksegmente  
  • netztechnisch angebundene Unternehmensstandorte  
  • Zugriff aus dem Internet (Cloud)  
 

Vorteile - agiler, schneller, höher , weiter!

Der Einsatz Container-basierter Lasttreiber erleichtert und erweitert die Möglichkeiten bei der Lasttest Durchführung. Im Folgenden habe ich einige aufgeführt:
 
  • Einfache Installation und 'Upgrades' der Lasttreiber Software
    Da es sich um vorpaketierte Docker Images handelt, besteht die Installation nur aus dem Herunterladen und Starten des Images. Für ein Upgrade wird der Docker Container einfach gelöscht und eine Installation mit der neuen Docker-Image Version (:latest) durchgeführt. Die Zeit für die Bereitstellung reduziert sich hierbei quasi auf die Dauer des Herunterladens des Container Images, da das Starten des Containers nur wenige Sekunden in Anspruch nimmt.  
  • Hochautomatisierte Bereitstellung von umfangreichen Lasttreibern
    Für die Umsetzung von umfangreichen Lasttests in der Fläche kommen Docker-typische Werkzeuge wie Kubernetes & Co. zum Einsatz, um eine hohe Anzahl von Lasttreibern an unterschiedlichen Lokationen bereitzustellen. Dies wird typischerweise für die Simulation von hohen Benutzeranzahlen bspw. für Online-Portale oder bei der Maschine-2-Maschine Interaktion im IoT-Bereich benötigt.  
  • Kontinuierliche Lasttest im Rahmen von DevOps
    Für die Umsetzung von kontinuierlichen Lasttests (Continuous Load Testing) im Rahmen der DevOps Aktivitäten kann die zeitlich begrenzte Verfügbarkeit von Lasttreibern mit den oben beschrieben Vorgehensweisen realisiert werden. So können nach Abschluss des Deployment Prozesses automatisiert Lasttreiber für die Lasttest Durchführung erzeugt und nach dem Lasttest wieder entfernt werden.  
  • Auslastung verfügbarer Rechner-Ressourcen als Lasttreiber
    Das Starten eines Docker Containers als Lasttreiber hat außer der Ressourcenauslastung durch die Docker Sandbox-Technologie keine Auswirkung auf andere Docker Container auf dem Host und kann nach einem Lasttest rückstandsfrei wieder von einem Docker Rechner entfernt werden. Dadurch lassen sich verfügbare Rechenleistungen in Form von Rechner Ressourcen besser auslasten.  
  • Verfügbarkeit und Skalierbarkeit von Lasttreibern in der Cloud
    Cloud-basierte Lasttest-Lösungen stellen ihre Lasttreiber generell automatisiert zur Laufzeit als Cloud-Instanzen zur Verfügung. Damit ermöglichen sie Lasttest-Szenarien mit extrem hohen parallelen Benutzern bzw. Interaktionen. Klassische On-Premise Lasttest Werkzeuge können mittels Docker und Cloud-Anbietern (AWS, GCP, OTC, Azure) diese Fähigkeiten nun recht einfach auch zur Verfügung stellen und nutzen.  
 

Installation - einfacher wird es nicht!

Vorgefertigte Docker Images für den LoadRunner Lasttreiber stehen via Docker-Hub online zur Verfügung. Eigene projektspezifische Docker Images sind auf Basis bestehender Docker Images leicht zu konfigurieren.
Mit folgendem Befehl wird ein LoadRunner Lasttreiber als Container gestartet. Wenn das Docker Image ('performancetesting/load_generator') lokal noch nicht vorhanden ist, wird automatisch die neuste Online-Version aus dem Docker-Hub heruntergeladen und gestartet.
 
docker run \--name loadrunner-loaddriver \ --detach \ --interactive \ --puplish 54345:54345 \ --net=host \ performancetesting/load_generator
Abbildung: Docker-Befehl zum Starten eines LoadRunner Lasttreibers
 
Zwei Docker Run-Parameter sind beim Start des Containers sehr wichtig. Mit dem Parameter '--net = host' wird der Container direkt mit der Netzwerkschnittstelle des Rechners und nicht über die Docker Bridge netztechnisch angebunden, um den Lasttest-typischen hohen Netzwerkdurchsatz sicherzustellen. Des Weiteren ist der Parameter '--interactive' zu verwenden, um eine hohe CPU-Auslastung durch den Container zu vermeiden.
Der freigegebene Port 54345 ist der Standard-Port des LoadRunner Lasttreibers. Wenn Du diesen 1:1 durchleitest, dann ist im LoadRunner Controller nur noch die IP oder der Rechnername anzugeben.
 

Einbindung in den LoadRunner Controller

Im LoadRunner Controller kann der Lasttreiber wie ein herkömmlicher Lasttreiber im Menü unter "Scenario" und dann "Load Generator" hinzugefügt und verbunden werden. Einzige Voraussetzung ist die netztechnische Erreichbarkeit, wo ggf. entsprechende Portfreischaltungen einzurichten sind.
 
Integration des Lasttreibers in LoadRunner
Abbildung: Integration des Lasttreibers in LoadRunner
 
Die Lasttreiber Container laufen als isolierte Prozesse auf den Docker Rechnern und verhalten sich aus Sicht des LoadRunner Controller genau wie ein direkt in Linux installierter Lasttreiber.
 

LoadRunner Protokolle unter Linux

Das LoadRunner Docker-Image läuft auf dem Betriebssystem Linux und kann aus diesem Grund nur alle unter Linux verfügbaren LoadRunner Protokolle unterstützen:
 
  • Oracle NCA  
  • Oracle - Web  
  • SAP - Web  
  • Siebel - Web  
  • Web - HTTP/HTML  
  • MQTT  
  • IMAP  
  • SMTP  
  • POP3  
  • ODBC  
  • Oracle - 2 Tier  
  • C Vuser  
  • DNS  
  • FTP  
  • LDAP  
  • Windows Socket  
  • JMETER  
 

Fazit

Die Möglichkeit Lastgeneratoren via Docker zu betreiben reduziert den Aufwand für die Bereitstellung von Lastgeneratoren. Des Weiteren eröffnet dies neue Möglichkeiten bei der Integration von Lasttests in den DevOps Prozess sowie bei der Lastgenerierung aus der Cloud.
Damit kann der LoadRunner als klassische On-Premise Lösung die Vorteile Cloud-basierter Lasttest-Lösungen ausgleichen.
Für die Nutzung aller vorhanden LoadRunner Protokolle wäre die Verfügbarkeit von Windows-basierte Docker-Containern für die LoadRunner Lastgeneratoren wünschenswert. Mit zunehmendem Einsatz von Docker unter Windows wird dies vermutlich nur eine Frage der Zeit sein.
 
The fastest way to deploy a Load Generator using Docker with LoadRunner
Docker Image für LoadRunner auf Docker Hub
Liste der unterstützen LoadRunner Protokolle für Linux-basierte Lasttreiber



Ihr Kommentar zum Blog-Beitrag

Nennen Sie uns bitte Ihren Namen und E-Mail-Adresse zur Verifikation. Die E-Mail Adresse wird nicht veröffentlicht!