OpenResty FAQ | Netzwerkstruktur für Tests, SSL-bezogene Funktionen, DSL, `ab`-Tool

API7.ai

December 1, 2022

OpenResty (NGINX + Lua)

Die OpenResty-Artikelserie wurde bisher aktualisiert, und wir haben den Teil über das Testen abgeschlossen. Herzlichen Glückwunsch, dass Sie nicht zurückgeblieben sind, aktiv gelernt und praktiziert haben und begeistert Ihre Gedanken hinterlassen haben.

Viele der in den Kommentaren gestellten Fragen sind wertvoll, und einige der typischeren und interessanteren wurden speziell für das heutige Q&A extrahiert.

Schauen wir uns heute diese fünf Fragen an.

Frage 1: Wie baut man die Netzwerkstruktur für Tests auf?

F: Sollte der Client, der wrk ausführt, auf einer Maschine im externen Netz oder auf einer Maschine im selben LAN wie der Server platziert werden? Welche dieser beiden Optionen ist für Leistungstests sinnvoller?

A: Für das Testen von webbezogenen Diensten ist die Wahl des richtigen Testtools nur ein guter Anfang, und wie man die Netzwerkstruktur für Tests aufbaut, ist ebenfalls ein wesentlicher Teil der Nachbereitung.

Im Allgemeinen möchten wir die Leistungsgrenzen des Dienstes allein testen, ohne alle Netzwerkstörungen. Zu diesem Zweck können wir zwei Möglichkeiten haben, das Netzwerk für den Stresstest aufzubauen.

Die erste Methode besteht darin, wrk und die Serveranwendungen auf derselben leistungsstarken Maschine zu installieren. Zum Beispiel können wir acht Worker in NGINX aktivieren und die verbleibenden CPU-Ressourcen auf wrk aufteilen, sodass es nur lokale Netzwerkkommunikation gibt, was den Einfluss des Netzwerks minimiert.

Die zweite Methode besteht darin, ein LAN mit einem dedizierten Router aufzubauen und die Maschine, auf der wrk läuft, mit der Maschine zu verbinden, auf der der Server läuft.

Es wird nicht empfohlen, direkt in einem bestehenden Netzwerk zu testen, da die meisten Netzwerke Switches und Firewalls haben, die die Stresstests bei großen Datenmengen einschränken und zu ungenauen Testergebnissen führen können.

Darüber hinaus möchte ich noch ein paar Worte zu Leistungstesttools sagen. Erstens können Leistungstesttools Coordinated Omission-Probleme haben, auf die Sie besonders achten müssen, wenn Sie die Latenzdaten des Tools analysieren.

Coordinated Omission bedeutet, dass es beim Durchführen von Leistungstests nicht ausreicht, die Zeit zwischen dem Senden und Empfangen einer Antwort zu zählen, was nur die Dienstzeit ist, sodass die Statistiken viele potenzielle Probleme übersehen. Daher müssen wir auch die Wartezeit der Testanfrage einbeziehen, was insgesamt die Antwortzeit ist, die den Benutzern wichtig ist. Natürlich, wenn Ihr Serverprogramm blockieren könnte, müssen Sie dieses Problem berücksichtigen. Andernfalls können Sie es ignorieren.

Frage 2: Kann test::nginx SSL-bezogene Funktionen testen?

F: Ist es unmöglich, SSL-bezogene Funktionen mit test::nginx zu testen?

A: Das ist nicht der Fall. test::nginx kann SSL-bezogene Funktionen testen; Sie können sich auf ssl.t beziehen. Diese Testfall-Datei testet den gesamten Prozess des SSL-Zertifikats. Zuerst, wie Sie sehen können, verwendet der Testfall Lua-Code, um die öffentlichen und privaten Schlüssel des lokalen Zertifikats zu lesen; dann wird das Zertifikat über die HTTP-API eingerichtet; schließlich wird cosocket verwendet, um den SSL-Handshake und den Zugriff zu testen, um zu überprüfen, ob das Zertifikat gültig ist.

Tatsächlich können nicht nur SSL, sondern auch die in OpenResty enthaltenen Funktionen durch die Verwendung von test::nginx überschrieben werden.

Wenn Sie sich nicht sicher sind, ob eine bestimmte Funktion mit test::nginx implementiert werden kann, können Sie zuerst die Testfälle von lua-nginx-module und anderen OpenResty-Open-Source-Projekten durchsuchen, und Sie werden normalerweise entsprechende Beispiele finden. Schließlich ist test::nginx sehr spielbar und variabel, und einige unerwartete Kombinationen und Tricks warten darauf, entdeckt zu werden.

Frage 3: Was genau ist DSL?

F: Was genau sind DSL und test::nginx?

A: DSL steht für Domain Specific Language. Der Zweck von DSL unterscheidet sich von den gängigen Entwicklungssprachen. Es geht nicht darum, die Anforderungen eines allgemeinen Bereichs zu lösen, sondern die eines bestimmten Bereichs. Die bekannteste DSL ist SQL, die Structured Query Language, die im Datenbankbereich verwendet wird.

Was test::nginx betrifft, ist es eine DSL, die geschaffen wurde, um die Testanforderungen von NGINX und OpenResty zu erfüllen. Tatsächlich haben die Autoren von OpenResty viele DSL-Ideen erfunden und viele neue Versuche und Lösungen für die OpenResty-Community gebracht. Wie jedoch im vorherigen Artikel erwähnt, ist DSL ein zweischneidiges Schwert, und das Hauptkriterium zur Bewertung des Wertes von DSL ist, ob es den Endbenutzern eine Produktivitätssteigerung bringen kann.

Frage 4: test::nginx Installationsproblem

F: Muss ich nach dem Ausführen von git clone den folgenden Befehl ausführen, um test::nginx zu installieren?

cd test-nginx
perl Makefile.PL
make
sudo make install

A: Tatsächlich ist das nicht der Fall. Hier können Sie sich auf einige Open-Source-Projekte beziehen.

Schritt 1: Installieren Sie es über den Paketmanager

sudo cpanm --notest Test::Nginx >build.log 2>&1 || (cat build.log && exit 1)

Schritt 2: git clone das neueste test::nginx

git clone https://github.com/openresty/test-nginx.git test-nginx

Schritt 3: Fügen Sie das test-nginx-Verzeichnis hinzu, wenn Sie den prove-Befehl verwenden

prove -Itest-nginx/lib -r t

Wie ich bereits erwähnt habe, sind die besten Anleitungen für die Installation von OpenResty und den umliegenden Projekten in CI zu finden, nicht in der Dokumentation. Dies mag bei anderen Projekten anders sein, hauptsächlich weil OpenResty seine eigenen Forks oder spezifische Versionen einiger der umliegenden Projekte pflegt und weil OpenResty auch stark von CI abhängig ist. Daher sollten Sie OpenResty auf die gleiche Weise verwenden und testen, wie es in CI gebaut wird, um Konsistenz mit der offiziellen Version zu gewährleisten.

Frage 5: Ist das ab-Testtool gut oder nicht?

F: Wie kommt es, dass Yichun Zhang in Google Groups häufig ab als das beste Testtool erwähnt hat?

A: Wie ich im Artikel erwähnt habe, ist ab allein in Bezug auf die Tool-Funktionen kein gutes Leistungstesttool, da es nicht genug Anfragedruck erzeugen kann. Allerdings ist die Leistung des Serverprogramms jetzt sehr stark. Wir verwenden ab anstelle von wrk in test::nginx, weil im TEST_NGINX_BENCHMARK-Modus test::nginx entweder ab oder weighttp verwendet, abhängig von der HTTP-Protokollversion, als Tool für Leistungstests.

Darüber hinaus hoffe ich, dass Sie beachten, dass sich die Internettechnologie sehr schnell ändert und jeder von uns sein Wissen und seine Fähigkeiten rechtzeitig aktualisieren muss. Zum Beispiel ist meiner Meinung nach diese Wahl von test::nginx jetzt aktualisierungsbedürftig, und Yichun Zhang kannte damals möglicherweise die Existenz von wrk nicht. Natürlich könnte es in Zukunft bessere Leistungstesttools als wrk geben, und wir sollten natürlich eine positive und offene Einstellung haben, um zu lernen und zu wählen.

Heute beantworte ich hauptsächlich die oben genannten Fragen. Ich hoffe, dass ich durch Kommunikation und Q&A helfen kann, das Gelernte in das Erreichte umzuwandeln. Sie sind auch herzlich eingeladen, diesen Artikel weiterzuleiten, damit wir gemeinsam kommunizieren und Fortschritte erzielen können.