Permanenter Speicher mit Docker in der Produktion - Welche Lösung und warum?


8

Ich habe vor kurzem angefangen, für ein Unternehmen zu arbeiten, das seine monolithische SaaS-Anwendung in containerisierte Mikrodienste aufteilen möchte. Es fällt mir jedoch schwer, einen wesentlichen Teil des dauerhaften Speichers zu erfassen. Warum gibt es so viele verschiedene konkurrierende Plattformen? Portworx, Rexray, StorageOS, Flocker, Inifint usw.

Meine Fragen

  1. Warum sollte jemand nicht einfach einen NFS-Server hochfahren und dort eine hierarchische Ordnerstruktur als Speicher-Backend verwenden? Welche Vorteile erzielen Sie mit einem dieser Tools?

  2. Wie gefährlich ist es, so etwas mit Docker zu verwenden? Was sind die häufigsten Ursachen für katastrophale Datenverluste in einer Docker-basierten Umgebung?

  3. Welche dauerhafte Speicherlösung würden Sie empfehlen und warum? Mein Unternehmen betreibt eine SaaS-Plattform. Die Datennutzdaten sind klein (5 KB bis 100 KB). Die Datenverarbeitung ist klein-mittel im Ressourcenverbrauch. Das Gesamtvolumen ist mittelgroß, wächst aber weiter. Wir hoffen, unsere monolithische Anwendung als separate containerisierte Mikrodienste vollständig in die Cloud zu verlagern. Einschließlich unseres Data Warehouse.

  4. Etwas unabhängig, aber es passt zusammen. Was sind die Stärken von Kubernetes als Orchestrator im Gegensatz zu Rancher / Cattle? Ist Kubernetes nicht für eine kleine bis mittelgroße Plattform überentwickelt? Gibt es neben der Ein-Klick-Installation noch Stärken bei der Verwendung von Kubernetes in Rancher?

Vielen Dank für den Einblick. Entschuldigung für die Naivität. Ich begrüße alle Unterlagen und ergänzendes Lesematerial.

BEARBEITEN: Für den Kontext verwenden wir Azure als zugrunde liegende Cloud-Plattform.


1
Für 4: Kubernetes lässt sich gut mit Azure spielen, um persistente Volumes als Azure-Datenträger zu erstellen . NFS hat in der Vergangenheit einen schlechten Sperrmechanismus. Im Falle eines Fehlers im Orchestrator können Sie Ihre Dateien leicht beschädigen.
Tensibai

1
Teams, mit denen ich in diesem Zusammenhang zusammengearbeitet habe, haben gute Erfahrungen mit Cassandra als Speicher-Backend für eine Reihe von Mucroservices gemacht, aber der Fokus liegt eher auf dem Lesen als auf dem Schreiben von Daten
Peter Muryshkin

1
Welche Art von Daten? Datenbankdaten? Bilder? Textdateien?
James Shewey

Antworten:


4

Ich kann den 2. Punkt beantworten:

Docker eignet sich am besten für eine auf Mikrodiensten basierende Architektur, wenn die Anwendung in den Containern ausgeführt wird, der Speicher oder andere Live-Sitzungen jedoch im gemeinsam genutzten RAM oder in der Datenbank verwaltet werden.

Grundsätzlich sollten Sie nichts im Docker-Container aufbewahren. Es gibt viele Gründe dafür:

  1. Erwägen Sie ein Upgrade: Jemand aus Ihrem Team hat ein neueres Image der Anwendung erstellt, und Sie benötigen den Container, der mit dem neuesten Image ausgeführt wird. Der derzeitige Docker und die beliebte Methode hierfür besteht darin, den vorhandenen Container herunterzufahren und einen neuen Container mit denselben Laufzeitparametern wie der ältere Container, jedoch mit dem neueren Image, zu drehen. Dies ist einer der Hauptgründe, warum Container immer zustandslos sein und keine Daten enthalten sollten. Sie können alle Ihre Daten an einem Ort bereitstellen und Sitzungen in einer Datenbank oder so etwas wie memchached usw. aufbewahren.

  2. Einer der großen Anwendungsfälle von Docker ist das Erstellen von Clustern. Wenn Sie anfangen, Daten in Ihren Containern zu speichern, ist es ein Aufwand, diese Daten zwischen den Anwendungscontainern synchron zu halten.

  3. Die Docker-Community empfiehlt im Allgemeinen nicht, Daten in Containern zu speichern, und daher hat niemand versucht, dieses Risiko in der Produktion einzugehen, und niemand möchte der erste Geschichtenerzähler sein, der die Produktion durcheinander gebracht hat :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.