Was ist Skalierbarkeit?
- 6 Minuten
In der Geschäftswelt kann Wachstum von Vorteil sein. Wenn das Wachstum jedoch zu schnell erfolgt und Sie nicht ausreichend darauf vorbereitet sind, kann das Wachstum Probleme erzeugen. Eines dieser Probleme ist die Auswirkung des Wachstums auf die Zuverlässigkeit von Anwendungen und Diensten, die nicht darauf ausgelegt waren, einen großen Anstieg des Datenverkehrs zu bewältigen.
Für Ihre Kunden und Benutzer ist ein Ausfall ein Ausfall. Sie wissen nicht, ob sie aufgrund von Fehlercode nicht auf Ihre Website zugreifen können oder weil zu viele andere Personen versuchen, Ihre perfekt codierte Website gleichzeitig zu verwenden.
Skalierbarkeit ist die Fähigkeit, sich an erhöhte Anforderungen oder sich ändernde Anforderungen anzupassen. Ihre Anwendungen und Dienste müssen in der Lage sein, eine größere Anzahl von Arbeitsauslastungen zu bewältigen, um wachstumsfähig zu sein. Skalierbare Anwendungen können eine wachsende Anzahl von Anforderungen im Laufe der Zeit verarbeiten, ohne dass sich dies negativ auf die Verfügbarkeit oder Leistung auswirkt.
In dieser Lektion erfahren Sie mehr über die Beziehung zwischen Skalierbarkeit und Zuverlässigkeit, die Bedeutung der Kapazitätsplanung bei der Skalierbarkeit und überprüfen kurz einige grundlegende Konzepte und Begriffe im Zusammenhang mit der Skalierung.
Skalierbarkeits-/Zuverlässigkeitsbeziehung
Die gute Nachricht ist, dass Ihre App nicht nur skalierbarer, sondern auch zuverlässiger wird. Wenn das System beispielsweise automatisch skaliert wird, führt ein Komponentenfehler auf einer einzelnen VM dazu, dass der Dienst für die automatische Skalierung eine andere Instanz bereitstellt, um die Mindestanforderungen an die VM-Anzahl zu erfüllen. Ihr System wird zuverlässiger. In einem anderen Beispiel verwenden Sie einen Dienst auf höherer Ebene wie Azure Storage, der inhärent skalierbar ist. Wenn Sie ein Speicherproblem haben, ist der Dienst so aufgebaut, dass er zuverlässig ist, sodass Ihre Daten repliziert werden.
Hier ist eine Analogie: Stellen Sie sich die Rampen vor, die Sie oft außerhalb von Gebäuden sehen, die ursprünglich für die Aufnahme von Personen in Rollstühlen konzipiert wurden. Sie dienen diesem Zweck. Aber sie werden auch von Eltern mit Babys in Kinderwagen oder Wagen oder von kleinen Kindern verwendet, für die die Treppenstufen zu tief oder hoch sind. Diese Nutzung ist ein sekundärer Vorteil.
Zuverlässigkeit ist häufig ein sekundärer Vorteil der Skalierbarkeit. Wenn Sie Ihre Systeme so gestalten, dass sie skalierbar sind, sind sie wahrscheinlich auch zuverlässiger.
Skalierbarkeit und Kapazitätsplanung
Die Kapazitätsplanung umfasst die Ermittlung der Ressourcen, die Sie benötigen, um sowohl aktuelle als auch zukünftige Anforderungen zu erfüllen. Sie planen diese Planung, indem Sie Ihre aktuelle Ressourcennutzung analysieren und dann auf zukünftiges Wachstum projizieren.
Um den Kapazitätsbedarf in Zukunft zu schätzen, sollten Sie folgende Faktoren berücksichtigen:
- Erwartetes Geschäftswachstum
- Periodische Schwankungen (saisonal usw.)
- Anwendungseinschränkungen
- Identifizierung von Engpässen und Begrenzungsfaktoren
Sie müssen auch Ziele auf Serviceebene festlegen, damit Sie einen Kapazitätsverwaltungsplan erstellen können, der diese Ziele zuverlässig erfüllt oder überschreitet, während sich die Arbeitsauslastung und die Umgebung ändern.
Die Kapazitätsplanung ist ein iterativer Prozess. In diesem Modul erfahren Sie, wie Sie Ressourcenanforderungen für Anwendungskomponenten zuordnen.
Konzepte und Terminologie
Bevor Sie die Konzepte und Strategien, denen Sie in diesem Modul begegnen, vollständig verstehen können, benötigen Sie einige grundlegende Kenntnisse über grundlegende Konzepte und Begriffe im Zusammenhang mit der Skalierung.
- Aufskalieren: Eine Komponente wird größer, um eine erhöhte Arbeitsauslastung zu bewältigen. Auch als vertikale Skalierung bezeichnet.
- Skalieren: Hinzufügen weiterer Komponenten oder Ressourcen zum Verteilen der Last über eine verteilte Architektur. Verwenden Sie z. B. eine einfache Architektur mit mehreren Back-Ends hinter einem Satz von Front-Ends. Da sich die Last erhöht, fügen wir weitere Back-End-Server (und Front-End-Server) hinzu, um sie zu verarbeiten. Auch als horizontale Skalierung bezeichnet.
- Manuelle Skalierung: Menschliches Handeln ist erforderlich, um die Menge der Ressourcen zu erhöhen.
- Automatische Skalierung: Das System passt die Menge der Ressourcen basierend auf der Last automatisch an. Um klar zu sein, wird der Betrag sowohl auf der Grundlage einer erhöhten als auch einer verringerten Last nach oben und unten angepasst.
- DIY-Skalierung: Do-it-yourself-Skalierung, wobei Sie die automatische Skalierung konfigurieren müssen.
- Inhärenter Maßstab: Dienste, die entwickelt wurden, um skalierbar zu sein und diese Skalierung für Sie hinter den Kulissen zu verarbeiten, ohne dass Sie daran beteiligt sind. Aus Ihrer Sicht sehen sie fast unendlich skalierbar aus, da Sie einfach mehr Ressourcen verbrauchen können, ohne sie manuell bereitstellen zu müssen.
Tailwind Traders-Architektur
In diesem Modul verwenden wir eine Beispielarchitektur aus einem fiktiven Hardwareunternehmen namens Tailwind Traders. Ihre E-Commerce-Plattform sieht wie folgt aus:
Dieses Diagramm ist auf den ersten Blick ziemlich komplex, lassen Sie uns also durchgehen. Die Website verfügt über ein Front-End. Das ist, mit wem Sie sprechen, wenn Sie tailwindtraders.com besuchen.
Das Front-End spricht mit einer Reihe von Back-End-Diensten. Diese Back-End-Dienste umfassen die allgemeinen Artikel wie z. B. einen Coupon-Service, einen Einkaufswagendienst, einen Bestandsdienst usw. Sie werden alle im Azure Kubernetes-Dienst ausgeführt. Es gibt andere Teile und Technologien, die mit dieser Anwendung spielen. Alles, was Sie sich konzentrieren müssen, ist das Front-End und die Back-End-Dienste, die auf Kubernetes ausgeführt werden.
Einzelne Fehlerpunkte
Nachdem Sie nun die gesamte Architektur gesehen haben, nehmen wir uns einen Moment Zeit, um die kritischen Ausfallpunkte zu untersuchen und die Bereiche zu identifizieren, auf die wir achten sollten, wenn wir an Skalierung denken.
Alle diese Dienste sind ein einzelner Fehlerpunkt – sie sind nicht für Resilienz oder skalierungsbezogener Art aufgebaut. Wenn einer von ihnen überlastet wird, wird es wahrscheinlich abstürzen, und es gibt keine einfache Möglichkeit, dies in diesem Moment zu lösen.
Später in diesem Modul befassen wir uns mit anderen Möglichkeiten, den Thesendienst zu entwerfen, um skalierbarer und zuverlässiger zu sein.
Vorab bereitgestellte Kapazität
Sehen wir uns ein anderes Problem an, das sich als problematisch erweisen könnte. Im Folgenden sind die Dienste/Komponenten aufgeführt, die für die Vorabbereitstellung der Kapazität erforderlich sind:
Mit Cosmos DB stellen wir beispielsweise den Durchsatz vorab bereit. Wenn wir diese Grenzwerte überschreiten, werden wir mit der Rückgabe von Fehlermeldungen an unsere Kunden beginnen. Mit Azure AI-Diensten wählen wir die Ebene aus, und diese Stufe verfügt über eine maximale Anzahl von Anforderungen pro Sekunde. Bei Erreichen einer dieser Grenzwerte werden die Clients gedrosselt.
Wird ein bedeutender Anstieg des Datenverkehrs, wie zum Beispiel der Start eines neuen Produkts, dazu führen, dass wir diese Grenzen erreichen? Im Moment wissen wir nicht. Dies ist eine weitere, die wir später in diesem Modul überprüfen.
Kosten
Auch wenn wir die Dinge richtig machen, müssen wir immer noch Wachstum planen. Hier sind die Pay-per-Use-Dienste:
Hier verwenden wir Azure Logic Apps und Azure Functions, die beide Beispiele für serverlose Technologie sind. Diese Dienste werden automatisch skaliert, und wir zahlen pro Anfrage. Ihre Rechnung wächst, wie Ihre Kundenbasis tut. Wir sollten uns zumindest der Auswirkungen bevorstehender Ereignisse wie einer Produkteinführung auf unsere Cloud-Ausgaben bewusst sein. Wir arbeiten daran, unsere Cloud-Ausgaben später in diesem Modul zu verstehen und vorherzusagen.