Obwohl ich immer noch begeistert von den S7000 Unified Storage Systemen von Sun (sorry, Oracle) bin, gibt es doch zumindest einen Punkt, der mich in den Planungen für den Einsatz desselben sehr schmerzt.
Das Storage wird aus relativ billigen SATA Festplatten mit 1TB Grösse aufgebaut. Im Wesentlichen handelt es sich dabei um die selben Komponenten, die auch in PCs verbaut werden. Das ist ein immenser Kostenvorteil gegenüber anderen Storages mit SAS, SCSI oder sogar Fibre Channel Festplatten. Um die viel geringere Performance ( ein gutes Beispiel findet sich in diesem Blog, wo rechnerisch gezeigt wird, dass eine übliche SATA Platte auf ca. 79 iops kommt, während eine 73GB SAS Disk 140.8 iops bringt - anhand zweier "handelsüblicher" Beispiele ) auszugleichen wird ein S7000 ( wie unsere X7410 ) auf der einen Seite mit sehr vielen Platten bestückt und vor allem mit einem L2ARC ausgestattet, der die Performance massiv erhöht.
Der L2ARC ist, sehr vereinfacht ausgedrückt, ein zweiter Zwischenspeicher, bestehend aus leseoptimierten SSDs. Werden Daten von den Disken einer X7410 angefordert, wird erst überprüft, ob die Daten nicht bereits im RAM der Maschine liegen (wo zuletzt verwendete Daten vorgehalten werden). Wenn sie da nicht sind, wird der L2ARC befragt und erst wenn sie auch da nicht zu finden sind, werden sie von den Disken geholt und natürlich für spätere erneute Verwendung in RAM und/oder L2ARC abgelegt. Dabei ist natürlich der Ram am kleinsten und schnellsten, der L2ARC mittendrin und die Platten sehr gross und sehr langsam.
Wie Marcelo Leal überlegt macht es Sinn, den L2ARC sogar redundant auszulegen. Wenn eines dieser Devices verloren geht, sind zwar keine Daten verloren, da das Storage die Daten einfach nochmal von den Festplatten liest. Der daraus resultierende Performanceverlust könnte aber so massiv sein, dass diese Auswirkung nicht verkraftbar wäre. Deshalb redundaten L2ARC Devices, um einen Ausfall in jedem Fall zu verhindern. Ob das wirklich so ist und wie das umgangen werden könnte, wird gerade im oben genannten Blog Posting diskutiert. Auf jeden Fall jedoch haben die grösseren S7000 Systeme (die kleinen haben gar keinen L2ARC) das Problem, dass die L2ARC Devices in den Heads und nicht etwa mit den Platten in den JBODs verbaut sind. Sollte also ein Pool aus Festplatten im Failoverfall an den anderen Head übergeben werden, verliert er automatisch alle L2ARC Devices. Hier geht es nicht nur darum, dass der Cache etwa wieder aufgewärmt werden müsste, sondern er steht erst gar nicht zur Verfügung!
Dass ich im Zusammenhang mit Performance dauernd von iops und nicht von Durchsatz schreibe, könnte dem erfahrenen Leser vermuten lassen, dass wir Überlegungen anstellen, Datenbanken auf dem X7410 abzulegen. Hier würde uns ein Einbruch in der Performance massiv treffen. Das ist schade, denn die S7000 sind durch ihr Design ausserordentlich performante Storages, auch wenn sie nicht immer so vermarktet werden. Sie spüren jedoch viel deutlicher als andere Systeme, wenn z.B. ein Knoten eines Clusters ausfällt, was den Einsatz für performancehungrige Anwendungen wieder fraglich macht. Was schade ist, denn, solange kein Failover eintritt, hängt die X7410 so ziemlich alles ab, was wir an Storage angesehen haben (ausser vielleicht hochperformante Systeme in ganz, ganz anderen Preisklassen)
Eventuell würde es helfen, die ReadZillas (der Spitzname der leseoptimierten SSDs, die den L2ARC bilden) ebenso wie die LogZillas (schreibeoptimierte SSDs, die den ZIL, also den Schreibcache bilden) in die JBODs zu verbauen, damit sie beim Failover mitgenommen werden können? Derzeit wäre das nicht möglich, aber eventuell könnte das eine Lösung für zukünftige Systeme sein.
Neuen Kommentar schreiben