Gründe für das NICHT-Hochskalieren vs. -out?

7

Als Programmierer mache ich alle paar Jahre revolutionäre Erkenntnisse. Ich bin entweder vor der Kurve oder dahinter um etwa π in der Phase. Eine harte Lektion, die ich gelernt habe, war, dass horizontale Skalierung ist nicht immer besser, sehr oft sind die größten Performance-Gewinne sind, wenn wir umgruppiert und verkalkt.

Welche Gründe haben Sie für die Skalierung vs. up? Preis, Leistung, Vision, geplante Nutzung? Wenn ja, wie hat das für Sie funktioniert?

Wir haben einmal auf mehrere hundert Knoten skaliert, die würde serialisiert und Cache zu jedem Knoten notwendigen Daten und Mathematik Prozesse auf den Aufzeichnungen führen. Viele, viele Milliarden Datensätze mussten (über) analysiert werden. Es war der perfekte geschäftliche und technische Fall, um Scale-out einzusetzen. Wir haben weiter optimiert, bis wir rund 24 Stunden Daten in 26 Stunden Wallclock verarbeitet haben . Wirklich lange Geschichte kurz, wir gemietet eine gigantische (für die Zeit) IBM pSeries, legte Oracle Enterprise Sie darauf indiziert unsere Daten und am Ende Verarbeitung die gleichen 24 Stunden Daten in etwa 6 Stunden . Revolution für mich.

So viele Unternehmenssysteme sind OLTP und die Daten werden nicht shard'd, aber der Wunsch vieler ist Cluster oder Scale-out. Ist dies eine Reaktion auf neue Techniken oder wahrgenommene Leistung?

Sind Anwendungen heute im Allgemeinen oder unsere Programmiermatrizen besser geeignet für die Skalierung? Sollen wir / sollen wir diesen Trend in Zukunft immer berücksichtigen?

    
Jé Queue 02.11.2009, 22:24
quelle

4 Antworten

3

Nicht überraschend, es hängt alles von Ihrem Problem ab. Wenn Sie es leicht in Unterprobleme partitionieren können, die nicht viel kommunizieren, gibt die Skalierung triviale Beschleunigungen. Zum Beispiel kann die Suche nach einem Wort in 1B-Webseiten von einer Maschine, die 1B-Seiten durchsucht, oder von 1M-Maschinen, die jeweils 1000 Seiten durchführen, ohne einen signifikanten Effizienzverlust (also mit einer 1.000.000-fachen Beschleunigung) erfolgen. Dies wird als "peinlich parallel" bezeichnet.

Andere Algorithmen erfordern jedoch eine viel intensivere Kommunikation zwischen den Unterteilen. Ihr Beispiel, das eine Kreuzanalyse erfordert, ist das perfekte Beispiel dafür, dass Kommunikation die Leistungsgewinne beim Hinzufügen weiterer Felder oft übertönen kann. In diesen Fällen sollten Sie die Kommunikation in einer (größeren) Box halten und über Highspeed-Interconnects gehen, anstatt etwas, das so üblich ist wie (10-) Gig-E.

Natürlich ist das eine ziemlich theoretische Sichtweise. Andere Faktoren, wie I / O, Zuverlässigkeit, einfache Programmierung (ein großer Shared-Memory-Rechner gibt normalerweise weniger Kopfschmerzen als ein Cluster) können ebenfalls einen großen Einfluss haben.

Schließlich hat der Cluster / Grid-Ansatz in letzter Zeit aufgrund der (oft extremen) Kostenvorteile der Skalierung mit billiger Standardhardware viel mehr (algorithmische) Forschung angezogen. Dies führt dazu, dass neue Wege der Parallelisierung entwickelt wurden, die die Kommunikation minimieren und somit viel besser auf einem Cluster funktionieren - während allgemeines Wissen diktierte, dass diese Art von Algorithmen nur effektiv auf großen Eisenmaschinen laufen konnte ...

    
Wim 02.11.2009, 22:47
quelle
6

Wegen der Skalierung

  • Ist letztlich begrenzt durch die Größe der Box, die Sie tatsächlich kaufen können
  • kann extrem kostenineffektiv werden, z.B. eine Maschine mit 128 Kernen und 128G RAM ist erheblich teurer als 16 mit 8 Kernen und je 8G RAM.
  • Manche Dinge skalieren nicht gut - wie beispielsweise IO-Leseoperationen.
  • Durch die Skalierung können Sie, wenn Ihre Architektur stimmt, auch eine hohe Verfügbarkeit erreichen. Eine 128-Kern-, 128G-Ram-Maschine ist sehr teuer, aber eine zweite redundante ist erpresserisch.

Und auch in gewissem Maße, denn genau das macht Google.

    
MarkR 02.11.2009 22:30
quelle
6

Das Skalieren ist am besten für peinlich parallele Probleme. Es braucht etwas Arbeit, aber eine Reihe von Web-Services passen in diese Kategorie (also die aktuelle Popularität). Ansonsten stößt man auf Amdahl'sches Gesetz , was dann bedeutet, dass man schneller werden muss, um nicht aufzusteigen. Ich vermute, dass du auf dieses Problem gestoßen bist. Auch IO-gebundene Operationen tendieren dazu, die Skalierung weitgehend aufzuheben, da das Warten auf IO den Prozentsatz erhöht, der parallelisiert werden kann.

    
Kathy Van Stone 02.11.2009 22:52
quelle
5

Der Blog-Beitrag Scaling Up vs. Scaling Out: Versteckte Kosten von Jeff Atwood hat einige interessante Punkte zu berücksichtigen, wie Software-Lizenzierung und Stromkosten.

    
Daniel Ballinger 02.11.2009 23:02
quelle

Tags und Links