Die Bedeutung der Skalierbarkeit bei der Softwareentwicklung

Okt 9, 2021
admin

Skalierbarkeit ist eine wesentliche Komponente von Unternehmenssoftware. Wenn man ihr von Anfang an Priorität einräumt, führt das zu niedrigeren Wartungskosten, besserer Benutzerfreundlichkeit und höherer Flexibilität.

Softwaredesign ist ein Balanceakt, bei dem die Entwickler daran arbeiten, das beste Produkt innerhalb der Zeit- und Budgetvorgaben des Kunden zu erstellen.

Die Notwendigkeit von Kompromissen lässt sich nicht vermeiden. Es müssen Kompromisse eingegangen werden, um die Anforderungen eines Projekts zu erfüllen, ganz gleich, ob diese technischer oder finanzieller Natur sind.

Zu oft jedoch geben Unternehmen den Kosten den Vorrang vor der Skalierbarkeit oder vernachlässigen deren Bedeutung sogar ganz. Dies ist leider häufig bei Big-Data-Initiativen der Fall, bei denen Skalierbarkeitsprobleme ein vielversprechendes Projekt zum Scheitern bringen können.

Skalierbarkeit ist keine „Bonusfunktion“. Es ist die Qualität, die den Lebenszeitwert von Software bestimmt, und die Entwicklung mit Blick auf die Skalierbarkeit spart langfristig sowohl Zeit als auch Geld.

Was ist Skalierbarkeit?

Ein System gilt als skalierbar, wenn es nicht umgestaltet werden muss, um die effektive Leistung während oder nach einem starken Anstieg der Arbeitslast aufrechtzuerhalten.

„Arbeitslast“ kann sich auf gleichzeitige Benutzer, Speicherkapazität, die maximale Anzahl von Transaktionen oder alles andere beziehen, was das System über seine ursprüngliche Kapazität hinaus belastet.

Skalierbarkeit ist keine grundlegende Anforderung an ein Programm, da nicht skalierbare Software auch mit begrenzter Kapazität gut laufen kann.

Sie spiegelt jedoch die Fähigkeit der Software wider, mit den Anforderungen des Benutzers zu wachsen oder sich zu verändern.

Jede Software, die über ihre Basisfunktionen hinausgehen kann – insbesondere wenn das Geschäftsmodell von ihrem Wachstum abhängt – sollte für Skalierbarkeit konfiguriert sein.

Die Vorteile skalierbarer Software

Skalierbarkeit hat sowohl lang- als auch kurzfristige Vorteile.

Zu Beginn kann ein Unternehmen nur das kaufen, was es unmittelbar benötigt, und nicht alle Funktionen, die später nützlich sein könnten.

Ein Unternehmen, das ein Data-Intelligence-Pilotprogramm startet, könnte sich beispielsweise für ein umfangreiches Enterprise-Analytics-Paket entscheiden, oder es könnte mit einer Lösung beginnen, die zunächst nur die benötigten Funktionen abdeckt.

Eine beliebte Wahl ist ein Dashboard, das Ergebnisse aus den primären Datenquellen und der vorhandenen Unternehmenssoftware zusammenführt.

Wenn das Unternehmen groß genug ist, um weitere Analyseprogramme zu verwenden, können diese Datenströme in das Dashboard integriert werden, anstatt das Unternehmen zu zwingen, mit mehreren Visualisierungsprogrammen zu jonglieren oder ein völlig neues System zu entwickeln.

Diese Vorgehensweise bereitet auf künftiges Wachstum vor und schafft gleichzeitig ein schlankeres Produkt, das den aktuellen Anforderungen ohne zusätzliche Komplexität gerecht wird.

Es erfordert auch einen geringeren finanziellen Aufwand, was für Führungskräfte, die sich über den Umfang von Big-Data-Investitionen Sorgen machen, eine wichtige Überlegung ist.

Die Skalierbarkeit lässt auch Raum für wechselnde Prioritäten. Das Analysepaket von der Stange könnte an Bedeutung verlieren, wenn sich ein Unternehmen den Anforderungen eines sich entwickelnden Marktes anpasst.

Die Entscheidung für skalierbare Lösungen schützt die anfängliche Technologieinvestition. Unternehmen können dieselbe Software länger nutzen, da sie dafür konzipiert wurde, mit ihnen mitzuwachsen.

Wenn es an der Zeit ist, etwas zu ändern, ist der Aufbau auf einer soliden, skalierbaren Software wesentlich kostengünstiger als der Versuch, weniger agile Programme anzupassen.

Es gibt auch eine kürzere „Anlaufzeit“, um neue Funktionen online zu bringen, als eine völlig neue Software zu implementieren.

Als Nebeneffekt müssen die Mitarbeiter nicht viel geschult oder überzeugt werden, um das aktualisierte System zu übernehmen. Sie sind bereits mit der Schnittstelle vertraut, so dass die Arbeit mit den zusätzlichen Funktionen eher als Bonus denn als lästige Pflicht angesehen wird.

Die Folgen von Skalierungsfehlern

Was passiert also, wenn Software nicht skalierbar ist?

Anfangs ist die Schwäche schwer zu erkennen. In der Anfangsphase einer Anwendung ist die Arbeitslast gering. Bei relativ wenigen gleichzeitigen Benutzern gibt es keine großen Anforderungen an die Architektur.

Wenn die Arbeitslast steigt, treten Probleme auf. Je mehr Daten gespeichert werden oder je mehr gleichzeitige Benutzer die Software hat, desto mehr wird die Softwarearchitektur belastet.

Einschränkungen, die anfangs nicht wichtig erschienen, werden zu einem Hindernis für die Produktivität. Patches können einige der anfänglichen Probleme lindern, aber Patches erhöhen die Komplexität.

Komplexität macht die Diagnose von Problemen auf einer fortlaufenden Basis mühsamer (Übersetzung: teurer und weniger effektiv).

Wenn die Arbeitslast über die Skalierbarkeit der Software hinaus ansteigt, sinkt die Leistung.

Benutzer erleben langsame Ladezeiten, weil der Server zu lange braucht, um auf Anfragen zu reagieren. Weitere mögliche Probleme sind eine geringere Verfügbarkeit oder sogar Datenverluste.

All dies schreckt von einer zukünftigen Nutzung ab. Mitarbeiter werden Umgehungslösungen für unzuverlässige Software finden, um ihre eigenen Aufgaben zu erledigen.

Das setzt das Unternehmen dem Risiko einer Datenverletzung oder Schlimmerem aus.

Wenn die Software auf Kunden ausgerichtet ist, erhöht die Unzuverlässigkeit das Potenzial für Abwanderung.

Google fand heraus, dass 61 % der Nutzer einer App keine zweite Chance geben, wenn sie eine schlechte erste Erfahrung gemacht haben. 40 % gehen stattdessen direkt zum Produkt eines Konkurrenten.

Skalierbarkeitsprobleme sind nicht nur ein Anfängerfehler, der von kleinen Unternehmen begangen wird. Sogar Disney hatte Probleme mit der ursprünglichen Einführung seiner Applause-App, die den Zuschauern eine zusätzliche Möglichkeit bieten sollte, mit ihren Lieblingssendungen von Disney zu interagieren. Die App konnte die Flut der gleichzeitigen Streaming-Video-Nutzer nicht bewältigen.

Enttäuschte Fans hinterließen negative Bewertungen, bis die App nur noch einen einzigen Stern im Google Play Store hatte. Disney musste die App vom Netz nehmen, um den Schaden zu beheben, und die negative Publicity war so groß, dass sie nie wieder online ging.

Prioritäten setzen

Einigen Unternehmen gelingt es nicht, der Skalierbarkeit Priorität einzuräumen, weil sie den unmittelbaren Nutzen nicht sehen.

Skalierbarkeit wird zugunsten von Geschwindigkeit, kürzeren Entwicklungszyklen oder niedrigeren Kosten beiseite geschoben.

Es gibt tatsächlich einige Fälle, in denen die Skalierbarkeit nicht die höchste Priorität hat.

Software, die als Prototyp oder als Proof of Concept mit geringem Umfang gedacht ist, wird nicht groß genug werden, um Probleme zu verursachen.

Gleichermaßen kann interne Software für kleine Unternehmen mit einer niedrigen festen Grenze potenzieller Benutzer andere Prioritäten setzen.

Schließlich tritt die Skalierbarkeit gegenüber der Zuverlässigkeit in den Hintergrund, wenn die Einhaltung von ACID zwingend erforderlich ist.

In der Regel ist die Skalierbarkeit jedoch einfacher und weniger ressourcenintensiv, wenn sie von Anfang an berücksichtigt wird.

Einerseits hat die Wahl der Datenbank einen großen Einfluss auf die Skalierbarkeit. Die Migration auf eine neue Datenbank ist teuer und zeitaufwändig. Das ist nichts, was man später einfach nachholen kann.

Grundsätze der Skalierbarkeit

Es gibt mehrere Faktoren, die sich auf die allgemeine Skalierbarkeit von Software auswirken:

Nutzung

Die Nutzung misst die Anzahl der möglichen gleichzeitigen Benutzer oder Verbindungen. Es sollte keine künstlichen Grenzen für die Nutzung geben.

Eine Erhöhung der Nutzung sollte so einfach sein wie die Bereitstellung von mehr Ressourcen für die Software.

Maximal gespeicherte Daten

Dies ist besonders wichtig für Websites mit vielen unstrukturierten Daten: von Benutzern hochgeladene Inhalte, Website-Berichte und einige Arten von Marketingdaten.

Datenwissenschaftliche Projekte fallen ebenfalls in diese Kategorie. Die durch diese Art von Inhalten gespeicherte Datenmenge kann dramatisch und unerwartet ansteigen.

Ob die maximal gespeicherten Daten schnell skaliert werden können, hängt stark von der Art der Datenbank ab (SQL- vs. NoSQL-Server), aber es ist auch wichtig, auf eine angemessene Indizierung zu achten.

Code

Unerfahrene Entwickler neigen dazu, bei der Planung der Skalierbarkeit Überlegungen zum Code zu übersehen.

Der Code sollte so geschrieben werden, dass er ohne Refactoring des alten Codes ergänzt oder geändert werden kann. Gute Entwickler sind bestrebt, doppelten Aufwand zu vermeiden und so die Gesamtgröße und Komplexität der Codebasis zu reduzieren.

Anwendungen werden im Laufe ihrer Entwicklung immer größer, aber wenn man den Code sauber hält, wird dieser Effekt minimiert und die Bildung von „Spaghetti-Code“ verhindert.

Skalierung nach außen vs. Skalierung nach oben

Zu einer Skalierung nach oben (oder „vertikalen Skalierung“) gehört das Wachstum durch den Einsatz modernerer oder stärkerer Hardware. Zur Bewältigung der erhöhten Arbeitslast wird Festplattenspeicher oder eine schnellere Zentraleinheit (CPU) verwendet.

Scaling Up bietet eine bessere Leistung als Scaling Out. Alles befindet sich an einem Ort, was schnellere Erträge und weniger Anfälligkeit ermöglicht.

Das Problem bei der Skalierung nach oben ist, dass es nur so viel Platz zum Wachsen gibt. Die Hardware wird teurer, je fortschrittlicher sie wird. Ab einem bestimmten Punkt stoßen Unternehmen beim Kauf fortschrittlicher Systeme auf das Gesetz des abnehmenden Ertrags.

Die Implementierung der neuen Hardware erfordert außerdem Zeit.

Aufgrund dieser Einschränkungen ist die vertikale Skalierung nicht die beste Lösung für Software, die schnell und unauffällig wachsen muss.

Die Skalierung nach außen (oder „horizontale Skalierung“) ist in Unternehmen viel weiter verbreitet.

Bei der Skalierung wächst die Software, indem mehr – und nicht modernere – Hardware verwendet und die erhöhte Arbeitslast auf die neue Infrastruktur verteilt wird.

Die Kosten sind niedriger, da die zusätzlichen Server oder CPUs vom gleichen Typ wie die derzeit verwendeten sein können (oder von einem kompatiblen Typ).

Die Skalierung erfolgt auch schneller, da nichts importiert oder neu erstellt werden muss.

Es gibt jedoch einen kleinen Kompromiss bei der Geschwindigkeit. Horizontal skalierte Software wird durch die Geschwindigkeit begrenzt, mit der die Server kommunizieren können.

Der Unterschied ist jedoch nicht groß genug, um von den meisten Benutzern bemerkt zu werden, und es gibt Tools, die den Entwicklern helfen, den Effekt zu minimieren. Daher wird bei der Entwicklung skalierbarer Anwendungen die Skalierung nach außen als die bessere Lösung angesehen.

Leitlinien für die Entwicklung hochskalierbarer Systeme

Es ist sowohl billiger als auch einfacher, die Skalierbarkeit bereits in der Planungsphase zu berücksichtigen. Hier sind einige bewährte Verfahren, um die Skalierbarkeit von Anfang an zu berücksichtigen:

Verwenden Sie Lastausgleichssoftware

Lastausgleichssoftware ist für Systeme mit verteilter Infrastruktur (wie horizontal skalierte Anwendungen) von entscheidender Bedeutung.

Diese Software verwendet einen Algorithmus, um die Arbeitslast auf die Server zu verteilen und sicherzustellen, dass kein einzelner Server überlastet wird. Das ist eine absolute Notwendigkeit, um Leistungsprobleme zu vermeiden.

Der Standort ist wichtig

Skalierbare Software erledigt so viel wie möglich in der Nähe des Clients (in der Anwendungsschicht). Dadurch, dass weniger Anwendungen durch den hohen Datenverkehr in der Nähe der Kernressourcen navigieren müssen, wird die Geschwindigkeit erhöht und die Server werden weniger belastet.

Edge Computing ist ein weiterer Aspekt, der zu berücksichtigen ist. Da immer mehr ressourcenintensive Anwendungen benötigt werden, verringert die Tatsache, dass so viel Arbeit wie möglich auf dem Gerät verbleibt, die Auswirkungen von Bereichen mit niedrigem Signal und Netzwerkverzögerungen.

Cache, wo möglich

Seien Sie sich der Sicherheitsbedenken bewusst, aber Caching ist ein guter Weg, um zu verhindern, dass dieselbe Aufgabe immer wieder ausgeführt werden muss.

Leiten Sie mit API

Benutzer verbinden sich über eine Vielzahl von Clients, so dass die Leitung mit API, die nicht von einem bestimmten Client-Typ ausgehen, alle von ihnen bedienen kann.

Asynchrone Verarbeitung

Dies bezieht sich auf Prozesse, die in einzelne Schritte unterteilt sind, die nicht darauf warten müssen, dass der vorherige Schritt abgeschlossen ist, bevor sie verarbeitet werden können.

Zum Beispiel kann einem Benutzer eine „Gesendet!“ angezeigt werden, während die E-Mail technisch noch verarbeitet wird.

Die asynchrone Verarbeitung beseitigt einige der Engpässe, die die Leistung großer Software beeinträchtigen.

Begrenzen Sie den gleichzeitigen Zugriff auf begrenzte Ressourcen

Doppeln Sie nicht den Aufwand. Wenn mehr als eine Anfrage die gleiche Berechnung von der gleichen Ressource verlangt, lassen Sie die erste abschließen und verwenden Sie nur das Ergebnis. Dies erhöht die Geschwindigkeit und verringert die Belastung des Systems.

Verwenden Sie eine skalierbare Datenbank

NoSQL-Datenbanken sind in der Regel besser skalierbar als SQL. SQL skaliert Lesevorgänge gut genug, aber bei Schreibvorgängen kommt es zu Konflikten mit den Einschränkungen, die zur Durchsetzung der ACID-Prinzipien gedacht sind.

Die Skalierung von NoSQL erfordert eine weniger strenge Einhaltung dieser Prinzipien, so dass eine NoSQL-Datenbank die richtige Wahl sein kann, wenn die Einhaltung der ACID-Prinzipien keine Rolle spielt.

Prüfen Sie PaaS-Lösungen

Platform-as-a-Service erleichtert viele Skalierungsprobleme, da der PaaS-Anbieter die Skalierung verwaltet. Die Skalierung kann so einfach sein wie ein Upgrade der Abonnementstufe.

Prüfen Sie FaaS

Function-as-a-Service hat sich aus PaaS entwickelt und ist sehr eng verwandt. Serverless Computing bietet eine Möglichkeit, nur die Funktionen zu nutzen, die zu einem bestimmten Zeitpunkt benötigt werden, und reduziert so unnötige Anforderungen an die Back-End-Infrastruktur.

FaaS ist noch nicht ausgereift, aber es könnte sich lohnen, es als Möglichkeit zur Senkung der Betriebskosten bei gleichzeitiger Verbesserung der Skalierbarkeit zu prüfen.

Vergessen Sie nicht die Wartung

Richten Sie Software für automatisierte Tests und Wartung ein, damit der Wartungsaufwand nicht außer Kontrolle gerät, wenn die Software wächst.

Bauen Sie mit einem Auge auf die Zukunft

Die Priorisierung der Skalierbarkeit bereitet Ihr Unternehmen auf den Erfolg vor. Berücksichtigen Sie dies frühzeitig, und Sie werden die Vorteile der Agilität ernten, wenn sie am meisten gebraucht wird.

Suchen Sie nach einer Software, die mit Ihrem Unternehmen wachsen kann? Vereinbaren Sie einen kostenlosen Termin mit einem unserer Entwickler, um zu besprechen, wo Sie hinwollen und wie wir Sie dorthin bringen können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.