Heim >Java >javaLernprogramm >Detaillierte Einführung in das Kernprotokoll des verteilten Systems (Bild und Text)

Detaillierte Einführung in das Kernprotokoll des verteilten Systems (Bild und Text)

不言
不言nach vorne
2018-10-09 14:29:102281Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Einführung (Bilder und Texte) zum verteilten Systemkernprotokoll. Ich hoffe, dass er Ihnen als Referenz dienen wird.

Was ist ein Protokoll?

Ein Protokoll ist eine vollständig geordnete Datensatzsequenz, die in chronologischer Reihenfolge angehängt wird. Es handelt sich eigentlich um ein spezielles Dateiformat. Die Datei ist ein Wortabschnitt Array und Protokoll sind hier Datenaufzeichnungen, aber im Vergleich zur Datei ist jeder Datensatz hier in relativer Zeitreihenfolge angeordnet. Man kann sagen, dass das Protokoll das einfachste Speichermodell ist und die Lesung im Allgemeinen von links nach erfolgt B. in einer Nachrichtenwarteschlange, wird die Protokolldatei im Allgemeinen linear geschrieben und der Verbraucher liest sequentiell, beginnend mit dem Offset.

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, was bedeutet, dass wir sie nicht benötigen Um sich auf die Systemuhr zu verlassen, ist diese Funktion für verteilte Systeme sehr wichtig.

Anwendung des Protokolls

Anwendung des Protokolls in der Datenbank

Das Protokoll ist Es gibt keine Möglichkeit zu wissen, wann es erscheinen wird. Möglicherweise ist das Konzept 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 das System wiederhergestellt werden wird basierend auf dem Redo-Log neu erstellt, um die Daten wiederherzustellen (während des Initialisierungsprozesses besteht zu diesem Zeitpunkt keine Client-Verbindung). 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

Bei verteilten Systemdiensten geht es im Wesentlichen um Zustandsänderungen, die hier vorgenommen werden können Als Zustandsmaschinen werden zwei unabhängige Prozesse (unabhängig von der externen Umgebung, wie z. B. Systemuhren, externen Schnittstellen usw.) verstanden, die bei gegebenen konsistenten Eingaben konsistente Ausgaben erzeugen und letztendlich einen konsistenten Zustand aufrechterhalten, und das Protokoll aufgrund seiner inhärenten Sequenzität nicht Abhängig von der Systemuhr kann es zur Lösung des Problems der Änderungsordnung verwendet werden.

Wir nutzen 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.

Das Protokoll ist eine Schlüsseldatenstruktur zur Lösung des Konsistenzproblems. Das Protokoll ist wie eine Abfolge von Operationen, wie beispielsweise die weit verbreiteten Paxos Raft-Protokolle Es handelt sich um ein Konsistenzprotokoll, das auf Protokollen basiert.

Anwendung von Protokollen in Message Queue

Protokolle können problemlos zur Verarbeitung des Datenzuflusses und -abflusses verwendet werden, und jede Datenquelle kann Ihr eigenes Protokoll erstellen Die Datenquellen hier können aus verschiedenen Aspekten stammen, z. B. einem bestimmten Ereignisstrom (Seitenklick, Cache-Aktualisierungserinnerung, Datenbank-Binlog-Änderung), und Abonnenten können die Protokolle basierend auf dem Offset lesen. Wenden Sie für jeden Datensatz Ihre eigenen Änderungen an, basierend auf den Daten und Vorgängen in jedem Datensatz.

Das Protokoll hier kann 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.

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, wird die Datenbank überlastet, dann können wir eine Nachricht einführen Warteschlangen und Hinzufügen jeder Teamdatenbank Die Vorgänge werden in das Protokoll geschrieben, 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. Sowohl RocketMQ als auch Kafka unterstützen die Exactly-Once-Semantik. Auch wenn sich die Geschwindigkeit des Produzenten von der Geschwindigkeit des Konsumenten unterscheidet, hat das Protokoll hier die Funktion eines Puffers Protokollieren und synchronisieren Sie regelmäßig mit dem Slave-Knoten, sodass die Rückstandskapazität von Nachrichten erheblich verbessert werden kann, da das Schreiben von Protokollen vom Master-Knoten verarbeitet wird. Leseanforderungen werden in zwei Typen unterteilt, einer ist Tail-Read, was bedeutet, dass die Verbrauchsgeschwindigkeit höher ist Kann mit der Schreibgeschwindigkeit mithalten, während der andere Typ ein Verbraucher ist, der hinter der Schreibanforderung zurückbleibt, sodass er über die E/A-Isolation gelesen werden kann Mithilfe von Dateirichtlinien, die mit dem Betriebssystem geliefert werden, wie z. B. Pagecache, Cache vor dem Lesen usw., kann die Leistung erheblich verbessert werden.

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 sieht es mit der Leistungsoptimierung aus? Zu diesem Zeitpunkt können wir ein einzelnes Thema in mehrere Unterthemen unterteilen und jedes Thema einer anderen Maschine zuweisen. 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 gelöst werden können Nachrichten können durch Hinzufügen von Maschinen gelöst werden, die derselben Maschine zugewiesen oder nicht partitioniert werden können. Anschließend werden die Nachrichten entsprechend den einzelnen Partitionen und Knoten zusammengefasst und stapelweise übermittelt. Diese Methode kann auch verwendet werden, indem zuerst in den Seitencache geschrieben und dann die Festplatte regelmäßig geleert wird Beispielsweise kann die Art und Weise, wie Finanzdienstleistungen die Festplatte synchronisieren, bestimmt werden.

3. Vermeiden Sie unnötige Datenkopien

4. IO-Isolation

Fazit

Protokolle in verteilten Systemen Eine sehr wichtige Rolle und der Schlüssel zum Verständnis der verschiedenen Komponenten des verteilten Systems. Wenn wir unser Verständnis vertiefen, stellen wir fest, dass viele verteilte Middleware auf Protokollen basieren, wie z. B. Zookeeper, HDFS, Kafka, RocketMQ, Google Spanner Wait. Selbst für Datenbanken wie Redis, MySQL usw. basiert ihr Master-Slave auf der Protokollsynchronisierung. Mithilfe des gemeinsam genutzten Protokollsystems können wir viele Systeme implementieren: Datensynchronisierung zwischen Knoten, Probleme bei der gleichzeitigen Aktualisierung der Datenreihenfolge (konsistente Stabilitätsprobleme). ), Persistenz (das System kann bei einem Absturz weiterhin Dienste über andere Knoten bereitstellen), verteilte Sperrdienste usw. Ich glaube, dass Sie durch Übung und das Lesen vieler Artikel ein tieferes Verständnis erlangen werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das Kernprotokoll des verteilten Systems (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen