Objektspeicher vs. Speicherdienste blockieren

Einführung

Flexible und skalierbare Datenspeicherung ist eine Grundvoraussetzung für die meisten Anwendungen und Dienste, die mit modernen Techniken und Tools entwickelt werden. Unabhängig davon, ob große oder kleine Mengen von Bildern, Videos oder Textblöcken gespeichert werden, benötigen Anwendungsentwickler eine Lösung zum Speichern und Abrufen von benutzergenerierten Inhalten, Protokollen, Sicherungen usw.

Mit den heutigen komplexen Bereitstellungen, Containern und kurzlebigen Infrastrukturen sind die Zeiten vorbei, in denen Dateien einfach auf einem einzigen Server auf der Festplatte gespeichert wurden. Cloud-Anbieter haben Services entwickelt, um die Speicheranforderungen moderner Anwendungsbereitstellungen zu erfüllen, und diese lassen sich hauptsächlich in zwei Kategorien einteilen: Objektspeicher und Blockspeicher.

Schauen wir uns beide an und besprechen die allgemeinen Vor- und Nachteile sowie die Anwendungsfälle für beide.

Was ist Blockspeicher?

Blockspeicherdienste sind relativ einfach und vertraut. Sie bieten ein herkömmliches Blockspeichergerät - wie eine Festplatte - über das Netzwerk. Cloud-Anbieter verfügen häufig über Produkte, die ein Blockspeichergerät beliebiger Größe bereitstellen und an Ihre virtuelle Maschine anschließen können.

Von dort aus würden Sie es wie eine normale Festplatte behandeln. Sie können es mit einem Dateisystem formatieren und Dateien darauf speichern, mehrere Geräte zu einem RAID-Array zusammenfassen oder eine Datenbank so konfigurieren, dass sie direkt auf das Blockgerät schreibt, wodurch der Overhead des Dateisystems vollständig vermieden wird. Darüber hinaus bieten an ein Netzwerk angeschlossene Blockspeichergeräte häufig einige einzigartige Vorteile gegenüber normalen Festplatten:

  • Sie können problemlos Live-Snapshots des gesamten Geräts zu Sicherungszwecken erstellen

  • Blockspeichergeräte können an wachsende Anforderungen angepasst werden

  • Sie können Blockspeichergeräte problemlos zwischen Computern entfernen und verschieben

Dies ist ein sehr flexibles Setup, das für die meisten Anwendungen von Nutzen ist. Lassen Sie uns einige Vor- und Nachteile der Technologie zusammenfassen.

Einige Vorteile der Blockspeicherung sind:

  • Blockspeicher ist ein bekanntes Paradigma. Menschen und Software verstehen und unterstützen Dateien und Dateisysteme nahezu universell

  • Blockgeräte werden gut unterstützt. Jede Programmiersprache kann problemlos Dateien lesen und schreiben

  • Dateisystemberechtigungen und Zugriffskontrollen sind bekannt und bekannt

  • Blockspeichergeräte bieten IO mit geringer Latenz, sodass sie für die Verwendung durch Datenbanken geeignet sind.

Die Nachteile der Blockspeicherung sind:

  • Der Speicher ist jeweils an einen Server gebunden

  • Blöcke und Dateisysteme verfügen nur über begrenzte Metadaten zu den von ihnen gespeicherten Informationsblöcken (Erstellungsdatum, Eigentümer, Größe). Alle zusätzlichen Informationen zu dem, was Sie speichern, müssen auf Anwendungs- und Datenbankebene verarbeitet werden. Dies ist eine zusätzliche Komplexität, über die sich ein Entwickler Sorgen machen muss

  • Sie müssen den gesamten zugewiesenen Blockspeicherplatz bezahlen, auch wenn Sie ihn nicht verwenden

  • Sie können nur über einen laufenden Server auf den Blockspeicher zugreifen

  • Blockspeicher erfordert mehr praktische Arbeit und Einrichtung im Vergleich zum Objektspeicher (Dateisystemauswahl, Berechtigungen, Versionsverwaltung, Sicherungen usw.).

Aufgrund seiner schnellen E / A-Eigenschaften eignen sich Blockspeicherdienste gut zum Speichern von Daten in herkömmlichen Datenbanken. Darüber hinaus müssen viele ältere Anwendungen, die normalen Dateisystemspeicher benötigen, ein Blockspeichergerät verwenden.

Wenn Ihr Cloud-Anbieter keinen Blockspeicherdienst anbietet, können Sie Ihren eigenen mitOpenStack Cinder,Ceph oder dem auf vielen NAS-Geräten verfügbaren integrierten iSCSI-Dienst ausführen.

Was ist Objektspeicher

In der modernen Welt des Cloud Computing ist Objektspeicherung das Speichern und Abrufen von unstrukturierten Daten- und Metadatenblobs mithilfe einer HTTP-API. Anstatt Dateien in Blöcke zu zerlegen, um sie mit einem Dateisystem auf der Festplatte zu speichern, werden ganze Objekte behandelt, die über das Netzwerk gespeichert werden. Diese Objekte können eine Bilddatei, Protokolle, HTML-Dateien oder ein in sich geschlossener Byteblock sein. Sie sindunstructured, da es kein bestimmtes Schema oder Format gibt, dem sie folgen müssen.

Die Objektspeicherung nahm zu, weil sie die Entwicklererfahrung erheblich vereinfachte. Da die API aus Standard-HTTP-Anforderungen besteht, wurden Bibliotheken für die meisten Programmiersprachen schnell entwickelt. Das Speichern eines Datenblobs wurde so einfach wie eine HTTP-PUT-Anforderung an den Objektspeicher. Das Abrufen der Datei und der Metadaten ist eine normale GET-Anforderung. Darüber hinaus können die meisten Objektspeicherdienste die Dateien auch öffentlich für Ihre Benutzer bereitstellen, sodass kein Webserver zum Hosten statischer Assets mehr erforderlich ist.

Darüber hinaus berechnen Objektspeicherservices nur den von Ihnen verwendeten Speicherplatz (einige berechnen auch eine Gebühr pro HTTP-Anforderung und für die Übertragungsbandbreite). Dies ist ein Segen für kleine Entwickler, die erstklassigen Speicher und Hosting von Assets zu Kosten erhalten können, die sich mit der Nutzung skalieren lassen.

Die Objektspeicherung ist jedoch nicht für jede Situation die richtige Lösung. Sehen wir uns eine Zusammenfassung der Vor- und Nachteile an.

Einige Vorteile der Objektspeicherung sind:

  • Eine einfache HTTP-API mit Clients für alle gängigen Betriebssysteme und Programmiersprachen

  • Eine Kostenstruktur, bei der Sie nur für das bezahlen, was Sie verwenden

  • Durch die integrierte öffentliche Bereitstellung statischer Ressourcen können Sie einen Server weniger selbst ausführen

  • Einige Objektspeicher bieten eine integrierte CDN-Integration, mit der Ihre Assets rund um den Globus zwischengespeichert werden, um Downloads und das Laden von Seiten für Ihre Benutzer zu beschleunigen

  • Optionale Versionierung bedeutet, dass Sie alte Versionen von Objekten abrufen können, um sie nach versehentlichem Überschreiben von Daten wiederherzustellen

  • Objektspeicherservices können problemlos von einfachen Anforderungen zu sehr intensiven Anwendungsfällen skaliert werden, ohne dass der Entwickler mehr Ressourcen oder eine neue Architektur starten muss, um die Last zu bewältigen

  • Wenn Sie einen Objektspeicherdienst verwenden, müssen Sie keine Festplatten und RAID-Arrays warten, wie dies vom Dienstanbieter ausgeführt wird

  • Das Speichern von Metadatenblöcken neben Ihrem Daten-Blob kann Ihre Anwendungsarchitektur weiter vereinfachen

Einige Nachteile der Objektspeicherung sind:

  • Aufgrund der hohen Latenz solcher Dienste können Sie keine Objektspeicherdienste zum Sichern einer herkömmlichen Datenbank verwenden

  • Mit der Objektspeicherung können Sie nicht nur einen Teil eines Datenblobs ändern, sondern müssen ein gesamtes Objekt gleichzeitig lesen und schreiben. Dies hat einige Auswirkungen auf die Leistung. In einem Dateisystem können Sie beispielsweise problemlos eine einzelne Zeile an das Ende einer Protokolldatei anhängen. Auf einem Objektspeichersystem müssen Sie das Objekt abrufen, die neue Zeile hinzufügen und das gesamte Objekt zurückschreiben. Dies macht die Objektspeicherung weniger ideal für Daten, die sich sehr häufig ändern

  • Betriebssysteme können einen Objektspeicher nicht einfach wie eine normale Festplatte laden. Es gibt einige Clients und Adapter, die dabei helfen. Im Allgemeinen ist das Durchsuchen eines Objektspeichers jedoch nicht so einfach wie das Durchsuchen von Verzeichnissen in einem Dateibrowser

Aufgrund dieser Eigenschaften ist der Objektspeicher nützlich, um statische Assets zu hosten, vom Benutzer generierte Inhalte wie Bilder und Filme zu speichern, Sicherungsdateien zu speichern und Protokolle zu speichern.

Es gibt einige selbst gehostete Objektspeicherlösungen, Sie werden jedoch einige der Vorteile einer gehosteten Lösung aufgeben (z. B., dass Sie sich nicht um Festplatten und Skalierungsprobleme kümmern müssen). Sie könnenMinio, einen beliebten Objektspeicherserver, der in der Sprache Go geschrieben ist, oderCeph oderOpenStack Swift ausprobieren.

Fazit

Die Auswahl einer Speicherlösung kann für Entwickler eine komplexe Entscheidung sein. In diesem Artikel haben wir die Vor- und Nachteile von Block- und Objektspeicherdiensten erörtert. Es ist wahrscheinlich, dass jede ausreichend komplexe Anwendung beide Speichertypen benötigt, um alle ihre Anforderungen zu erfüllen.