Wie funktioniert der Leistungstest für AWS Lambda?

14

Die Kosten für AWS Lambda hängen von der Laufzeit einer Funktion und zum Teil vom Speicherbedarf ab. Funktionen, die schneller beendet werden und weniger Speicher beanspruchen, können eine Menge Geld sparen. Besonders wenn eine solche Funktion oft ausgeführt wird.

Wie kann eine Node.js Lambda-Funktion auf Geschwindigkeit und geringen Speicherbedarf abgestimmt werden, um Kosten zu sparen?

Gibt es andere Aspekte für Lambda, die sich vorteilhaft verbessern lassen?

Evgeny
quelle

Antworten:

6

Dawny33 Antwort ist gut, aber ich würde früher im Entwicklungsprozess beginnen.

Es ist von entscheidender Bedeutung, Ihre Cloud-Umgebung im Auge zu behalten, um sicherzustellen, dass sich Ihre Funktionen wie erwartet verhalten (einschließlich Ihrer "Produktions" -Funktionen, die möglicherweise auf einem anderen Datensatz ausgeführt werden), da sie möglicherweise Dinge aufdecken, die lokal oder mit denen sie nicht reproduziert werden können ein Testdatensatz.

Dennoch würde ich sagen, dass dieser Leistungstest, den Sie zu Optimierungszwecken durchführen, direkt vom Computer des Entwicklers aus gestartet werden sollte. Oder zumindest aus einer lokalen Umgebung, bevor Sie in die Cloud wechseln.

Der Grund, warum ich das sage, ist, dass AWS Lambdas zwar in vielen Punkten erstaunlich sind, die Tatsache, dass Sie keine vollständige Kontrolle über den Server haben, Ihre Instrumentierungsfähigkeiten jedoch einschränkt. Ich sage nicht, dass eine Instrumentierung ohne Server nicht möglich ist, aber versuchen Sie aus Spaß herauszufinden, wie viele CPU-Interrupts Sie haben (und wie viele durch Ihren Code verursacht werden ).

Ich rate also, und dies ist eigentlich nicht auf serverlose Server beschränkt, die Profilerstellung frühzeitig zu starten. Die NodeJS-Profilerstellung kann mit vielen verschiedenen Tools durchgeführt werden. NewRelic, Dynatrace und AppDynamic sind einige der Hauptakteure. Es gibt auch kleinere Player, von denen einige nur als NPM-Paket installiert werden müssen (wie Nodefly). Es ist auch möglich, einige NodeJS ohne zusätzliches Werkzeug auszuführen, da in der V8-Engine ein Profiler eingebaut ist. Mit dieser Dokumentation von NodeJS können Sie loslegen.

Welches Tool Sie auch auswählen, Sie möchten es lokal installieren und Profildaten erfassen. Dies kann bedeuten, dass Sie einen Agenten ausführen oder ein Paket in Ihre package.json einfügen. In den Anweisungen Ihres Werkzeugs erfahren Sie, wie Sie es installieren. Ein guter Profiler zeigt an, wie viel Arbeitsspeicher und CPU Sie verwenden. Bessere Tools geben Aufschluss darüber, wie viele Ferngespräche geführt wurden und wie lange sie gedauert haben.

Verwenden Sie die Profildaten, die Sie mit dem Tool erhalten, um Engpässe zu identifizieren und zu beheben. Sie können beliebig viele Profile erstellen. Einige Leute (verrückt?) Werden sich die Systemaufrufe ihrer wichtigsten Funktion ansehen. Möglicherweise müssen Sie so etwas tun, wenn Sie Nanosekunden Ihrer Funktion rasieren möchten (aber dann ist AWS Lambda vielleicht nicht die beste Wahl für den Anfang).

Es ist an dieser Stelle auch erwähnenswert, dass ich nichts spezielles zu AWS Lambda erwähnt habe. Dies liegt daran, dass Ihre Optimierungen höchstwahrscheinlich nicht AWS Lambda-spezifisch sind (schließlich sollten Sie sich bei Servern ohne Server keine Sorgen um den Server / die Umgebung machen).

Stellen Sie sicher, dass nicht nur Ihr Code funktioniert, sondern auch so, wie Sie es erwarten. Überoptimieren Sie nicht, sondern behalten Sie die CPU- und Speichernutzung kritisch im Auge. Sollte ein Array mit 2 MB wirklich auf 10 MB anwachsen, wenn Sie es sortieren? Wahrscheinlich nicht.

Dann können Sie die von Dawny33 erwähnten Tools oder einige andere Tools verwenden, um zu bestätigen, dass Ihre Funktionen bei der Bereitstellung für Lambda ähnlich ausgeführt werden. Sie haben jedoch bereits ein sehr hohes Maß an Vertrauen in Ihre Funktion und müssen nur überprüfen, ob sie sich ordnungsgemäß verhalten, und sie nicht vollständig profilieren.

Alexandre
quelle
Ja, das ist wichtig, aber wie geht das? Gibt es einige Tools, Vorgehensweisen, was genau kann ein Entwickler tun? Ich sehe nichts davon in dieser Antwort erwähnt: /
Evgeny
Ich sagte es durch Profilerstellung und Instrumentierung. NewRelic APM ist ein Beispiel, aber dies ist nur einer der verfügbaren Profiler. Installieren Sie den Profiler, führen Sie Ihre Funktion aus und optimieren Sie. Ob es unter AWS Lambda ausgeführt wird, spielt keine Rolle, es sei denn, Sie haben ein spezifisches Problem mit AWS. Ich werde meine Antwort basierend auf Ihrem Kommentar aktualisieren.
Alexandre
Einige Beispiele und Links zu Artikeln, Blogs und bekannten Profilern, die diese Aufgabe übernehmen können. Das ist die Art von Sache, die imho die Antwort wertvoll macht, und nicht nur Leute dazu bringt, irgendwo eine Frage zu stellen: "Wie zähle ich meine CPU-Interrupts, ich habe keine Ahnung".
Evgeny
Guter Punkt. Ich habe meine Antwort noch einmal verbessert.
Alexandre
5

Ich bin möglicherweise nicht in der Lage, es vollständig zu beantworten, aber hier sind meine Ansichten aus meiner begrenzten Erfahrung mit Lambda:

  1. Geschwindigkeits-Leistung: Die Dauer eines einzelnen Durchlaufs einer Lambda-Funktion wird im Dashboard der monitoringRegisterkarte des Lambda angezeigt, die ungefähr so ​​aussieht:

Bildbeschreibung hier eingeben

Dies gilt auch für Drosseln / Fehler / Anzahl der Aufrufe.

  1. Sie können auch CloudWatch-Filter für die Speichernutzung einer Lambda-Funktion einrichten , deren Daten zur weiteren Optimierung Ihres Handlers verwendet werden können. Dies ist ein anständiger Beitrag zum Einrichten.
  2. Auch eingerichtet ordnungsgemäße Protokollierung , so dass Sie später durch die Protokolle in Cloudwatch gehen können. Dies ist an sich kein Optimierungs-Hack, sondern eher eine Best Practice
  3. Testen : Testen Sie Ihre Lambda-Funktionen gründlich, damit Sie keine Randfälle verpassen. Dies ist wichtig, da Lambda fehlgeschlagene Funktionen wiederholt, bevor es aufgibt. Wenn Sie die Funktion ordnungsgemäß getestet haben, können Sie Zeit sparen. Anleitung zum Testen der Lambda-Funktionen
Dawny33
quelle
5

Schauen Sie sich den IOpipe-Profiler an, um vollständige v8-Profiler-Dumps von Lambda-Aufrufen zu erhalten. Sie können diese in Chrome Devtools laden, um genau zu sehen, wo CPU-Zeit aufgewendet wird und wie Speicher für Ihre Funktionen verwendet wird.

Bildbeschreibung hier eingeben

Haftungsausschluss: Ich arbeite für IOpipe

adjohn
quelle
0

Verwenden Sie den StackImpact-Agenten , um CPU- und Speicherprofile abzurufen . Weitere Details im Blogbeitrag: AWS Lambda-CPU- und Speicherprofilerstellung (Node.js) . Da der Prozess Lambda Node.js zwischen den Anforderungen einfriert, funktionieren die meisten anderen Tools möglicherweise nicht sofort.

Bildbeschreibung hier eingeben

Haftungsausschluss: Ich arbeite für StackImpact

logix
quelle
Während dies verwandt klingt und möglicherweise eine gültige Lösung ist, würde eine Erweiterung der Frage, wie es helfen könnte, das Gefühl einer Link-Antwort vermeiden, wenn der Link verrottet ist.
Tensibai