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. Hier sind einige Gründe, warum Datenbanken nicht für die Containerisierung geeignet sind. Gleichzeitig hoffe ich, dass jeder bei ihrer Verwendung vorsichtig 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 DatensicherheitSpeichern 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. 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. LeistungsproblemeWie 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. NetzwerkproblemeUm Docker-Netzwerke zu verstehen, müssen Sie über fundierte Kenntnisse der Netzwerkvirtualisierung verfügen. Um höhere Lasten zu erreichen, erfordern Datenbanken einen dedizierten und dauerhaften Durchsatz. Ungelöste Docker-Netzwerkprobleme bleiben in Version 1.9 ungelöst. Zusammengefasst führt die Containerisierung dazu, dass Datenbankcontainer schwer zu verwalten sind. 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. StandEs 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. RessourcenisolierungIn 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-PlattformenDie 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. Aufgrund von Dateninkonsistenz ist die neue Instanz nicht mit der alten 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 DatenbankEs 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, die nicht anfällig für Datenverlust sind (Suche, Tracking-Punkte), in Container packen und Datenbank-Sharding verwenden, um die Anzahl der Instanzen zu erhöhen und so den Durchsatz zu 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. Docker - Ergänzende Wissenspunkte zum Bereitstellen von Datenbanken So stellen Sie eine Datenbank mit Docker bereit
docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MSYQL_ROOT_PASSWORD=123456 \ -d mysql:5.7.22
Damit ist dieser Artikel über die sieben Gründe, warum Docker nicht für die Datenbankbereitstellung geeignet ist, abgeschlossen. Weitere Informationen dazu, warum Docker nicht für die Datenbankbereitstellung geeignet ist, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Unterschied und Implementierung von JavaScript Anti-Shake und Throttling
>>: Antworten auf mehrere häufig gestellte MySQL-Interviewfragen
Inhaltsverzeichnis Hintergrund Bereitstellen / In...
Vorwort: Die verteilte Master-Slave-Architektur v...
1 CSS-Stil ohne Semikolon ";" 2 Tags sin...
(1) Reduzieren Sie HTTP-Anfragen. (Ressourcendate...
Erstens: 4 Möglichkeiten, CSS einzuführen Es gibt...
Effektbild: Vorwort: Kürzlich arbeitete ich an ei...
Wie löst man das Problem 1045, wenn die lokale Da...
Inhaltsverzeichnis Problembeschreibung: Lösung 1 ...
Legen Sie den Stil der Tabelle fest: „table-layout...
Passive Prüfung Mit passiven Integritätsprüfungen...
Zusammenfassung In diesem Artikel werden die folg...
Wenn ein Thread eine DELAYED-Anweisung für eine T...
Effektvorschau Ideen Scrollen Sie durch die aktue...
Drei Funktionen: 1. Automatische vertikale Zentrie...
Inhaltsverzeichnis 1. Funktionsbeschreibung 2. Üb...