Beste Antwort
Skalierbar bedeutet, dass das System relativ einfach an eine breitere Benutzerbasis angepasst werden kann als ursprünglich oder ursprünglich beabsichtigt . Zu den Faktoren, die bestimmen, wie skalierbar eine Anwendung ist, gehören:
- gute Programmstruktur (wie einfach ist das Programm zu verstehen und zu erweitern, um neue Rollen zu unterstützen)
- Bereitstellung für Mehrere Benutzer und gleichzeitiger Datenbankzugriff und -bearbeitung (um Datenbanksperrung, Zugriffsverweigerung, Beschädigung oder Datenverlust zu vermeiden)
- Sicherheitsbestimmungen für Benutzerzugriff und Datenbankintegrität
- können als ausgeführt werden Verteilte Anwendung auf mehreren Servern und Datenbanken über mehrere Zeitzonen
- Sicherung, Korrektur und Wiederherstellung von Datenbanken
- Sprach- und Kulturbestimmungen
- Bereitstellung für die Kommunikation mit Dritten Anwendungen entweder durch Bereitstellung einer gut verwalteten Programmschnittstelle oder durch Abonnieren von Industriestandards
- Ressourcennutzung und Hardware- / Betriebssystemabhängigkeiten
- Echtzeitleistung
Es gibt andere Faktoren, die von bestimmten Geschäftsbereichen abhängen, aber diese Faktoren werden routinemäßig zu einem i ssue, wenn ein Unternehmen versucht, seine Anwendungen zu „skalieren“ oder zu „erweitern“.
Die Skalierbarkeit leidet normalerweise, wenn entweder / oder:
- das Programm von jemandem konzipiert und geschrieben wird, der dies nicht tut Fachleute in den Disziplinen der Anwendungsentwicklung
- Die Verantwortung für das Schreiben eines Programms wird mit einer Spezifikation vergeben, die nicht alle Faktoren berücksichtigt, die den zukünftigen Anforderungen des Kunden entsprechen (eine schwache Spezifikation führt häufig zu nicht skalierbaren Lösungen )
- Es gibt kein Versehen durch einen erfahrenen Softwareentwickler, der die Geschäftsdomäne versteht.
Ein einfaches Beispiel für eine Skalierungsstörung ist ein Lagerinventarprogramm, an dem ich gearbeitet habe 1990 (ish).
Das ursprüngliche Programm wurde für einen Benutzer, einen Server und nächtliche Sicherungen geschrieben (während dieser Zeit war das System nicht verfügbar). In aufeinanderfolgender Reihenfolge wollte der Kunde:
- die Anzahl der Benutzer von 1 auf 50+ erhöhen und verschiedene Rollen und Zugriffsrechte für jeden Benutzer festlegen.
- Erweitern Sie die Anwendung, um mehrere Lager innerhalb desselben Landes zu unterstützen.
- Erweitern Sie die Anwendung, um neue Offshore-Lager zu berücksichtigen, die die Unterstützung mehrerer Zeitzonen, Sprachen, gesetzlicher Standards und Betriebsverfahren implizieren.
Das ursprüngliche Programm war noch nie für eine so hohe Skalierungsanforderung strukturiert worden. Die Datenbank litt unter häufigen „tödlichen Umarmungen“, Datenverlust und inakzeptablen Ausfallzeiten aufgrund von Datenbanksicherungsverfahren. Die Anwendung sah keine „Offline“ -Dateneingabe vor und wurde natürlich nicht als fehlertolerant gegenüber Kommunikationsproblemen geschrieben. Der Versuch, das Programm zu aktualisieren, erwies sich ebenfalls als Albtraum – im Grunde kam das gesamte System für die mehreren Stunden zum Stillstand, die für die Installation eines globalen Updates erforderlich waren.
Bevor wir als Berater das Programm in Anspruch nahmen wurde vom ursprünglichen Codierer (Singular) „gepatcht“, der anschließend beendet wurde und unbequem verschwunden war.
Das Patchen verschleierte die Struktur und Funktionalität des Codes – ich bezweifle jedoch, dass das Programm jemals ordnungsgemäß strukturiert oder dokumentiert wurde – Niemand hatte genug gewusst, um das Risiko zu erkennen, das dies für das Unternehmen darstellte! Der Code wurde in C ++ geschrieben und verwendete Byte-Arrays anstelle von MBCS-Zeichenfolgen (Multi-Byte Character Set) nach Industriestandard. Sie haben die allgemeine Vorstellung!
Wir wurden aufgefordert, das Problem zu beheben Probleme. Die Wahrheit ist, dass es einfacher und billiger gewesen wäre, den Kunden auf ein kommerzielles Bestandsverwaltungsprodukt umzustellen, obwohl die Finanzmodellierung tief in das System eingebettet war und niemand genau genug verstanden hat, wie es funktioniert, diese Funktionen auf ein kommerzielles zu übertragen Programm (zumindest ohne signifikantes Risiko).
Trotz des Hinweises auf kostengünstigere Lösungen mussten wir das Produkt letztendlich zurückentwickeln und die Anwendung komplett neu schreiben. Es dauerte 2 Systemdesigner, 4 leitende Ingenieure, 20 Softwareentwickler, 5 Validierungs- und 2 Werkzeug- / Methodikingenieure, um das Produkt neu zu schreiben – und fast 2 Jahre verstrichene Zeit, um die Anwendung in die allgemeine Version zu bringen.
Also Wie erreichen Sie Skalierbarkeit?
- Stellen Sie zunächst sicher, dass Sie Ihre Skalierbarkeitsanforderungen in die Produktspezifikation geschrieben haben. Im Allgemeinen führen Zeitdruck und niedrigste Kosten zu Opfern in Bereichen, die in der Spezifikation nicht ordnungsgemäß vorgeschrieben wurden.
- Arbeiten Sie mit Domain-Experten zusammen, die Ihnen bei der Entwicklung einer Struktur helfen können, die (wahrscheinliche) zukünftige Anforderungen erfüllt.
- Nutzen Sie Entwurfsmuster, Bibliotheken, 4GL / AI-Anwendungen und Architekturen, die von Grund auf formuliert wurden, um Skalierbarkeitsprobleme zu vermeiden (von denen viele aus bitteren Erfahrungen entwickelt wurden).
- Informieren Sie sich über alle wichtigen Bereiche wie verteilte, fehlertolerante Datenbanken für hochkonkurrierende Anwendungen, eingebettete Sicherheitsarchitekturen, Datenbankreplikation, Cloud-Verarbeitung usw.
- Stellen Sie sicher, dass Sie Mitarbeiter einsetzen erfahrene, erfahrene Ingenieure in Schlüsselpositionen. Ich würde sagen, dass fast 50\% der von uns durchgeführten Rettungsprojekte die Folge unerfahrener leitender Ingenieure und Systemdesigner waren. Der Rest war auf Managementfehler oder unsachgemäße Kommunikation zwischen Engineering und Kunden zurückzuführen.
Sie haben es also. Heutzutage gibt es wirklich keine Entschuldigung für Skalierbarkeitsprobleme in mittelgroßen bis großen Unternehmen. Viele Unternehmen beginnen jedoch mit nur einer Handvoll Leuten, die Lösungen so gut wie möglich hacken. Dann wächst das Unternehmen und die Skalierbarkeit wird eher zum Albtraum als zum geordneten Fortschritt!
Antwort
Skalierbarkeit in der Softwareentwicklung bezieht sich normalerweise darauf, Softwaresysteme so zu entwerfen, dass Wenn die Anzahl der Benutzer des Systems zunimmt (selbst um das 100-fache oder mehr), funktioniert die Software weiterhin mit vergleichbaren Antwortzeiten. Die nächste Frage lautet nun: „Wie wird dies erreicht?“
Standalone-Desktop-Software (z. B. Spiele) ist immer zu 100\% skalierbar, da jeder Benutzer einen eigenen Computer erhält. Dies ist eine triviale Form der Skalierbarkeit.
Client-Server- und webbasierte Softwaresysteme hängen jedoch von Servern ab, bei denen es sich um Computer handelt die Dienste für mehrere Benutzer bereitstellen. Es sollte offensichtlich sein, dass ein bestimmter Server nur eine begrenzte Anzahl gleichzeitiger Benutzer verarbeiten kann.
Es gibt zwei allgemeine Techniken, mit denen ein System über das hinaus skalieren kann, was ein einzelner Server verarbeiten kann. Hoch skalierbare Systeme kombinieren beide Techniken.
Das erste ist die Aufteilung der Funktionalität in verschiedene Teile. Eine häufige Aufteilung besteht darin, einen separaten Server zum Hosten der Datenbank zu haben, auf die sich das System stützt (es gibt fast immer eine Datenbank, in der persistente Informationen gespeichert sind). Der Datenbankserver verfügt über eine große Menge an Speicher und sehr schnelle Festplatten oder RAID-Arrays, während der andere Servertyp weniger Speicher und relativ wenig Speicherplatz benötigt.
Dies kann auf eine n-Tier-Architektur erweitert werden. Dabei werden immer mehr Funktionen (und Daten für Datenbanken) auf verschiedene Prozesse aufgeteilt. Wenn die Last zunimmt, werden die Prozesse auf separate Server migriert, um die Leistung aufrechtzuerhalten. Beachten Sie, dass sich alle diese Server physisch in derselben Serverfarm befinden und über sehr schnelle Netzwerkverbindungen verbunden sind.
Die andere für die Skalierbarkeit verwendete Technik ist die -Replikation . Dies bedeutet, dass beispielsweise mehrere Webserver verwendet werden und jeder Benutzer nur mit einem von ihnen verbunden ist. Um mehr Benutzer zu unterstützen, benötigt das System nur mehr Hardware (in diesem Beispiel Webserversysteme). Datenbanken können auch repliziert werden, sodass mehrere Datenbankserver Klone der Datenbank unterstützen können (es ist manchmal schwierig, die verschiedenen Kopien der Datenbank auf dem neuesten Stand zu halten, aber dba hat dieses Problem seit Jahren behandelt). Für größere Systeme gibt es Datenbanken, die skalierbar sind und ihre Daten auf mehrere Server verteilen.
A2A: „Was versteht man unter„ Skalierbarkeit “in der Softwareentwicklung?“