In Stellenausschreibungen sehe ich immer wieder, dass der Bewerber Erfahrung mit dem Schreiben von "skalierbaren" Bewerbungen haben muss. Was macht eine Anwendung skalierbar und woher weiß ich, dass mein Code auf Millionen von Benutzern skaliert werden kann?
Ich denke, eine bessere Möglichkeit, diese Frage zu formulieren, ist: Wie kann ich meinen Code mit Blick auf die Skalierbarkeit schreiben? Damit der Code von Anfang an skalierbar ist, im Gegensatz zu einem nachträglichen Gedanken. Gibt es bestimmte Entwurfsmethoden? Oder geht es einfach darum, die richtigen Algorithmen für den Job auszuwählen?
quelle
Die Skalierbarkeit wird in Bezug auf den Durchsatz basierend auf einer Variablen gemessen. Zum Beispiel die Anzahl der Anfragen pro Sekunde bei X Benutzern. Der einfachste Weg, die Skalierbarkeit zu beschreiben, ist:
Das erste, was Sie beim Entwerfen für Skalierbarkeit verstehen müssen, ist, welche Messung für Ihre Anwendung am wichtigsten ist. Es gibt verschiedene Möglichkeiten, die Effizienz zu messen, die eine Schlüsselkomponente der Skalierbarkeit darstellt:
Es gibt mehr Effizienzmessungen, die verwendet werden können, diese sind jedoch für webbasierte Systeme oder Stapelverarbeitungssysteme üblich.
Der nächste Aspekt der Skalierbarkeit besteht darin, zu messen, was mit Ihrer Effizienz passiert, wenn die Last zunimmt. Übliche Möglichkeiten zur Erhöhung der Last sind:
Das Ziel einer skalierbaren Anwendung ist es, die Effizienz bei der Lösung des Lastproblems entweder aufrechtzuerhalten oder zu verbessern. Kurz gesagt, wenn die Antwortzeit zu lang ist, können wir einen weiteren Server hinzufügen, um die Last gleichmäßig zu verteilen? Dieser Ansatz reduziert den Arbeitsaufwand für einen Server und hält die Server aus Gründen der Effizienz an diesem "Sweet Spot" in Betrieb.
Ihre Anwendung muss speziell für die Skalierung entwickelt werden. Das bedeutet, dass Sie mit Sitzungsdaten vorsichtig sein müssen, Anforderungen an den richtigen Server weiterleiten und Engpässe reduzieren müssen, die die Skalierbarkeit der Anwendung einschränken.
quelle
Grundsätzlich möchten Sie Leistungsengpässe vermeiden, wenn Sie die Anzahl der Benutzer erhöhen und / oder einen größeren Datensatz verarbeiten und / oder Ihre Benutzeroberfläche in mehr Sprachen usw. anbieten.
Sie sehen sich im Grunde genommen Ihr Datenbankschema, Ihre Algorithmen und Ihren Softwareentwicklungsprozess an und versuchen, zukünftige Probleme vorherzusagen. Sie möchten auch die Leistungsüberwachung einrichten, um Probleme zu identifizieren, wenn sie auftreten.
Diese Tipps habe ich beim Lesen von Building Scalable Web Sites (Link zu amazon) aufgegriffen .
Hoffe das hilft!
quelle
Die einzige Möglichkeit, Anwendungen wirklich zu skalieren, besteht darin, keine Einschränkungen zu haben, die nicht (oder nur sehr teuer) weitergegeben werden können.
Ein typisches Beispiel ist, was passiert, wenn Ihnen die verfügbaren CPU-Zyklen ausgehen? Wenn Ihr Programm mehrere Kerne umfasst, können Sie es auf einer Box mit mehreren Kernen ausführen. Was passiert jedoch, wenn Sie keine größere Box mehr kaufen können? Ihre Anwendung kann einfach nicht mehr wachsen und ist daher nicht skalierbar.
Jede wirklich skalierbare Anwendung muss in der Lage sein, sich auf transparente Weise auf mehrere Computer zu verteilen, und dies ohne spürbare Beeinträchtigungen. Dies ist nicht einfach und einer der Gründe, warum Google so erfolgreich war.
quelle
Es gibt einzigartige Probleme bei der Unterstützung von Anwendungen mit großem Maßstab. Die Stellenanzeige sucht Bewerber, die in diesem Umfeld gearbeitet haben und solche Probleme lösen mussten.
Von einer High-Level-Anwendung aus werden Anwendungen skalierbar gemacht, indem ständig die Frage gestellt wird, was passieren würde, wenn dieser Code in einem sehr kurzen Zeitraum Tausende Male ausgeführt werden soll. Dies bedeutet, dass Sie Ihren Speicherbedarf verwalten, Summen und Daten zwischenspeichern und Datenquellen verwenden, die selbst skalierbar sind, usw.
quelle
Wenn Sie eine Suchfunktion erstellt haben, die bei 100 zu durchsuchenden Zeilen in der Datenbank und 10 gleichzeitig verwendeten Benutzern eine gute Leistung erbracht hat. Wie gut würde es funktionieren, wenn 100 Benutzer es gleichzeitig verwenden und 100.000 Zeilen nachschlagen müssten?
Wenn es das Gleiche tut, egal was passiert, dann ist es sehr gut. Es ist gut, wenn die Leistung proportional zur Anzahl der Benutzer / Daten ist (was bedeutet, dass 10x mehr Daten == 10x länger verarbeitet werden müssen). Wenn die Leistung umso geringer ist, je mehr Daten vorhanden sind (10x Modusdaten == 10x ^ 10 länger zu verarbeiten), ist die Skalierung nicht gut.
Meine Beispiele sollten eigentlich in Big O-Notation gezeigt werden, aber ich kenne sie derzeit nicht gut genug, um die Beispiele in Big O zu schreiben.
Sie können mehr Daten simulieren, indem Sie Dummy-Daten in Ihre Datenbank kopieren. Außerdem gibt es Tools, mit denen Sie mehr Benutzer wie Apache AB simulieren können.
quelle