Heim  >  Artikel  >  System-Tutorial  >  Anwendung einer effizienten Protokollbibliothek unter Linux

Anwendung einer effizienten Protokollbibliothek unter Linux

王林
王林Original
2024-06-22 04:57:09526Durchsuche

Aufgrund der inhärenten Eigenschaften des Protokolls selbst werden die Datensätze der Reihe nach von links nach rechts eingefügt, was bedeutet, dass die Datensätze auf der linken Seite „älter“ sind als die Datensätze auf der rechten Seite. Mit anderen Worten, wir müssen uns nicht darauf verlassen Die Systemuhr ist für die Verteilung sehr wichtig.

Anwendung von Protokollen in der Datenbank

Es ist unmöglich zu wissen, wann das Protokoll erschienen ist. Möglicherweise ist es vom Konzept her zu einfach. Im Datenbankbereich werden Protokolle eher zum Synchronisieren von Daten und Indizes verwendet, z. B. das Redo-Protokoll in MySQL. Das Redo-Protokoll ist eine festplattenbasierte Datenstruktur, die verwendet wird, um die Richtigkeit und Vollständigkeit der Daten sicherzustellen System werden auch als Write-Ahead-Protokolle bezeichnet. Während der Ausführung einer Sache wird beispielsweise zuerst das Redo-Protokoll geschrieben und dann werden die tatsächlichen Änderungen angewendet. Auf diese Weise kann es sein, dass das System wiederhergestellt wird Basierend auf dem Redo-Protokoll neu schreiben, um die Daten wiederherzustellen (während des Initialisierungsprozesses besteht zu diesem Zeitpunkt keine Clientverbindung). Das Protokoll kann auch zur Synchronisierung zwischen dem Datenbank-Master und dem Slave verwendet werden, da im Wesentlichen alle Betriebsdatensätze der Datenbank in das Protokoll geschrieben wurden. Wir müssen nur das Protokoll mit dem Slave synchronisieren und es auf dem Slave wiedergeben, um den Master zu erreichen -Slave-Synchronisierung Hier können wir auch alle Änderungen in der Datenbank implementieren, indem wir das Redo-Protokoll abonnieren und so personalisierte Geschäftslogik implementieren, z. B. Auditing, Cache-Synchronisierung usw.

Anwendung von Protokollen in verteilten Systemen

Anwendung einer effizienten Protokollbibliothek unter Linux
Bei verteilten Systemdiensten geht es im Wesentlichen um Zustandsänderungen, die als Zustandsmaschinen verstanden werden können (die nicht von der externen Umgebung wie Systemuhren, externen Schnittstellen usw. abhängig sind) und letztendlich konsistente Ausgaben erzeugen ein konsistenter Zustand, und das Protokoll ist aufgrund seiner inhärenten Reihenfolge nicht auf die Systemuhr angewiesen, was zur Lösung des Problems der Änderungsreihenfolge verwendet werden kann.
Wir verwenden diese Funktion, um viele Probleme zu lösen, die in verteilten Systemen auftreten. Beispielsweise empfängt der Hauptbroker im Standby-Knoten in RocketMQ die Anfrage des Clients und synchronisiert sie dann in Echtzeit mit dem Slave. Wenn der Master auflegt, kann der Slave damit fortfahren Verarbeiten Sie die Anfrage, z. B. das Ablehnen der Schreibanfrage und das Fortfahren mit der Bearbeitung von Leseanfragen. Das Protokoll kann nicht nur Daten aufzeichnen, sondern auch Vorgänge wie SQL-Anweisungen direkt aufzeichnen.
Anwendung einer effizienten Protokollbibliothek unter Linux

Das Protokoll ist die Schlüsseldatenstruktur zur Lösung des Konsistenzproblems. Das Protokoll ist wie eine Operationssequenz. Die weit verbreiteten Paxos- und Raft-Protokolle basieren beispielsweise alle auf dem Protokoll.

Anwendung einer effizienten Protokollbibliothek unter Linux

Anwendung von Protokollen in Message Queue

Protokolle können problemlos zum Verarbeiten des Datenzuflusses und -abflusses verwendet werden. Die Datenquellen können hier aus verschiedenen Aspekten stammen, z. B. aus einem Ereignisstrom (Seitenklick, Cache-Aktualisierungserinnerung, Datenbank-Binlog-Änderungen). ) können wir Protokolle zentral in einem Cluster speichern, und Abonnenten können jeden Datensatz des Protokolls basierend auf dem Offset lesen und ihre eigenen Änderungen basierend auf den Daten und Vorgängen in jedem Datensatz anwenden.
Das Protokoll kann hier als Nachrichtenwarteschlange verstanden werden, und die Nachrichtenwarteschlange kann die Rolle der asynchronen Entkopplung und Strombegrenzung spielen. Warum sagen wir Entkopplung? Da die Verantwortlichkeiten der beiden Rollen für Verbraucher und Produzenten sehr klar sind, sind sie für die Erstellung und den Konsum von Nachrichten verantwortlich, ohne sich darum zu kümmern, wer nachgelagert oder vorgelagert ist, ob es sich um das Änderungsprotokoll der Datenbank oder um ein bestimmtes Ereignis handelt Ich muss mich überhaupt nicht um eine bestimmte Partei kümmern, ich muss nur auf die Protokolle achten, die mich interessieren, und auf jeden Eintrag in den Protokollen.

Anwendung einer effizienten Protokollbibliothek unter Linux

Wir wissen, dass die QPS der Datenbank sicher ist und Anwendungen der oberen Ebene im Allgemeinen horizontal erweitert werden können. Wenn zu diesem Zeitpunkt ein plötzliches Anforderungsszenario wie Double 11 auftritt und die Datenbank überlastet ist, können wir Nachrichtenwarteschlangen einführen um die Vorgänge der Datenbank jedes Teams zu kombinieren. Schreiben Sie in das Protokoll, und eine andere Anwendung ist dafür verantwortlich, diese Protokolldatensätze zu verbrauchen und auf die Datenbank anzuwenden. Selbst wenn die Datenbank hängt, kann die Verarbeitung bei der Wiederherstellung an der Position der letzten Nachricht fortgesetzt werden RocketMQ und Kafka unterstützen die Exactly Once-Semantik. Auch wenn die Geschwindigkeit des Produzenten von der Geschwindigkeit des Verbrauchers abweicht, hat das Protokoll hier keine Auswirkungen. Es kann alle Datensätze im Protokoll speichern und synchronisieren Regelmäßig an den Slave-Knoten gesendet, sodass die Rückstandskapazität erheblich verbessert werden kann, da das Schreiben von Protokollen vom Master-Knoten verarbeitet wird. Eine davon ist Tail-Read, was bedeutet, dass die Verbrauchsgeschwindigkeit mithalten kann Mit der Schreibgeschwindigkeit können Sie direkt zum Cache gehen, und der andere ist der Verbraucher, der hinter der Schreibanforderung zurückbleibt und vom Slave-Knoten gelesen werden kann, und zwar durch die E/A-Isolation und einige damit verbundene Dateirichtlinien B. Pagecache, Cache-Read-Ahead usw., kann die Leistung erheblich verbessert werden.

Anwendung einer effizienten Protokollbibliothek unter Linux

Horizontale Skalierbarkeit ist ein sehr wichtiges Merkmal in einem verteilten System. Probleme, die durch das Hinzufügen von Maschinen gelöst werden können, sind kein Problem. Wie implementiert man also eine Nachrichtenwarteschlange, die eine horizontale Erweiterung erreichen kann? Wenn wir eine eigenständige Nachrichtenwarteschlange haben, werden E/A, CPU, Bandbreite usw. mit zunehmender Anzahl von Themen allmählich zu Engpässen und die Leistung nimmt langsam ab. Wie geht es hier weiter? Wie sieht es mit der Leistungsoptimierung aus?

    topic/log sharding Im Wesentlichen handelt es sich bei den nach Themen geschriebenen Nachrichten um Protokolleinträge. Mit zunehmender Anzahl von Schreibvorgängen wird ein einzelner Computer langsam zu einem Engpass Ordnen Sie jedes Thema einer anderen Maschine zu. Auf diese Weise können Themen mit einer großen Anzahl von Nachrichten durch Hinzufügen von Maschinen gelöst werden, während einige Themen mit einer kleinen Anzahl von Nachrichten derselben Maschine zugewiesen oder nicht verarbeitet werden können
  1. Gruppen-Commit, wie der Producer-Client von Kafka, schreibt diese beim Schreiben von Nachrichten zunächst in eine lokale Speicherwarteschlange, fasst die Nachrichten dann nach jeder Partition und jedem Knoten zusammen und übermittelt sie stapelweise. Dies ist möglich Bei dieser Methode wird auch zuerst der Seitencache geschrieben und dann die Festplatte regelmäßig geleert. Die Methode zum Leeren kann je nach Unternehmen festgelegt werden. Beispielsweise können Finanzdienstleistungen eine synchrone Löschmethode anwenden.
  2. Vermeiden Sie unnötiges Kopieren von Daten
  3. IO-Isolation

  4. Anwendung einer effizienten Protokollbibliothek unter Linux
Protokolle spielen in verteilten Systemen eine sehr wichtige Rolle und sind der Schlüssel zum Verständnis verschiedener Komponenten verteilter Systeme. Mit zunehmendem Verständnis stellen wir fest, dass viele verteilte Middleware auf Protokollen basieren, wie z. B. Zookeeper, HDFS, Kafka, RocketMQ, Google Spanner usw. und sogar Datenbanken wie Redis, MySQL usw. basieren auf der Protokollsynchronisierung. Mithilfe des gemeinsam genutzten Protokollsystems können wir viele Systeme implementieren: Datensynchronisierung und Parallelität zwischen Knoten. Probleme bei der Aktualisierung der Datenreihenfolge (Konsistenzprobleme), Persistenz (das System kann weiterhin Dienste über andere Knoten bereitstellen, wenn das System abstürzt), verteilte Sperrdienste usw. Ich glaube, dass durch Übung und das Lesen einer großen Anzahl von Artikeln tiefere Einblicke gewonnen werden Verständnis.

Das obige ist der detaillierte Inhalt vonAnwendung einer effizienten Protokollbibliothek unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn