Hinweis: Dieser Blogbeitrag stammt aus der Zeit vor dem Zusammenschluss und wurde von ARS realisiert – heute Teil von ATVANTAGE. Unsere Erfahrung bleibt – nur unser Name hat sich geändert. Hier finden Sie weitere Informationen rund um die Fusion.

Lesezeit: 2 Minuten

 

Optimierung von Serverless Funktionen - Performance und Kosten

 

Serverless Funktionen sind hervorragend geeignet, um schnelle, stark skalierende Programme auszuführen. In den meisten Fällen wird die Funktion pro Ausführung gestartet. Dabei wird üblicherweise anhand ausgeführter Rechenzeit und benötigtem Arbeitsspeicher abgerechnet.

Um dem Anspruch an die Skalierbarkeit und Neustart pro Ausführung optimal gerecht zu werden, muss also die Startzeit möglichst gering gehalten werden. Wenn die Funktion häufig verwendet wird, ist auch die Optimierung der Kosten und damit der Laufzeitperformance interessant.

Im Folgenden betrachten wir ein bewährtes Vorgehen und geben einige konkrete, praktische Tipps, um so eine Optimierung durchzuführen.

Anforderungen als Grundlage der Optimierung

Bevor optimiert werden kann, müssen die Anforderungen an die Anwendung spezifiziert werden. Optimierung muss zielgerichtet erfolgen. Eine Backend-for-Frontend-Anwendung beispielsweise muss in Hinblick auf die Round-Trip-Time der Endnutzer-Anfrage ausgelegt werden, da hier die User-Experience betroffen ist.

Ebenso kann es erforderlich sein, die Kosten pro Ausführung zu verbessern. Welche Anforderung hier wichtiger ist, muss aus den Qualitätsanforderungen entschieden werden. Die Verbesserung der Round-Trip-Time kann beispielsweise möglicherweise durch asynchrone Verarbeitung erreicht werden, während eine Erhöhung des Arbeitsspeichers für die Funktion hier meist wenig Einfluss hat.

Umsetzung

Nachdem das Ziel und die Anforderungen an die Optimierung festgestellt wurden, erfolgt die Umsetzung der Optimierung in mehreren Schritten. Zuerst müssen die zu verbessernden Kennzahlen messbar gemacht werden. Dann werden die Optimierungsschritte selbst unternommen und die Auswirkungen erneut gemessen. Iterativ kann man sich so dem Optimierungsziel nähern.

Messungen

Die Durchführung der Messungen ist abhängig vom verwendeten Cloud Service Provider. Am Beispiel von AWS können die Kosten im Cost Manager eingesehen werden, wobei die Trennung auf einzelne Funktionen kaum möglich ist.

Deshalb bietet sich zusätzlich die Verwendung von Cloud Watch an, wo mittels geeigneter Abfragen die Kosten ermittelt werden können. Für die aktuellen Preise wäre eine folgende Abfrage möglich, die dann direkt die Kosten im betrachteten Zeitraum ausgibt:



In der Query werden zwei Konstanten verwendet (2):

  • 1,627607421875e-11: Kosten pro ms und MB (0,0000166667 USD für jede GB-Sekunde / 1024 (GB zu MB) / 1000 (Sekunde zu ms))
  • 2.0e-7: Kosten pro Millionen Ausführungen

Ein sehr nützliches Tool zur Messung von Performance und Kosten ist in AWS auch das sogenannte Power Tuning Tool (1).

Das Tool ermöglicht es, die Funktion mit verschiedenen Speicherkonfigurationen mehrfach auszuführen und gibt die Laufzeit und Kosten unter diesen Konfigurationen an. So lässt sich sehr einfach eine optimale Konfiguration gemäß den eigenen Anforderungen finden.

Das Ergebnis dieser Messung wird wie in Abbildung 1 dargestellt. In diesem Beispiel sieht man, dass die Kosten mit steigendem Speicher natürlich steigen, dort die Durchlaufzeit aber nicht nennenswert verbessert wird. Hier wird also kaum Mehrwert von mehr Speicherzuweisung erzielt. In anderen Anwendungen kann das Ergebnis völlig anders ausfallen.

Abbildung 1: Ergebnis des Power Tuning Tools

Optimierung vornehmen

Hat man präzise Messungen erhalten, müssen nun die Optimierungen in Bezug auf die eigenen Anforderungen durchgeführt werden. Soll die Performance gesteigert werden, ist die Erhöhung des zugewiesenen Arbeitsspeichers meist das einfachste Mittel. Hier muss dann aber (z.B. mittels Power Tuning Tool) verifiziert werden, dass wirklich die gewünschte Verbesserung erzielt wird.

Ein anderes Mittel ist die Optimierung der Ausführungsumgebung. Die Wahl der Programmiersprache hat enormen Einfluss auf die Startzeiten der Funktion. Sollen sogenannte Cold Starts ganz vermieden werden, kann auch „Provisioned Concurrency“ gebucht werden, wo immer mehrere Funktions-Instanzen vorab gestartet und bereitgehalten werden. Das geht aber auch mit deutlich erhöhten Kosten einher (3).


Abbildung 2: Lambda Ausführungsschritte

Zuletzt muss immer durch erneute Messungen sichergestellt werden, dass das Optimierungsziel erreicht wurde. Meist sind mehrere Iterationen dieses Vorgehens sinnvoll, um sich dem eigenen Ziel stückweise anzunähern.

Fazit

Man sieht also, dass die Optimierung von Funktionen nicht trivial ist und immer eine Abwägung widersprüchlicher Ziele beinhaltet. Die Steigerung der Leistung steht meist höheren Kosten gegenüber.

Die Bestimmung der eigenen Ziele muss also immer zuerst erfolgen und dann auch kontinuierlich überprüft werden.

 

Quellen:
(1) https://github.com/alexcasalboni/aws-lambda-power-tuning
(2) https://aws.amazon.com/de/lambda/pricing/
(3) https://docs.aws.amazon.com/lambda/latest/operatorguide/execution-environments.html#cold-starts

Blogautor

Johannes Brühl
Softwarearchitekt ARS Computer und Consulting GmbH

Ihr Erfolg ist unser Ziel

Stehen Sie vor komplexen IT-Projekten? Mit unserer Expertise bieten wir Ihnen maßgeschneiderte Lösungen. Erfahren Sie mehr.

Werde Teil unseres Teams

Wir suchen ständig nach neuen Talenten. Für dich haben wir genau die richtige Stelle. Schau dir unsere offenen Positionen an.

Noch Fragen? Wir helfen Ihnen gerne!

Blog 05.10.23

AWS Lambda vs. AWS Fargate

Entdecken Sie die Unterschiede zwischen Serverless-Technologie und Container-Technologie und erfahren Sie, wie AWS Lambda und AWS Fargate von Amazon Web Services diese Ansätze unterstützen.

Blog 01.08.24

Migration von HOST-Anwendungen zu AWS: Modernisierung

Lernen Sie, wie moderne AWS-Services nahtlos in bestehende Host-Landschaften integriert werden und profitieren Sie von den Vorteilen von Serverless-Technologien.

Blog 07.09.23

Platform as a Service vs. Infrastructure as a Service

Die Cloud-Transformation stellt Sie vor die Frage: Platform as a Service oder Infrastructure as a Service? Beitrag über Vor- und Nachteile von PaaS und IaaS.

Blog 22.06.23

Cloud Landing Zones: Sicher landen in der Public Cloud

Was sind Cloud Landing Zones? Lesen Sie, wie Sie mit Hilfe von CLZ Ihre Cloud-Strategie definieren und wichtige Learnings für die Transformation gewinnen.

Blog 18.04.24

Cloud-Native Netzwerksouveränität mit Cilium und Kubernetes

Erfahren Sie alles über die revolutionäre Cloud-Native Netzwerksouveränität mit Cilium und Kubernetes. Optimieren Sie Ihre Netzwerkinfrastruktur für mehr Sicherheit und Leistung.

Blog 08.06.23

Fünfzehn vor zwölf: Der Gang in die Cloud

Was sind die Erfolgsfaktoren einer Cloud-Transformation? Diese 15 Punkte von A wie Abhängigkeiten bis T wie Telemetrie - von Praktikern für IT-Entscheider.

Blog 24.11.22

Architekturarbeit im Zeitalter Cloud-nativer Architekturen 3

Gedanken zu Möglichkeiten von Cloud-native-Architekturen und Kriterien zur Auswahl der Technologie: Standard nehmen oder sich dem Cloud-Anbieter ergeben?

Blog 02.03.23

Enterprise Architecture vs. DevOps und agiles Mindset

Über die Rolle von Enterprise-Architekten in Unternehmen, wie sie moderne Softwareentwicklung beeinflussen und Kompetenzbereiche in IT-Abteilungen.

Blog 25.03.25

Energieverbrauch KI: Chancen und Herausforderungen

Wie hoch ist der Energieverbrauch KI wirklich? Wir beleuchten Ursachen, zeigen Optimierungsmöglichkeiten und blicken auf die Zukunft energieeffizienter KI.

Blog 01.12.23

Sheriff – Ordnung schaffen in TypeScript-Anwendungen

Wie Sie mit Sheriff in TypeScript-Anwendungen für Ordnung sorgen können. Nutzen Sie die Vorteile der horizontalen und vertikalen Aufteilung, um klare Grenzen und Abhängigkeiten zu definieren.

Blog 28.03.24

Grafana Loki: Die nächste Generation des Log-Managements

Grafana Loki: Erfahren Sie mehr über die innovative Log-Verwaltungslösung für Cloud-native Umgebungen und deren Vorteile im Vergleich zu anderen Tools wie ElasticStack und Splunk.

Blog 10.11.22

Architekturarbeit im Zeitalter Cloud-nativer Architekturen 2

Aufgaben von Softwarearchitekten im Cloud-native-Umfeld, benötigte Skills und ihr Arbeitsalltag zwischen Kundenanforderungen, Zieldefinition und Deadlines.

Blog 08.12.22

Teil 4: Eigenschaften einer Cloud-native Architektur

Beitrag zu Cloud-native Architekturen, ihre Möglichkeiten und Zielsetzungen sowie die Philosophie und Arbeitsweise, die daraus folgt.

Blog 05.01.23

Teil 6 - Die Architektenrolle in DevOps-Teams/Organisationen

Erfahren Sie in diesem Blogbeitrag mehr über die Rolle der Architekten in DevOps-Teams und wie sich die Architekturarbeit im cloud-native Umfeld verändert hat.

Blog 16.02.23

Keine Angst vor Komplexität

Wie kann man die Komplexität der Organisation u. Technologie, die neue Plattformen, Architekturen und neue Entwicklerkultur mit sich bringen, beherrschen?

Blog 27.10.22

Architekturarbeit im Zeitalter Cloud-nativer Architekturen 1

Die beschleunigte Digitalisierung und ihr Einfluss auf Softwarearchitekturen und IT-Teams beschreibt der Autor. Sind Cloud-native-Strategien sinnvoll?

Blog 16.03.23

Bedeutung von APIs als Interaktionsmodell

APIs sind mehr als Schnittstellen, sie sind Teil der Interaktion zwischen Geschäftspartnern. Eine API First Strategie schafft echte Wertschöpfung.

Blog 13.07.23

CI-Ops vs. GitOps

Um Entwicklungsprozesse zu automatisieren, sind zwei Ansätze populär: CI-Ops und GitOps. Unser Autor vergleicht beide und gibt Code-Beispiele.

Blog 11.08.23

AWS Lambda: Erste Schritte mit Java

In diesem Artikel lernen wir, was die Vorteile bei der Verwendung von AWS Lambda sind u. wie wir Java-Code in AWS-Lambda installieren und ausführen können.

Blog 30.03.23

Eine API kommt selten allein - APIs in der freien Wildbahn

API's als Produkt zu verstehen ist ein Merkmal agiler Arbeitsweise. API's sind immer im Kontext des geplanten Services und des Ökosystems zu betrachten.