Heim >Java >JavaBase >Wie Billionen Daten migriert werden sollen

Wie Billionen Daten migriert werden sollen

coldplay.xixi
coldplay.xixinach vorne
2020-10-23 17:20:412524Durchsuche

In der Spalte

Basic Java Tutorial wird vorgestellt, wie Billionen von Daten migriert werden sollten.

Wie Billionen Daten migriert werden sollen

Hintergrund

In Xingyes „Westward Journey“ gibt es eine sehr berühmte Zeile: „Es gab einmal eine aufrichtige Beziehung vor mir, die ich nicht schätzte. Ich habe es erst bereut, als ich sie verloren habe.“ „Und das Schmerzlichste auf der Welt ist das. Wenn Gott mir noch eine Chance geben kann, werde ich jedem Mädchen drei Worte sagen: Ich liebe dich. Wenn ich dieser Liebe eine zeitliche Grenze hinzufügen muss, hoffe ich, Zehntausend Jahre!“ In den Augen unserer Entwickler ist diese Emotion die gleiche wie die Daten in unserer Datenbank. Wir hoffen, dass sich die Dinge zehntausend Jahre lang nicht ändern . Auch unsere Anforderungen an Daten ändern sich ständig und es gibt wahrscheinlich folgende Situationen:

  • Unterdatenbank und Untertabellen: Die Geschäftsentwicklung wird immer schneller, was zu einem zunehmenden Druck auf Einzelmaschinendatenbanken führt. und die Datenmenge Heutzutage wird zur Lösung dieses Problems normalerweise die Datenbankaufteilungsmethode verwendet, und der Datenbankverkehr wird gleichmäßig auf verschiedene Maschinen verteilt. Im Prozess von einer eigenständigen Datenbank zu einer Unterdatenbank müssen wir unsere Daten vollständig migrieren, damit wir unsere Daten erfolgreich in einer Unterdatenbank verwenden können.
  • Ersetzen Sie das Speichermedium: Im Allgemeinen ist das Speichermedium nach der Migration der oben eingeführten Unterdatenbank immer noch dasselbe. Beispielsweise haben wir vor und nach der Unterdatenbank ein Einzelmaschinen-MySQL verwendet. Es wird auf mehreren Computern zu MySQL, die Felder unserer Datenbanktabellen haben sich nicht geändert und die Migration ist relativ einfach. Manchmal können unsere Unterdatenbanken und Tabellen nicht alle Probleme lösen. Wenn wir viele komplexe Abfragen benötigen, ist die Verwendung von MySQL derzeit möglicherweise keine zuverlässige Lösung. Dann müssen wir das Abfragespeichermedium ersetzen, z. B. durch die Verwendung von Elasticsearch Die Art der Migration ist etwas komplizierter und beinhaltet die Datenkonvertierung von verschiedenen Speichermedien.
  • Umstellung auf ein neues System: Wenn sich ein Unternehmen mit hoher Geschwindigkeit entwickelt, werden aus Gründen der Geschwindigkeit im Allgemeinen viele Projekte wiederholt erstellt. Wenn das Unternehmen einen bestimmten Zeitraum erreicht, werden diese Projekte wiederholt werden oft zusammengeführt und in eine Plattform oder Mittelplattform umgewandelt, wie zum Beispiel einige unserer Mitgliedschaftssysteme, E-Commerce-Systeme usw. Zu diesem Zeitpunkt stehen wir häufig vor dem Problem, dass die Daten im alten System auf das neue System migriert werden müssen. Möglicherweise hat sich nicht nur das Speichermedium geändert, sondern auch die Projektsprache Von der oberen Ebene aus unterschiedlich sein. Aus einer anderen Perspektive können die Abteilungen unterschiedlich sein, daher ist diese Art der Datenmigration schwieriger und das Risiko größer.

In der tatsächlichen Geschäftsentwicklung werden wir je nach Situation unterschiedliche Migrationspläne erstellen. Als nächstes besprechen wir, wie Daten migriert werden.

Datenmigration

Tatsächlich erfolgt die Datenmigration nicht über Nacht, es kann eine Woche oder mehrere Monate dauern. Im Allgemeinen ähnelt unser Datenmigrationsprozess im Wesentlichen dem Bild unten . :Wie Billionen Daten migriert werden sollen' Zuerst müssen wir die vorhandenen Daten in unserer Datenbank stapelweise migrieren und dann die neuen Daten verarbeiten. Wir müssen diese Daten in Echtzeit in unseren neuen Speicher schreiben. Hier müssen wir die Daten kontinuierlich überprüfen während des Prozesses. Wenn wir sicherstellen, dass die grundlegenden Probleme nicht schwerwiegend sind, führen wir den Flow-Cut-Vorgang durch. Nach Abschluss des Flow-Cut-Vorgangs müssen wir keine Datenüberprüfung und inkrementelle Datenmigration mehr durchführen.

Migration bestehender Daten

Lassen Sie uns zunächst darüber sprechen, wie Sie vorhandene Daten migrieren können. Nachdem wir in der Open-Source-Community nach vorhandenen Datenmigrationen gesucht haben, haben wir festgestellt, dass es derzeit keine einfach zu verwendenden Tools für Alibaba Cloud gibt Bietet die Migration bestehender Daten. DTS unterstützt die Migration zwischen verschiedenen homogenen und heterogenen Datenquellen und unterstützt grundsätzlich branchenübliche Datenbanken wie MySQL, Orcale, SQL Server usw. DTS eignet sich besser für die ersten beiden zuvor erwähnten Szenarien. Wenn Sie DRDS von Alibaba Cloud verwenden, können Sie die Daten direkt über DTS migrieren. Unabhängig davon, ob Redis, ES und DTS alle die direkte Migration unterstützen.

Wie migriert man also DTS-Bestände? Tatsächlich ist es relativ einfach und besteht wahrscheinlich aus den folgenden Schritten:

  1. Wenn die Bestandsmigrationsaufgabe gestartet wird, erhalten wir die größte und die kleinste ID, die derzeit migriert werden müssen.
  2. Legen Sie ein Segment fest, z. B. 10.000. Beginnend mit der kleinsten ID werden jedes Mal 10.000 Daten an den DTS-Server abgefragt und zur Verarbeitung an DTS übergeben. Die SQL lautet wie folgt:
select * from table_name where id > curId and id < curId + 10000;复制代码

3 Wenn die ID größer oder gleich maxId ist, endet die bestehende Datenmigrationsaufgabe

Natürlich verwenden wir Alibaba Cloud möglicherweise nicht während des eigentlichen Migrationsprozesses, oder in unserem dritten Szenario müssen wir viele Konvertierungen zwischen Datenbankfeldern durchführen und DTS unterstützt dies nicht. Dann können wir DTS nachahmen Migrieren Sie Daten durch stapelweises Lesen von Daten in Segmenten. Hierbei ist zu beachten, dass wir bei der stapelweisen Migration von Daten die Größe und Häufigkeit der Segmente kontrollieren müssen, um zu verhindern, dass sie den normalen Betrieb unseres Online-Betriebs beeinträchtigen.

Inkrementelle Datenmigration

Die Migrationslösungen für vorhandene Daten sind relativ begrenzt, aber inkrementelle Datenmigrationsmethoden sind in voller Blüte:

  • DTS: Alibaba Clouds DTS gilt als Komplettlösung Der Dienst bietet sowohl die Migration vorhandener als auch inkrementeller Daten an, muss jedoch nur entsprechend dem Volumen berechnet werden.
  • Dienstdoppeltes Schreiben: Es eignet sich besser für Migrationen, bei denen das System nicht gewechselt wurde, d Diese Methode ist relativ einfach und kann direkt im Code synchronisiert werden, da es sich jedoch nicht um dieselbe Datenbank handelt, was bei der Datenmigration zu Datenverlusten führen kann wird durch eine anschließende Datenüberprüfung gelöst.
  • Asynchrones MQ-Schreiben: Dies kann auf alle Szenarien angewendet werden. Wenn Daten geändert werden, wird eine MQ-Nachricht gesendet und der Verbraucher aktualisiert die Daten, nachdem er die Nachricht erhalten hat. Dies ähnelt in gewisser Weise dem obigen Doppelschreibvorgang, ändert jedoch den Datenbankbetrieb auf asynchrone MQ-Operationen und die Wahrscheinlichkeit von Problemen wird viel geringer sein
  • Binlog überwachen: Wir können den zuvor erwähnten Kanal oder andere Open Source-Quellen wie Databus verwenden Gehen Sie zu Die Binlog-Überwachungsmethode ist dieselbe wie die oben beschriebene Nachrichten-MQ-Methode, außer dass der Schritt des Sendens von Nachrichten weggelassen wurde. Der Entwicklungsaufwand ist bei dieser Methode grundsätzlich minimal.

Welche sollten wir bei so vielen Methoden verwenden? Persönlich empfehle ich die Überwachung des Binlogs, um die Entwicklungskosten zu senken. Da es sich um ein überwachtes Binlog handelt, besteht kein Grund zur Sorge verschiedene geschäftliche Probleme.

Datenüberprüfung

Obwohl es sich bei allen oben genannten Lösungen um ausgereifte Cloud-Dienste (DTS) oder Middleware (Kanal) handelt, ist es wahrscheinlich, dass sie einen gewissen Datenverlust erleiden, und es kommt immer noch zu Datenverlusten relativ selten, aber es ist sehr schwierig, Fehler zu beheben. Es kann sein, dass das DTS oder der Kanal versehentlich wackelt oder beim Empfangen von Daten versehentlich verloren geht. Da wir nicht verhindern können, dass unsere Daten während des Migrationsprozesses verloren gehen, sollten wir sie auf andere Weise korrigieren.

Normalerweise gibt es bei der Datenmigration einen Schritt der Datenüberprüfung, aber verschiedene Teams wählen möglicherweise unterschiedliche Datenüberprüfungsschemata:

  • Als ich vorher bei Meituan war, führten wir eine doppelte Überprüfung durch. Alle unsere Lesevorgänge lesen eine Kopie des neuen, aber der zurückgegebene Teil ist noch alt. Zu diesem Zeitpunkt müssen wir diesen Teil der Daten überprüfen. Wenn ein Problem vorliegt, können wir einen Alarm zur manuellen oder automatischen Reparatur auslösen reparieren. Auf diese Weise können unsere häufig verwendeten Daten schnell repariert werden. Natürlich führen wir von Zeit zu Zeit auch eine vollständige Datenprüfung durch, aber die Zeit für eine solche Prüfung zur Reparatur der Daten ist relativ langwierig.
  • Jetzt, nach Yuanfudao, haben wir die vorherige Methode nicht übernommen, denn obwohl die Überprüfung durch doppeltes Lesen Fehler in den Daten schnell finden kann, verfügen wir nicht über ein so hohes Maß an Echtzeitüberprüfung und doppeltem Lesen dieses Teils der Daten Der Umfang der Codeentwicklung ist immer noch relativ groß, kann jedoch nicht durch vollständige Überprüfungen von Zeit zu Zeit gewährleistet werden, was dazu führt, dass sich unsere Datenüberprüfungszeit sehr verlängert. Wir haben beim Abgleich eine Kompromissmethode übernommen. Wir haben jeden frühen Morgen die aktualisierten Daten von gestern abgerufen und sie dann einzeln mit den Daten in unserer neuen Datenbank verglichen Ist es anders oder fehlt, können wir es sofort reparieren.

Natürlich müssen wir im eigentlichen Entwicklungsprozess auch auf folgende Punkte achten:

  • Wie kann die Richtigkeit einer Datenüberprüfungsaufgabe sichergestellt werden? Die Überprüfungsaufgabe besteht ursprünglich darin, andere Daten zu korrigieren, aber wenn es selbst Probleme gibt, verliert sie die Bedeutung der Überprüfung. Derzeit besteht die einzige Möglichkeit, sich darauf zu verlassen Überprüfungscode. Eine Möglichkeit, die Richtigkeit der Verifizierungsaufgabe sicherzustellen.
  • Bei der Überprüfung der Aufgabe müssen Sie auf das Drucken von Protokollen achten. Manchmal kann es zu Problemen mit allen Daten kommen. Dann druckt die Überprüfungsaufgabe möglicherweise eine große Anzahl von Fehlerprotokollen, was zu Problemen führen kann das System aufhängt oder die Dienste anderer Personen beeinträchtigt. Wenn Sie es hier einfacher machen möchten, können Sie einige nicht manuell verarbeitete Alarme in Warnungen umwandeln. Wenn Sie es komplizierter machen möchten, können Sie ein Tool kapseln, wenn ein bestimmter Fehler in a Für einen bestimmten Zeitraum ist kein erneutes Drucken erforderlich.
  • Achten Sie darauf, die online ausgeführten Dienste der Verifizierungsaufgabe nicht zu beeinträchtigen. Normalerweise schreibt die Verifizierungsaufgabe viele Batch-Abfrageanweisungen, und wenn der Code nicht richtig geschrieben ist, kann dies leicht dazu führen Datenbank zum Hängen.

Stream-Schneiden

Nachdem unsere Datenüberprüfung grundsätzlich keine Fehler aufweist, bedeutet dies, dass unser Migrationsprogramm relativ stabil ist. Können wir dann unsere neuen Daten direkt verwenden? Natürlich ist es nicht möglich, alles auf einmal umzustellen, aber wenn etwas schief geht, wird es alle Benutzer betreffen.

Als nächstes müssen wir Graustufen durchführen, also Stream-Cutting. Die Dimensionen verschiedener Geschäftsflusskürzungen sind unterschiedlich. Für die Kürzung von Datenflüssen in der Mandanten- oder Händlerdimension verwenden wir normalerweise die Modulo-Methode der Mandanten-ID der Fluss. Für diese Verkehrsreduzierung müssen Sie einen Plan zur Verkehrsreduzierung erstellen, in welchem ​​Zeitraum und wie viel Verkehr freigegeben werden soll, und wenn Sie den Verkehr reduzieren, müssen Sie einen Zeitpunkt wählen, zu dem der Verkehr relativ gering ist Um detaillierte Beobachtungen der Protokolle durchzuführen, wird der Prozess der Freigabe des Datenverkehrs zu Beginn mit 1 % kontinuierlich überlagert Verwenden Sie direkt 10 % oder 20 % der Lautstärke, um die Lautstärke schnell zu erhöhen. Denn wenn es ein Problem gibt, wird es oft entdeckt, wenn der Verkehr gering ist. Wenn es bei geringem Verkehr kein Problem gibt, kann das Volumen schnell erhöht werden.

Achten Sie auf die Primärschlüssel-ID

Bei der Datenmigration sollte besonders auf die Primärschlüssel-ID geachtet werden. In der oben genannten Lösung mit doppeltem Schreiben wird auch erwähnt, dass die Primärschlüssel-ID doppelt sein muss - manuell geschrieben und angegeben, um zu verhindern, dass die ID-Generierungsreihenfolge falsch ist.

Wenn wir aufgrund von Sharding-Datenbanken und -Tabellen migrieren, müssen wir berücksichtigen, dass unsere zukünftige Primärschlüssel-ID keine automatisch inkrementierte ID sein kann und wir verteilte IDs verwenden müssen. Die empfohlenere hier ist Meituans Open-Source-Blatt. Der erste Modus ist der Snowflake-Algorithmus mit steigendem Trend, aber alle IDs sind vom Typ Long, was für einige Anwendungen geeignet ist, die Long als ID unterstützen. Es gibt auch einen Nummernsegmentmodus, der basierend auf einer von Ihnen festgelegten Basis-ID von oben weiter ansteigt. Und grundsätzlich nutzen alle die Speichergenerierung, und die Leistung ist auch sehr schnell.

Natürlich gibt es immer noch Situationen, in denen wir das System migrieren müssen. Die Primärschlüssel-ID des vorherigen Systems ist bereits im neuen System vorhanden, sodass unsere ID einige Zuordnungen vornehmen muss. Wenn wir bei der Migration des Systems bereits wissen, welche Systeme in Zukunft migriert werden, können wir die Reservierungsmethode verwenden. Beispielsweise betragen die aktuellen Daten von System A 100 Millionen bis 100 Millionen und die Daten von System B ebenfalls 100 Millionen Wir müssen nun die beiden Systeme A und B zu einem neuen System zusammenführen. Dann können wir den Puffer leicht schätzen, indem wir beispielsweise 100 bis 150 Millionen für System A belassen, sodass A nicht zugeordnet werden muss. und System B beträgt 150 Millionen bis 300 Millionen. Wenn wir dann auf die alte System-ID umstellen, müssen wir 150 Millionen abziehen. Schließlich wird die neue ID unseres neuen Systems von 300 Millionen erhöht. Was aber, wenn im System kein geplantes reserviertes Segment vorhanden ist? Sie können dies auf zwei Arten tun:

  • Sie müssen eine neue Tabelle hinzufügen und einen Zuordnungsdatensatz zwischen der ID des alten Systems und der ID des neuen Systems erstellen. Dieser Arbeitsaufwand ist immer noch relativ groß, da unsere allgemeine Migration Dutzende oder Hunderte von Tabellen umfasst und die Kosten anfallen der Aufnahme ist immer noch sehr hoch.
  • Wenn die ID vom Typ Long ist, können wir die Tatsache ausnutzen, dass long 64 Bit lang ist. Wir können eine Regel formulieren. Die IDs unseres neuen Systems beginnen mit einer relativ großen Zahl, beispielsweise mit einer Zahl größer als Int, und dann Der Teil des kleinen Int kann für die ID-Migration unserem alten System überlassen werden. Beispielsweise verwendet das oben genannte Datenvolumen von 150 Millionen tatsächlich nur 28 Bit, es sind also immer noch 4 Bit vorhanden Diese 4 Ziffern können 16 Systeme für die Migration darstellen. Wenn im Plan mehr Systeme migriert werden sollen, kann der ID-Startpunkt des neuen Systems natürlich größer eingestellt werden. Wie in der folgenden Abbildung gezeigt: Wie Billionen Daten migriert werden sollen

Zusammenfassung

Lassen Sie uns diese Routine abschließend kurz zusammenfassen. Es handelt sich tatsächlich um vier Schritte: Lager, Inkrement, Überprüfung, Flussschnitt und schließlich auf die ID achten. Unabhängig davon, wie groß die Datenmenge ist, wird es bei der Migration nach dieser Routine im Grunde keine großen Probleme geben. Ich hoffe, dieser Artikel kann Ihnen bei Ihrer späteren Datenmigrationsarbeit helfen.

Wenn Sie der Meinung sind, dass dieser Artikel für Sie hilfreich ist, sind Ihre Aufmerksamkeit und Weiterleitung die größte Unterstützung für mich, O(∩_∩)O:

Verwandte kostenlose Lernempfehlungen: Grundlegendes Java-Tutorial

Das obige ist der detaillierte Inhalt vonWie Billionen Daten migriert werden sollen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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