Skalierbarkeit ist die wünschenswerte Eigenschaft eines Systems, Netzwerks oder Prozesses, die auf seine Fähigkeit hinweist, zu reagieren und sich anzupassen, ohne an Qualität zu verlieren, oder das kontinuierliche Wachstum der Arbeit auf flüssige Weise zu steuern, um darauf vorbereitet zu sein, größer zu werden, ohne an Qualität zu verlieren die angebotenen Dienstleistungen.
Man könnte sagen, wie groß die Kapazität unseres Systems ist, um eine größere Arbeitslast mit Modifikationen oder Erweiterungen zu unterstützen, die in Bezug auf Kosten, Zeit und Komplexität angemessen sind.
Im Allgemeinen können wir über vertikale und horizontale Skalierung oder eine Kombination von beiden sprechen.
Vertikale Skalierung
Es besteht im Wesentlichen darin, die Kapazität eines oder mehrerer konkreter Elemente unserer Architektur zu erhöhen, beispielsweise den Speicher unseres zentralen Servers zu erweitern oder die CPUs durch andere mit höherer Geschwindigkeit zu ersetzen. Zusammenfassend lässt sich sagen, dass die Serverfähigkeiten erhöht werden, was bei der Verwendung von Virtualisierung häufig vorkommt und dass zu diesem Zeitpunkt auf dem Server 30% des Arbeitsspeichers zur Verfügung stehen.
Horizontale Skalierung
Es ist das, was wir im Tutorial beschreiben werden. Es basiert auf der Erhöhung der Anzahl der Knoten, die dieselbe Aufgabe ausführen, unter Verwendung verschiedener Planungstypen. Wenn wir beispielsweise einen gesättigten Webserver haben, fügen wir einen weiteren hinzu, um die Last auszugleichen.
Wir werden über Architekturen sprechen, die mit Linux-Systemen angewendet werden können. Mit Open-Source-Tools werden wir von den grundlegendsten bis hin zu hochentwickelten Architekturen mit horizontaler Skalierbarkeit und Ausfallsicherheit wechseln. Alle diese Architekturen können in jedem PaaS oder mit einer eigenen Infrastruktur angewendet werden.
1. Einstufige Architektur
Es ist das einfachste von allen, bei dem es nur einen Server mit Apache und MySQL gibt, auf den remote zugegriffen werden kann. Es ist sehr häufig bei Seiten mit wenig Spielraum für Besuche oder Testumgebungen, es bietet keinen Spielraum für Fehlertoleranzen und es ist schwierig, es für horizontales Wachstum zu verwenden.
2. Architektur auf zwei Ebenen
Dieses Mal haben wir die Datenbank vom Webserver getrennt, um ein wenig Fehlertoleranz zu gewährleisten. Auf diese Weise kann der Webserver bei einem Datenbankfehler statischen Inhalt anbieten, der nicht von der Datenbank abhängt. Und falls der Webserver ausfällt, können wir trotzdem auf die Informationen zugreifen, indem wir einen neuen Webserver erneut auslösen. Das Design weist mehrere Mängel auf, da es sich nicht um ein sehr skalierbares Design handelt.
3. Dreistufige Architektur
Dieses Mal haben wir begonnen, einen Load Balancer zu verwenden, der alle Anforderungen von Benutzern empfängt. Dieses Mal bieten wir ein skalierbareres Design an, damit wir bei steigender Auslastung mehr Webserver hinzufügen und skalieren können. Wir können sogar die automatische Skalierung anwenden, sodass Webserver ab einer bestimmten Auslastung oder zu Spitzenzeiten automatisch hinzugefügt werden. Das Problem bei diesem Design ist, dass wir unsere Datenbank sättigen können.
4. Architektur auf vier Ebenen
Jetzt verwenden wir einen Load Balancer und einen Memcached, um das System skalierbarer zu machen. Mit diesem Design können wir nicht nur Fehlertoleranz bieten, sondern auch so viele Datenbank- und Webserver wie nötig hinzufügen. Mit CASSANDRA können wir die Last zwischen Datenbanken aufteilen, indem wir eine Multinode-Implementierung anbieten. Dieses Design ist viel komplexer, aber ich füge viel mehr Fehlertoleranz und die Fähigkeit hinzu, alle seine Ebenen zu skalieren.
5. Fünf-Ebenen-Architektur
Der Inhalt einer Webseite kann in statische und dynamische unterteilt werden. Zum Beispiel teilen wir die Webebene in einen Apache-Server und einen anderen mit JAVA-Anwendungen auf, auf denen Jetty oder JBoss ausgeführt wird. Apache bietet statischen Inhalt an, während der Anwendungsserver sich um den dynamischen oder generierten Inhalt kümmert. Ein Beispiel hierfür kann der FAQ-Bereich einer Support-Website sein, da rein statische Inhalte von APACHE / NGINX verarbeitet werden können.
6. Sechsstufige Architektur
Wir können etwas eleganter sein und ein Content Delivery Network (CDN) oder das, was in AWS als Amazon CloudFront CDN bezeichnet wird , hinzufügen. Beispielsweise haben wir eine E-Learning-Website und unsere Benutzer laden die PDF-Handbücher oder -Videos von herunter unsere Website Wir können die gesamte Bandbreite für Downloads einsparen, indem wir sie von einem CDN anbieten, der sich darum kümmert. Der Rest des Webs kann auf unserer Infrastruktur ausgeführt werden.