Welche Nachteile hat die Bereitstellung der Datenbank in einem Docker-Container?

Welche Nachteile hat die Bereitstellung der Datenbank in einem Docker-Container?

Vorwort

Docker erfreut sich seit zwei Jahren großer Beliebtheit. Entwickler möchten alle Anwendungen und Software in Docker-Containern bereitstellen, aber möchten Sie die Datenbank auch wirklich im Container bereitstellen?

Dieses Problem ist nicht unbegründet, denn im Internet finden Sie zahlreiche Bedienungsanleitungen und Video-Tutorials. Der Herausgeber hat zu Ihrer Information einige Gründe zusammengestellt, warum Datenbanken nicht für die Containerisierung geeignet sind. Gleichzeitig hoffe ich, dass jeder bei der Verwendung vorsichtiger sein kann.

Bisher ist es sehr unvernünftig, die Datenbank in einen Container zu packen, aber ich glaube, dass alle Entwickler die Vorteile der Containerisierung kennengelernt haben. Ich hoffe, dass mit der Entwicklung der Technologie eine perfektere Lösung entstehen wird.

7 Gründe, warum Docker nicht für die Datenbankbereitstellung geeignet ist

1. Probleme mit der Datensicherheit

Speichern Sie keine Daten in Containern. Dies ist auch einer der offiziellen Tipps zur Verwendung von Docker-Containern. Der Container kann jederzeit gestoppt oder gelöscht werden. Wenn der Container gelöscht wird, gehen die Daten im Container verloren. Um Datenverlust zu vermeiden, können Benutzer zum Speichern von Daten die Datenvolume-Mount verwenden. Das Design der Container-Volumes basiert jedoch auf der Image-Ebene von Union FS, um dauerhaften Speicher bereitzustellen, und die Datensicherheit ist nicht gewährleistet. Wenn der Container plötzlich abstürzt und die Datenbank nicht ordnungsgemäß heruntergefahren wird, können Daten beschädigt werden. Darüber hinaus kann die gemeinsame Nutzung von Datenvolumengruppen in Containern erhebliche Schäden an der physischen Maschinenhardware verursachen.

Auch wenn Sie Docker-Daten auf dem Host speichern, besteht keine Garantie, dass keine Daten verloren gehen. Docker-Volumes sind darauf ausgelegt, dauerhaften Speicher für Union FS-Image-Ebenen bereitzustellen, es mangelt jedoch noch immer an Garantien.

Mit den aktuellen Speichertreibern besteht bei Docker immer noch die Gefahr, unzuverlässig zu sein. Wenn der Container abstürzt und die Datenbank nicht ordnungsgemäß geschlossen wird, kann es zu Datenbeschädigungen kommen.

2. Leistungsprobleme

Wie wir alle wissen, ist MySQL eine relationale Datenbank mit hohen IO-Anforderungen. Wenn auf einer physischen Maschine mehrere Instanzen ausgeführt werden, akkumulieren sich die E/A-Aufgaben, was zu E/A-Engpässen führt und die Lese- und Schreibleistung von MySQL erheblich reduziert.

Bei einer Sondersitzung zu den zehn größten Schwierigkeiten bei der Verwendung von Docker sagte ein Architekt einer staatlichen Bank einmal: „Der Leistungsengpass der Datenbank tritt normalerweise bei der E/A auf. Wenn wir der Docker-Idee folgen, werden schließlich mehrere Docker-E/A-Anfragen im Speicher angezeigt. Derzeit basieren die meisten Datenbanken im Internet auf einer Share-Nothing-Architektur, was ein Grund dafür sein kann, eine Migration zu Docker nicht in Betracht zu ziehen.“

Manche Schüler haben möglicherweise auch entsprechende Lösungsansätze für Leistungsprobleme:

(1) Trennung von Datenbankprogrammen und Daten

Wenn Sie Docker zum Ausführen von MySQL verwenden, müssen das Datenbankprogramm und die Daten getrennt werden, wobei die Daten im gemeinsam genutzten Speicher und das Programm im Container gespeichert werden müssen. Wenn im Container eine Ausnahme auftritt oder der MySQL-Dienst abnormal ist, wird automatisch ein neuer Container gestartet. Darüber hinaus wird empfohlen, keine Daten auf dem Hostcomputer zu speichern. Der Hostcomputer und der Container teilen sich eine Datenträgergruppe, was größere Auswirkungen auf den Schaden am Hostcomputer hat.

(2) Ausführen von leichten oder verteilten Datenbanken

Wenn Sie leichte oder verteilte Datenbanken in Docker bereitstellen, empfiehlt Docker selbst, den Dienst zu beenden und automatisch einen neuen Container zu starten, anstatt den Containerdienst neu zu starten.

(3) Sinnvolle Gestaltung der Bewerbungen

Für Anwendungen oder Dienste mit hohen E/A-Anforderungen ist es sinnvoller, die Datenbank auf einer physischen Maschine oder KVM bereitzustellen. Derzeit werden TDSQL von TX Cloud und Oceanbase von Alibaba direkt auf physischen Maschinen und nicht auf Docker bereitgestellt.

3. Netzwerkprobleme

Um Docker-Netzwerke zu verstehen, müssen Sie über fundierte Kenntnisse der Netzwerkvirtualisierung verfügen. Sie müssen auch auf unerwartete Situationen vorbereitet sein. Möglicherweise müssen Sie Fehlerbehebungen ohne Support oder zusätzliche Tools durchführen.

Wir wissen, dass Datenbanken einen dedizierten und anhaltenden Durchsatz erfordern, um höhere Lasten zu erreichen. Wir wissen auch, dass Container eine Isolationsschicht hinter dem Hypervisor und der virtuellen Hostmaschine darstellen. Das Netzwerk ist jedoch für die Datenbankreplikation von entscheidender Bedeutung, da hierfür eine rund um die Uhr stabile Verbindung zwischen der Master- und der Slave-Datenbank erforderlich ist. Ungelöste Docker-Netzwerkprobleme bleiben in Version 1.9 ungelöst.

Zusammengefasst führt die Containerisierung dazu, dass Datenbankcontainer schwer zu verwalten sind. Ich weiß, dass Sie ein Spitzeningenieur sind und jedes Problem lösen können. Aber wie viel Zeit verbringen Sie mit der Fehlerbehebung bei Docker-Netzwerkproblemen? Wäre es nicht besser, die Datenbank in einer dedizierten Umgebung zu platzieren? Schaffen Sie Zeit, um sich auf wirklich wichtige Geschäftsziele zu konzentrieren.

4. Stand

Es ist cool, zustandslose Dienste in Docker zu packen, um Container zu orchestrieren und Single Point of Failure-Probleme zu lösen. Aber was ist mit der Datenbank? Durch Platzieren der Datenbank in derselben Umgebung wird sie zustandsbehaftet und die Gefahr von Systemausfällen erhöht. Wenn Ihre Anwendungsinstanz oder Anwendung das nächste Mal abstürzt, kann dies Auswirkungen auf die Datenbank haben.

Wissenspunkt: In Docker kann die horizontale Skalierung nur für zustandslose Computerdienste verwendet werden, nicht für Datenbanken.

Ein wichtiges Merkmal der schnellen Verbreitung von Docker ist seine Zustandslosigkeit. Alles mit Datenzustand ist nicht dafür geeignet, direkt in Docker platziert zu werden. Wenn eine Datenbank in Docker installiert ist, müssen Speicherdienste separat bereitgestellt werden.

Derzeit werden sowohl TDSQL (verteilte Finanzdatenbank) von TX Cloud als auch Oceanbase (verteiltes Datenbanksystem) von Alibaba Cloud direkt auf physischen Maschinen ausgeführt und nicht auf Docker, was einfacher zu verwalten ist.

5. Ressourcenisolierung

In Bezug auf die Ressourcenisolierung ist Docker tatsächlich nicht so gut wie die virtuelle Maschine KVM. Docker verwendet Cgroup, um Ressourcenbeschränkungen zu implementieren, die nur den Maximalwert des Ressourcenverbrauchs begrenzen können, aber nicht verhindern können, dass andere Programme ihre eigenen Ressourcen belegen. Wenn andere Anwendungen die physischen Maschinenressourcen übermäßig beanspruchen, beeinträchtigt dies die Lese- und Schreibleistung von MySQL im Container.

Je mehr Isolationsebenen Sie benötigen, desto höher ist der Ressourcenaufwand. Im Vergleich zu dedizierten Umgebungen ist die einfache horizontale Skalierung ein großer Vorteil von Docker. In Docker kann die horizontale Skalierung jedoch nur für zustandslose Computerdienste, nicht für Datenbanken verwendet werden.

Wir sehen keine Isolationsfunktionen für die Datenbank. Warum sollten wir sie also in einen Container packen?

6. Die Unanwendbarkeit von Cloud-Plattformen

Die meisten Leute starten ihre Projekte über eine öffentliche Cloud. Die Cloud vereinfacht die Komplexität des Betriebs und Austauschs virtueller Maschinen, sodass nachts oder am Wochenende keine Arbeitszeit für das Testen neuer Hardwareumgebungen verschwendet werden muss. Warum sollten wir uns über die Umgebung Gedanken machen, in der eine Instanz ausgeführt wird, wenn wir sie einfach schnell hochfahren können?

Aus diesem Grund zahlen wir unseren Cloud-Anbietern viel Geld. Wenn wir einen Datenbankcontainer für die Instanz platzieren, besteht der oben genannte Komfort nicht mehr. Da die Daten nicht übereinstimmen, ist die neue Instanz nicht mit der vorhandenen Instanz kompatibel. Wenn Sie die Instanz auf die Verwendung eines Einzelmaschinendienstes beschränken möchten, sollten Sie für die Datenbank eine nicht containerisierte Umgebung verwenden. Wir müssen nur die Möglichkeit beibehalten, die Computing-Dienstebene elastisch zu erweitern.

7. Umgebungsanforderungen für den Betrieb der Datenbank

Es kommt häufig vor, dass DBMS-Container auf demselben Host wie andere Dienste ausgeführt werden. Allerdings sind die Hardwareanforderungen dieser Dienste sehr unterschiedlich.

Datenbanken (insbesondere relationale Datenbanken) haben hohe IO-Anforderungen. Allgemeine Datenbankmodule verwenden dedizierte Umgebungen, um eine gleichzeitige Ressourcenkonkurrenz zu vermeiden. Wenn Sie Ihre Datenbank in einen Container legen, verschwenden Sie die Ressourcen Ihres Projekts. Weil Sie viele zusätzliche Ressourcen für die Instanz konfigurieren müssen. Wenn Sie in der öffentlichen Cloud 34 GB Speicher benötigen, muss die von Ihnen gestartete Instanz über 64 GB Speicher verfügen. In der Praxis werden diese Ressourcen nicht voll genutzt.

Wie kann man das Problem lösen? Sie können in Schichten entwerfen und feste Ressourcen verwenden, um mehrere Instanzen verschiedener Schichten zu starten. Horizontale Skalierung ist immer besser als vertikale Skalierung.

Zusammenfassen

Bedeutet die Antwort auf die obige Frage, dass die Datenbank nicht in einem Container bereitgestellt werden darf?

Die Antwort ist: Nein

Wir können Unternehmen digitalisieren, die nicht anfällig für Datenverlust sind (Suche, Tracking-Punkte), und durch Datenbank-Sharding die Anzahl der Instanzen erhöhen und so den Durchsatz steigern.

Docker eignet sich zum Ausführen leichter oder verteilter Datenbanken. Wenn der Docker-Dienst abstürzt, wird automatisch ein neuer Container gestartet, anstatt den Container-Dienst neu zu starten.

Die Datenbank verwendet Middleware und Containersysteme, um automatisch zu skalieren, sich nach Katastrophen zu erholen, zu wechseln und mit mehreren Knoten zu kommen. Sie kann auch in Containern bereitgestellt werden.

Oben finden Sie detaillierte Informationen zu den Mängeln bei der Bereitstellung von Datenbanken im Docker-Container. Weitere Informationen dazu, warum Docker nicht für die Bereitstellung von Datenbanken geeignet ist, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Zusammenfassung von 7 Gründen, warum Docker nicht für die Bereitstellung von Datenbanken geeignet ist

<<:  So optimieren Sie die MySQL-Abfragegeschwindigkeit

>>:  Detaillierte Erklärung des Unterschieds zwischen WeChat-Applet Bindtap und Catchtap

Artikel empfehlen

So erstellen Sie ein React-Projekt mit Vite

Inhaltsverzeichnis Vorwort Erstellen Sie ein Vite...

Detaillierte Erklärung der MySQL Master-Slave-Inkonsistenz und Lösungen

1. MySQL Master-Slave-Asynchronität 1.1 Netzwerkv...

So erstellen Sie einen untergeordneten Prozess in nodejs

Inhaltsverzeichnis Einführung Untergeordneter Pro...

Pessimistisches Sperren und optimistisches Sperren in MySQL

In relationalen Datenbanken sind pessimistisches ...

Detaillierte Erläuterung der FTP-Umgebungskonfigurationslösung (vsftpd)

1. Installieren Sie die vsftpd-Komponente Install...

Keep-Alive-Multilevel-Routing-Cache-Problem in Vue

Inhaltsverzeichnis 1. Problembeschreibung 2. Ursa...

Installationsmethode für mysql-8.0.17-winx64 unter Windows 10

1. Von der offiziellen Website herunterladen und ...

JavaScript-Countdown zum Schließen von Anzeigen

Verwenden von Javascript zum Implementieren eines...

So installieren Sie Tomcat-8.5.39 auf centos7.6

So installieren Sie Tomcat-8.5.39 auf CentOS 7.6....

Auszeichnungssprache - Phrasenelemente

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Detaillierte Erklärung des Hash-Jump-Prinzips von Vue

Inhaltsverzeichnis Der Unterschied zwischen Hash ...