Wird ein aktuelles System entworfen, sollte man die Eigenschaft der Skalierbarkeit nicht unterschätzen. Hier ein paar Gedanken von mir, warum Skalierbarkeit nicht gleich Skalierbarkeit ist.

Prinzipiell wird zwischen der sogenannten horizontalen und vertikalen Skalierbarkeit unterschieden. Auf Wikipedia findet sich dazu ein recht trockener Artikel, der neben weiteren Aspekten auch das horizontale und vertikale Skalieren erklärt. Vereinfacht ausgedrückt bedeutet das horizontale Skalieren einfach nur dass die Hardware auf der das System läuft leistungsstärker wird. Das kann zum Beispiel geschehen, in dem mehr Speicher eingebaut wird, oder auch mehr CPUs oder mehr Festplattenkapazität oder eben jeweils schnellere Komponenten. Das kann auch den Austausch der gesamten Hardware bedeuten. Damit wird auch klar, warum eine horizontale Skalierung eher nicht das Ziel sein sollte bei der Architektur eines neuen Systems.

Die horizontale Skalierung ist immer begrenzt durch die aktuell verfügbare schnellste Hardware. Besonders leistungsstarke Hardware ist oft auch besonders hochpreisig, auch weil Komponenten zum Einsatz kommen, die nicht in der gleichen Stückzahl hergestellt werden wie ‘Standard’-Hardware. Der Ausbau existierender Hardware ist immer begrenzt, eine Maschine kann nur max. x CPUs und x GB RAM etc. aufnehmen.

Natürlich kommt mit der Weiterentwicklung der Hardware auch immer eine noch leistungsstärkere Maschine auf den Markt, die man zur weiteren Skalierung einsetzen kann. Am Beispiel eines HP Superdome, kann man das ganz gut nachvollziehen. Allerdings denke ich, dass es sich dabei eher um eine Migration als eine Skalierung handelt. Mit dem Austausch der Maschinenhardware geht auch immer eine Migration von Daten und Software einher, die je nach Umständen signifikante Zeit und Aufwände in bedeutet. Gerade bei Systemen die Echtzeitfähig sein müssen, kann eine Unterbrechung des Betriebs für eine solche Migration ein echtes Problem bedeuten.

Es ist sicherlich kein Zufall, dass viele neue Systeme horizontal skalierbar sind. Auch wenn die Behauptung, dass horizontale Skalierung unbegrenzt ist, aus meiner Sicht unwahr ist, gilt aber mit Sicherheit, dass die Grenzen der Skalierbarkeit wesentlich weiter nach hinten verschoben werden. Es ist eben einfacher neue Maschinen hinzuzufügen als existierende Maschinen zu ersetzen. Die hinzugefügten Maschinen können mit der Zeit auch immer leistungsstärker werden, man profitiert also auch hier von der Weiterentwicklung der Hardware.

Ein horizontal skalierbares System kann durch das Hinzufügen von weiteren Maschinen schnell eine enorme Anzahl von Maschinen umfassen. Damit ist es auch klar, dass das nur funktionieren kann, wenn der Ausfall einzelner Maschinen keinen Systemausfall bedeutet. Je mehr Maschinen genutzt werden, desto wahrscheinlicher ist ein Ausfall. Unabhängig von der Zuverlässigkeit der einzelnen Maschinen ist die Wahrscheinlichkeit, dass eine von 100 Maschinen ausfällt 100mal größer als das eine einzelne Maschine ausfällt. Ein wirklich skalierbares System muss also einfach erweiterbar sein und außerdem fehlertolerant sein. Sinnvollerweise kann man neue Maschinen im laufenden Betrieb hinzufügen und auch alte Maschinen im laufenden Betrieb deaktivieren und ausschalten.

Es wäre allerdings ein Trugschluß einfach anzunehmen, dass alle Systeme bzw. Konzepte die horizontal skalierbar sind einfach gegeneinander austauschbar sind. Um sich die wichtigsten Unterschiede vorstellen zu können ist das Beispiel einer Website hilfreich. Der eigentliche Webserver muss mit der Anzahl der Seitenaufrufe skalieren. Im Extremfall könnte man für jeden Aufruf einen eigenen Server starten und die Performance bliebe unabhängig von der Anzahl der Aufrufe konstant. Ein DataLake zum Beispiel muss allerdings mit der Menge der Daten skalieren, z.Bsp damit das Suchen bestimmter Daten nicht mit steigebder Datenmenge langsamer wird. Auch die Anzahl der Anwender die Daten suchen ist wichtig, aber die Anwenderzahl ist in einem DataLake meistens nicht die Hauptursache für steigenden Leistungsbedarf. Beiden Herausforderungen wird mit horizontaler Skalierung begegnet, trotzdem sind die Konzepte wie die Last parallelisiert wird unterschiedlich und nicht austauschbar.

Wirklich spannend wird das Ganze wenn man eine Datenplattform betrachtet, bei der beide Formen der Laststeigerung entstehen. Eine Datenplattform muss schnell große, steigende Datenmengen durchsuchen können, aber gleichzeitig auch mit steigenden Userzahlen umgehen können. Während Kubernetes-Cluster (und damit vergleichbare Cloudlösungen) sich gut eignen um mit steigenden Userzahlen bzw. Aufrufen zu skalieren, und Hadoop Cluster sich gut eignen um mit großen Datenmengen zu skalieren, braucht es für eine problemlos skalierbare Datenplattform die Möglichkeit auf beide Anforderungen hin zu skalieren. Dazu ist ein eigenes Cluster-Betriebsystem namens Mesos entstanden.

In einem der nächsten Posts werde ich ein wenig mehr über Architekturen für Ddatenplattformen und über Mesos schreiben.