Angesichts der rasanten Entwicklung des Cloud-Computings stellt die Bereitstellung von robusten und dennoch leistungsstarken Speicherkapazitäten in der Cloud eine der größten Hard- und Software-Herausforderungen dar. Mängel in diesem Bereich zählen zu den häufigsten Beschwerden bei führenden IaaS-Clouds (Infrastruktur-as-a-Service). In diesem Beitrag möchte ich die aktuell führenden Speicherkonzepte kurz skizzieren und unseren aktuellen Ansatz und die Zukunftsaussichten der Cloud-Speicherung vorstellen. Die gute Neuigkeit vorweg: Die Revolution der Datenspeicherung und des Datenzugriffs steht kurz bevor!
Wie ich in meinem letzten Beitrag zum Benchmarking von Cloud-Servern ausgeführt habe, ist Speicherleistung – zusammen mit der Netzwerkleistung – eines der wichtigsten Unterscheidunsmerkmale von IaaS-Clouds. Sie variiert stark von Cloud zu Cloud und sogar innerhalb einer Cloud im Zeitverlauf. Während die sichere und zuverlässige Verwaltung von CPU, RAM und Netzwerk weitgehend gelöst wurde, war dies bei der Bereitstellung von sicherer zuverlässiger Speicherung bisher eindeutig nicht der Fall.
Bisher mussten hier immer Kompromisse zwischen Leistung und Redundanz/Zuverlässigkeit eingegangen werden. Je redundanter eine Speicherlösung ist, desto langsamer ist sie, da jede Schreibaktion dupliziert werden muss. Beim Verzicht auf Replikation/Redundanz ist das nicht erforderlich. Zum Beispiel bietet die Speicherung in RAID1 viel höhere Leistung als in RAID5 oder RAID6. Wenn ein Laufwerk in RAID1 ausfällt, sind alle Daten auf dem verbleibenden Laufwerk gefährdet, wenn ein weiteres Laufwerk ausfällt, bis das zweite Laufwerk rekonstituiert ist (gilt auch für RAID5). Das ist mit RAID6 nicht der Fall, aber die Leistung ist unter normalen Umständen viel niedriger.
Man muss auch zwischen persistentem Cloudspeicher und vergänglicher/temporärer Speicherung unterscheiden. Bei der temporären Speicherung, die nicht für die Speicherung von kritischen Daten vorgesehen ist, reicht es aus, wenig oder keine Widerstandsfähigkeit gegen Hardware-Fehler zu haben. Für die dauerhafte Speicherung ist jedoch die Resilienz entscheidend.
Der Mythos der unfehlbaren SAN
Für die permanente Speicherung nutzen die meisten öffentlichen IaaS-Clouds eine Storage-Area-Network-Architektur (SAN). Diese Architektur hat sich als Speichermethode in Unternehmen bewährt. Moderne SANs bieten ein hohes Maß an Zuverlässigkeit und integrierter Redundanz für gespeicherte Daten und kontrollieren detailliert, wie Daten gespeichert und repliziert werden. Kurz gesagt, das moderne SAN ist eine hoch entwickelte und teure Methode zur Speicherung, die zudem sehr kompliziert und proprietär ist.
Viele moderne SANs gelten als praktisch unfehlbar. Leider hält die Realität hier oft nicht Stand. Einige der größten Ausfälle einer Cloud sind auf SAN-Versagen oder erhebliche Verschlechterungen der Leistung zurückzuführen. SANs fallen nicht oft aus, aber wenn, dann sind sie ein massiver „Single Point of Failure“. Darüber hinaus sorgen ihre Komplexität und proprietäre Natur dafür, dass ein ziemlich großes, komplexes Problem zu lösen ist. Ausfälle, wenn sie denn aufgetreten sind, wurden daher bisher oft in Stunden, nicht Minuten gemessen. Die schiere Größe eines durchschnittlichen SANs bedeutet, dass die Reparatur noch ziemlich lange andauert, wenn das Ausgangsproblem schon längst gelöst wurde.
Warum nutzen wir dann nicht einfach redundante SANs? Das ist prinzipiell möglich und wird in geschäftskritischen Unternehmensumgebungen häufit praktiziert. Im preissensiblen öffentlichen Cloud-Sektor jedoch kommen vollständig redundante SANs nicht zum Einsatz, weil die Speicherung dann ein Vielfaches des derzeitigen Preisniveaus kosten würde – was dann auch wieder keiner haben will.
Ein weiteres Problem mit SANs in einer Cloud ist die Latenzzeit. Die Zeit, die gespeicherte Daten benötigen, um über SAN und Netzwerk bis zu den Knoten zu gelangen, in denen CPU und RAM die ganze Arbeit erledigen, kann die Leistung dramatisch beeinträchtigen. Dabei geht es nicht um Bandbreite, sondern um Latenz. Aufgrund der Zeit, die für den Transport der Daten zwischen den Rechnerknoten und dem SAN erforderlich ist, setzen SANs daher eine Obergrenze für die Speicherleistung fest.
Der Einsatz von SANs ist unserer Meinung nach eine alte Lösung für ein neues Problem. Sie passen daher auch nicht gut zur Cloud. Wenn die Cloud hohe Leistung und zuverlässige, resiliente Speicherung bieten soll, muss sie über das SAN hinausgehen.
Unser Ansatz: Wir mögen unkomplizierte Probleme
Beim Aufbau unserer Cloud haben wir frühzeitig entschieden, dass wir häufigere unkomplizierte Probleme seltenen hochkomplexen Problemen vorziehen. Das heißt, wir lösen lieber ein einfaches kleines Problem, das öfter (aber immer noch selten) auftritt, als ein kompliziertes großes Problem, das seltener auftritt. Aus diesem Grund haben wir uns dafür entschieden, für unsere Speicherung keine SANs zu verwenden, sondern lokale RAID6-Arrays auf jedem Rechnerknoten.
Durch die Verlagerung der Speicherung auf die Knoten, an denen die Rechenprozesse erfolgen, werden die virtuelle Platte und CPU/RAM zum Großteil an die gleiche physikalische Maschine angepasst. Dies bedeutet, dass unsere Speicherung sehr geringe Latenz aufweist. Für die Robustheit haben wir die Speicherung mit RAID6 gekoppelt. Um Leistungsabfälle zu vermeiden, verwenden wir batteriegepufferte Highend-RAID-Hardware-Controller mit RAM-Caches. Unsere RAID-Controller können auch mit RAID6-Arrays hohe Leistung liefern und wenig anfällig für Stromausfälle (unsere Rechnerknoten haben auf jeden Fall zwei unabhängige Stromversorgungen).
Um die Leistung weiter zu erhöhen und die Auswirkungen eines beliebigen Laufwerk-Fehlers zu reduzieren, verwenden wir kleine 2,5″ 500 GB-Laufwerke. Wenn ein Laufwerk in einem Array ausfällt, ersetzen wir es schnell und das RAID-Array wird in einer viel kürzeren Zeit wieder rekonstituiert. Darüber hinaus bedeutet die größere Dichte der Spindeln pro Terabyte Speicher, dass die Last bei starkem Festplattenzugriff über eine größere Anzahl von Laufwerken verteilt wird. Aus diesem Grund ist unsere Speicherleistung eine der besten aller Public Clouds.
Lokaler Speicher hat einen großen Nachteil: Wenn der physische Host, auf dem sich Ihre Festplatte befindet, aus irgendeinem Grund ausfällt, verlieren Sie auch den Zugriff auf diese Festplatte. Tatsächlich versagt ein Host nur selten so vollständig (um nicht zu sagen: es ist noch nie passiert). Wir verfügen außerdem über ‚Hotspares‘, so dass wir Platten unmittelbar auf einen neuen Host verlagern und so Ausfallzeiten auf höchstens 10-15 Minuten minimieren können. Die meisten unserer Kunden haben mehrere Server auf verschiedenen physischen Computern. Das bedeutet, dass der Ausfall eines einzelnen Hosts kaum Einfluss auf die Cloud insgesamt hat. Bei den meisten Kunden passiert das überhaupt nie und die tatsächlich Betroffenen erleben nur einen begrenzten Ausfall eines Teils ihrer Infrastruktur. Vergleichen Sie das im Hinblick auf Komplexität und Zeit bis zur Wiederherstellung mit einem SAN-Ausfall!
Davon abgesehen, wäre es toll, wenn ein Host-Fehler nicht den Verlust des Zugriffs auf Laufwerke auf dem Host-Rechner bedeuten würde. Ebenso wäre es toll, wenn Festplatten keine Obergrenzen hätten und größer wären als der Speicherplatz auf einem physischen Host.
Das Ende des SAN und der lokalen Speicherung: ein neues Konzept
Klar ist, dass sowohl SANs als auch lokale Speicher Nachteile. Allerdings sind aus unserer Sicht die Nachteile der lokalen Speicher weniger entscheidend als die der SANs. Zusammen mit der besseren Leistung ist das aktuell daher die richtige Wahl für eine Public Cloud. Allerdings wird dieser Bereich gerade durch einen neuen Ansatz der Speicherung, die sogenannten DRBDs (Distributed Replicated Block Device) oder einfach nur ‚verteilten Blockspeicher‘ revolutioniert.
Der verteilte Blockspeicher nimmt die einzelnen lokalen Speicher-Arrays und kombiniert – ähnlich wie ein RAID mehrere Laufwerke zu einem einzigen Array kombiniert – die Speicher-/Rechnerknoten zu einem riesigen cloudweiten Array. Im Gegensatz zu einem SAN ist die Verwaltung eines verteilten Blockspeicherarrays föderiert, so dass es keinen „Single Point of Failure“ in der Verwaltungsebene gibt. Ebenso werden alle Daten, die auf einem einzelnen Knoten gespeichert sind, vollständig über andere Knoten repliziert. Wenn ein physischer Server ausfallen sollte, wäre also der Zugriff auf die auf diesem Computer gespeicherten Daten weiterhin gegeben. Der verteilte Blockspeicher sorgt in diesem Fall dafür, dass die anderen virtuellen Server einfach von anderen physischen Servern in dem Array auf die Daten zugreifen.
Wenn Ihre virtuelle Maschine unglücklicherweise auf einem Host liegt, der ausfällt (so dass Sie CPU/RAM verlieren, die Sie gerade nutzen), würde unser System sie einfach auf einem anderen physischen Rechnerknoten wieder herstellen. Letzten Endes haben Sie so alle „Single Points of Failure“ in der Speicherung eliminiert und können eine Hochverfügbarkeitslösung bereitstellen. Die Kosten, die hierfür anfallen, liegen voraussichtlich nicht über unserem aktuellen Preisniveau.
Ein weiterer großer Vorteil der verteilten Blockspeicherung ist die Möglichkeit, Live-Snapshots von Laufwerken zu erstellen, auch wenn sie aktiv von einem virtuellen Server genutzt werden. Auch zeitnahe Rollbacks auf frühere Versionen sind nahtlos möglich. Im Wesentlichen sind Backups mit der zusätzlichen Bequemlichkeit von Snapshots durch Replikation ins System integriert.
Derzeit sind mehrere Open-Source-Lösungen in der Entwicklung. Eine der interessantesten ist ein Projekt namens Sheepdog. Voraussichtlich wird innerhalb von 6 Monaten eine stabile Open-Source-Lösung für die Blockspeicherung verfügbar sein.
Auf der kommerziellen Seite hat ein Unternehmen namens Amplidata bereits eine äußerst robuste, kostengünstige, verteilte Blockspeicherlösung entwickelt, die die oben beschriebenen Vorteile bietet. Sie sind zusammen mit uns TechTour-Finalisten und präsentierten ihre Lösung vergangene Woche auf der TechTour Cloud und ICT 2.0 und im CERN. Die Präsentation war zweifellos sehr interessant.
Verteilung der Last
Ein weiterer Vorteil der verteilten Blockspeicherung ist die Möglichkeit, die Last von einem stark genutzten virtuellen Festplattenlaufwerk über mehrere Plattenarrays zu verteilen. Aktuell kann die Last für ein bestimmtes Laufwerk bei lokaler Speicherung nur innerhalb eines RAID-Arrays verteilt werden. Die verteilte Blockspeicherung verteilt die Last hingegen von einem Laufwerk auf eine große Anzahl von Servern mit separaten Plattenarrays. Intensiv genutzte Laufwerke haben somit einen viel geringeren Einfluss auf andere Cloud-Nutzer.
Cloud-Speicherung wird also zukünftig in der Lage sein wird, eine viel zuverlässigere, weniger schwankende Leistung bereitzustellen. Das dürfte viele Kunden glücklich machen, die derzeit unter großen Schwankungen der Festplattenleistung leiden.
Latenz wird wieder entscheidend
Ich habe die Latenzproblem mit SANs erwähnt und wie wir diese mit lokaler Speicherung vermeiden können. Müssten verteilte Blockspeicher nicht unter den gleichen Problemen leiden, wenn wir die Speicherung über eine ganze Reihe von separaten physischen Maschinen verteilen? Im Prinzip trifft das zu. Aus diesem Grund muss das Speichernetzwerk der Cloud in Verbindung mit der Implementierung von verteilten Blockspeichern neu überdacht und modifiziert werden.
Derzeit ist relativ wenig Traffic auf unserem Speichernetzwerk, da sich fast alle virtuellen Server auf dem gleichen physischen Rechner wie die Festplatte befinden. Das bedeutet, dass der Traffic zwischen den physischen Servern minimal und die Latenzzeit sehr niedrig ist. Wie geht man damit um, wenn der meiste Traffic im Speichernetzwerk zwischen physischen Servern stattfindet? Die Lösung bietet ein Wechsel zu einem Netzwerk mit geringer Latenz und eine Erhöhung der Cache-Größen auf jedem physischen Server. Dabei gibt es zwei Hauptoptionen, 10 Gbps Ethernet oder Infiniband. Beide haben Vor-und Nachteile, aber versprechen jedoch deutlich geringere Latenz. Das wäre allerdings ein neuer Artikel für sich!
Um das Versprechen einer hochleistungsfähigen zuverlässigen Speicherung einzulösen, muss die verteilte Blockspeichung daher mit einem Netzwerk mit geringer Latenzzeit implementiert werden.
Wo passt hier die SSD rein?
Die SSD-Speicherung (Solid State Drive) eignet sich bestens für die Speicherung mit hohem Lese-Schreib-Verhältnis. Für intensive Schreib-Anwendungen, die traditionelle Speicherlösungen überfordern könnten, ist sie weniger geeignet. Zudem schränkt der Preis von SSDs ihren Einsatz für die meisten alltäglichen Speicheranforderungen ein. Die Gesamtleistung zu erhöhen, wäre ein Argument für die Übertragung einiger intensiver Lese-Anwendungen auf SSD. Wir als Unternehmen beschäftigen uns derzeit aktiv damit. Eine coole kommende SSD-Speicherlösung könnte Solidfire werden (noch gibt es nicht so viel zu sehen, aber man sollte sie im Auge behalten!).
Zusammenfassung
Die Speicherung in der Cloud ist derzeit nicht optimal. Die verteilte Blockspeicherung könnte die Bequemlichkeit und Zuverlässigkeit eines SANs mit der Leistungsfähigkeit der lokalen Speicherung verbinden. Die Beseitigung der „Single Points of Failure“ bei der Speicherung ist schon ein großer Fortschritt und bringt uns der vollständig ausgereiften, erschwinglichen Hochverfügbarkeits-IaaS-Cloud einen Schritt näher.
- Im Eigenbesitz oder nicht: Vor- und Nachteile des eigenen IaaS-Rechenzentrums - Dezember 13, 2016
- Die Zukunft der Cloud-Speicherung (und was aktuell schiefläuft) - Dezember 12, 2016