12 Programmiertricks, um Ihre Cloud-Rechnung zu senken

Die Senkung der Cloud-Kosten ist Teamarbeit, und dazu gehören auch die Entwickler. Hier sind 12 Tricks für die Entwicklung von Software, die kostengünstiger in der Cloud betrieben werden kann. [...]

(c) pixabay.com

Nichts hebt die Stimmung eines Entwicklerteams so sehr, wie eine Anwendung zu sehen, die sich viral verbreitet. Das ist ein wunderbares Gefühl – zumindest bis die monatliche Cloud-Rechnung eintrifft. Einige Entwickler sind der Meinung, dass die Verwaltung der Kosten für die Datenverarbeitung in den Zuständigkeitsbereich des Devops-Teams fällt. Die Programmierer schreiben die Software, geben sie aus der Hand und überlassen es jemand anderem, für sie zu bezahlen. Die Wahrheit sieht anders aus.

Kluge Entwickler wissen, dass ihre Codierungsentscheidungen einen großen Einfluss auf das Endergebnis des Unternehmens haben. Schwerfälliger Code ist langsamer und erfordert mehr Cloud-Ressourcen zur Ausführung. Bei der Auswahl besserer Algorithmen und der Erstellung eines strafferen Codes geht es um mehr als nur Geschwindigkeit. Gut geschriebener Code verursacht auch geringere Kosten bei der Ausführung.

Die Entwickler sehen diesen Zusammenhang jedoch oft nicht. Es ist einfach, Code auf dem eigenen Rechner zu schreiben, für den RAM und zusätzlicher Festplattenspeicher bereits beim Kauf bezahlt wurden. Wenn man zwei Terabyte Festplattenspeicher hat, merkt man vielleicht nicht, wie viel davon der Code verbraucht. Wenn ein neuer Algorithmus doppelt so lange für die Ausführung braucht, blinkt Ihr Desktop vielleicht nicht einmal – und außerdem, wer bemerkt schon ein paar zusätzliche Millisekunden? Aber es ist fast sicher, dass eine Verdopplung der Berechnungen zu einer höheren Cloud-Rechnung führt.

Modernes Cloud Computing zeichnet sich dadurch aus, dass es die Ressourcennutzung in eine Einzelpostengebühr umwandelt. Gute Cloud-Entwickler wissen, dass sie die Möglichkeit haben, beim Schreiben ihres Codes intelligentere Entscheidungen zu treffen. Das kann so einfach sein wie das Ausführen eines Profilers, um langsame Stellen zu identifizieren, oder das Vermeiden unnötiger Datenspeicherung, um den Speicherbedarf zu verringern.

Hier sind 12 Möglichkeiten, Ihren Code zu optimieren, damit er schlanker, schneller und kostengünstiger wird.

Schnelleren Code schreiben

Die meisten Entwickler verbringen nicht viel Zeit mit der Optimierung ihres Codes. Wenn das Programm auf ihrem Laptop in Sekundenbruchteilen läuft, fällt es ihnen nicht auf, wenn es im Laufe der Zeit 20 %, 30 % oder sogar 300 % langsamer wird. Das Programm reagiert immer noch in Sekundenbruchteilen. Aber diese Unterschiede summieren sich, wenn sie millionenfach auf dem Server auftreten. Eine sorgfältige Profilerstellung kann die langsamen Teile aufzeigen. Durch Umschreiben dieser Teile kann die Anzahl der Instanzen, die Ihre Anwendung benötigt, verringert werden.

Verringern Sie Ihren RAM-Bedarf

Die Menge an Arbeitsspeicher, die verwendet wird, ist ein wichtiger Parameter für die Preisgestaltung von Cloud-Instanzen. In vielen Fällen verdoppelt eine derartige Verdoppelung des Arbeitsspeichers auch die Kosten. Programmierer können ihren RAM-Fußabdruck verringern, indem sie vermeiden, Daten im Speicher zu halten. Einige Streaming-Algorithmen, wie z. B. die Stream-Klassen von Java, sind darauf ausgelegt, mit großen Datendateien zu arbeiten, ohne sie alle in den Speicher zu laden. Das Apache DataSketches-Projekt generiert annähernde Antworten für komplexe Big-Data-Statistiken, ohne den gesamten Speicher zu belegen.

Als Nebeneffekt kann ein sorgfältiger RAM-Verbrauch auch Ihre Algorithmen beschleunigen. Manchmal beginnt das Betriebssystem damit, Daten über den virtuellen Speicher auf die Festplatte auszulagern. Dies verhindert zwar einen Absturz, kann aber Ihre Programme drastisch verlangsamen.

Bilder und Videos mit geringerer Auflösung verwenden

Die Verwendung von Bildern und Videos mit geringerer Auflösung kann sich in mehrfacher Hinsicht auszahlen. Erstens wird ihre Speicherung billiger. Zweitens sind die Kosten für eine eventuelle Datenexfiltration geringer. Drittens erscheint die Anwendung den Nutzern flotter.

Alle statischen Bilder sollten von Anfang an minimiert werden. Das Ausmaß der Minimierung ist leider nicht ganz einfach, denn ab einem gewissen Punkt verschlechtert sich die visuelle Qualität so stark, dass sie für die Benutzer sichtbar wird. Den richtigen Kompromiss zu finden, ist eine Design-Entscheidung, auf die manche Programmierer nicht vorbereitet sind.

Einige Anwendungen, die hochgeladene Bilder verwenden, können auch kleinere Miniaturansichten und Versionen mit geringerer Auflösung erstellen, nachdem sie das Bild erhalten haben. Toolkits wie ImageMagik und Formate wie WebP wurden zu genau diesem Zweck entwickelt.

Unnötige Daten löschen

Viele Entwickler sind digitale Packtiere, die Informationen nur für den Fall speichern, dass sie sie vielleicht eines Tages brauchen. Sie füllen Tabellen mit endlosen Spalten und löschen die Zeilen dann nie. Die zusätzlichen Daten kosten nichts, wenn man die Hardware besitzt und das Laufwerk genügend Platz bietet. Aber in der Cloud ist alles kostenpflichtig. Werden Sie all diese Werte in Zukunft wirklich brauchen? Will der Benutzer überhaupt so viele Details? Wenn Sie einen Teil der alten Daten wegwerfen, sparen Sie Geld für die Datenspeicherung und -exfiltration.

Festplattenspeicher begrenzen

Die Verwendung der lokalen Festplatte auf Cloud-Instanzen ist nicht nur gefährlich, sondern kann auch teuer werden. Der lokale Festplattenspeicher ist oft so ausgelegt, dass er schnell genug ist, um das Betriebssystem effizient laufen zu lassen. Viele Entwickler erstellen ihren Code auf einem persönlichen Rechner mit einem oder mehreren Terabyte Speicherplatz. Speicherplatz auf Cloud-Rechnern ist jedoch selten so günstig oder leicht verfügbar. Clouds rechnen den Speicherplatz oft direkt nach Größe ab, daher ist es am besten, so wenig Speicherplatz wie möglich zu verwenden. Überlegen Sie, wie Sie nicht nur die temporären Dateien, die Ihre Anwendung erstellt, sondern auch die erforderlichen Systembibliotheken und Softwarepakete minimieren können.

Säubern Sie Ihre Protokolle

Protokolldateien sind hervorragend geeignet, um Probleme zu erkennen und Software während der Entwicklung zu debuggen. Sobald der Code jedoch in Produktion ist, müssen Sie nicht mehr alle Dateien aufbewahren. All die zusätzlichen Informationen verstopfen entweder die lokale Festplatte oder den Objektspeicher. Wenn Sie das Protokollierungssystem entwerfen, konfigurieren Sie es so, dass die Protokolle häufig entfernt werden. Viele Protokollierungspakete wie Log4j können so eingestellt werden, dass sie nur eine minimale Anzahl von Protokollen aufbewahren und diese in regelmäßigen Abständen löschen.

Auf Server verzichten

Serverlose Architekturen werden nur dann abgerechnet, wenn Ihr Code läuft, was bei unregelmäßiger Auslastung viel Geld sparen kann. Selbst Anwendungen, die einen konstanten Fluss von Nutzern haben, haben mehr Leerlauf, als Sie vielleicht erwarten.

Viele Serverless-Tarife belohnen sorgfältige Codierung und sehr schnelle Leistung bei minimalem RAM-Verbrauch. Die Abrechnungsformel zählt die Reaktionszeit in Millisekunden und berechnet nur die Zeit, in der der Prozessor belegt ist. Als Entwickler erhalten Sie sofortiges Feedback, da Sie die Reaktionszeit direkt verfolgen und sehen können, wie sich Ihre Codeänderungen darauf auswirken.

Der serverlose Ansatz ist ideal für kleinere oder experimentellere Projekte, und die Rechnung kann oft nur ein paar Cent pro Monat betragen. Wenn Ihre Anwendung nur gelegentlich einige Funktionen ausführt, kann es sinnvoll sein, auf Serverless zu setzen.

Alte Daten archivieren

Je älter die Daten werden, desto seltener wird auf sie zugegriffen. Sie können dem zuvorkommen, indem Sie Ihre Anwendung so einrichten, dass ältere Daten an einen günstigeren Speicherort migriert werden. Einige Clouds berechnen viel weniger für den so genannten „kalten Speicher“, bei dem es Minuten oder sogar Stunden dauern kann, bis die Bits geliefert werden. Andere Clouds wie Wasabi oder Backblaze sind auf die Archivierung von Amazon S3-Objekten spezialisiert und berechnen deutlich weniger als die großen Clouds. In einigen Fällen berechnen sie nicht einmal Gebühren für die Datenexfiltration. Das Auslagern von Daten, sobald sie nicht mehr stark nachgefragt werden, kann äußerst kosteneffizient sein.

Vereinfachen Sie Ihre CSS-Layouts

Wenn Sie sich die von einigen Frameworks generierten HTML-Tags angesehen haben, wissen Sie, wie lächerlich die Layouts werden können. Es sind nur DIV-Tags, die in DIV-Tags verschachtelt sind – und das kostet Geld bei der Erstellung und Bereitstellung. Ein Webdesigner, den ich kenne, prahlt damit, dass er seine Bandbreitenrechnung um 30 % gesenkt hat, indem er ein einfacheres Layout mit einem vernünftigeren Einsatz von CSS erstellt hat.

Statische Websites erstellen

Einige Frameworks wie React benötigen viel Rechenleistung, insbesondere wenn sie Funktionen wie das serverseitige Rendering verwenden. All dieser Code treibt die monatliche Cloud-Rechnung in die Höhe. Die entgegengesetzte Philosophie besteht darin, eine statische Website zu erstellen, die aus unveränderlichen HTML-, CSS- und JavaScript-Blöcken besteht, die vollständig aus einem Cache abgerufen werden. Die Verwendung eines Content-Delivery-Netzwerks kann die Bereitstellung sogar noch weiter beschleunigen, da die Caches näher an den Benutzer heranrücken.

Verschiedene Frameworks machen sich diese statische Philosophie zu eigen. Jekyll, Hugo, Gridsome und Pelican sind nur einige wenige Tools, die Ihren gesamten Inhalt in kompakte, unveränderliche Dateien packen. Sie können die Seiten immer noch mit AJAX-Aufrufen personalisieren, aber der Großteil der Website belastet die Server kaum.

Auslagerung von Berechnungen und Speicherung

Da die Browser immer leistungsfähiger werden, machen es einige Frameworks einfacher, mehr Berechnungen direkt auf den Client zu verlagern. Guter JavaScript- oder WebAssembly-Code kann einen größeren Teil der Last auf den Rechner des Benutzers verlagern und Ihre Cloud-Server entlasten. Einige Entwickler reduzieren ihre Cloud-Ebene auf wenig mehr als eine Datenbank mit ein wenig Logik für die Authentifizierung. Bei einem Freund läuft alles mit statischem HTML und einer serverseitigen Version von PostgreSQL mit eingebetteten Prozeduren, die JSON ausgeben.

Browser haben auch ausgefeiltere Optionen für die lokale Speicherung von Informationen, wie den HTML Web Storage Standard und die W3C Indexed Database API. Es geht nicht mehr nur um kurze Strings und Cookies. Diese Daten sind schneller verfügbar, da sie nicht über das Internet übertragen werden, und es beruhigt die Benutzer, dass ihre Daten nicht in einer zentralisierten, hackbaren Datenbank gespeichert sind. Warum für die Datenspeicherung und -exfiltration bezahlen, wenn sie auf dem Rechner des Nutzers kostenlos gespeichert werden können?

Beauftragung eines Kosteningenieurs

Manche Entwickler sind auf die Pflege von Datenbanken spezialisiert. Andere mögen es, mit einem gut gestalteten Frontend einen schönen ersten Eindruck zu hinterlassen. Jetzt, da die Cloud-Kosten so flexibel sind, ernennen einige Teams offiziell „Kosteningenieure“, die sich um die Verwaltung von Codekosten und Effizienz kümmern. Die Hauptaufgabe eines Kosteningenieurs besteht darin, den Anwendungscode sauberer, schneller, leichter und damit kostengünstiger zu machen. Indem diese Aufgabe zu einem Teil des Jobs gemacht wird, wird deutlich, wie wichtig die Verwaltung der Codekosten als Teil der Rolle und Verantwortung des Entwicklungsteams ist.

*Peter Wayner ist, unter anderem, Autor bei InfoWorld


Mehr Artikel

Gregor Schmid, Projektcenterleiter bei Kumavision, über die Digitalisierung im Mittelstand und die Chancen durch Künstliche Intelligenz. (c) timeline/Rudi Handl
Interview

„Die Zukunft ist modular, flexibel und KI-gestützt“

Im Gespräch mit der ITWELT.at verdeutlicht Gregor Schmid, Projektcenterleiter bei Kumavision, wie sehr sich die Anforderungen an ERP-Systeme und die digitale Transformation in den letzten Jahren verändert haben und verweist dabei auf den Trend zu modularen Lösungen, die Bedeutung der Cloud und die Rolle von Künstlicher Intelligenz (KI) in der Unternehmenspraxis. […]

News

Richtlinien für sichere KI-Entwicklung

Die „Guidelines for Secure Development and Deployment of AI Systems“ von Kaspersky behandeln zentrale Aspekte der Entwicklung, Bereitstellung und des Betriebs von KI-Systemen, einschließlich Design, bewährter Sicherheitspraktiken und Integration, ohne sich auf die Entwicklung grundlegender Modelle zu fokussieren. […]

News

Datensilos blockieren Abwehrkräfte von generativer KI

Damit KI eine Rolle in der Cyberabwehr spielen kann, ist sie auf leicht zugängliche Echtzeitdaten angewiesen. Das heißt, die zunehmende Leistungsfähigkeit von GenAI kann nur dann wirksam werden, wenn die KI Zugriff auf einwandfreie, validierte, standardisierte und vor allem hochverfügbare Daten in allen Anwendungen und Systemen sowie für alle Nutzer hat. Dies setzt allerdings voraus, dass Unternehmen in der Lage sind, ihre Datensilos aufzulösen. […]

Be the first to comment

Leave a Reply

Your email address will not be published.


*