Beherrschen Sie die DB-Latenz mit der AWS RDS-Regionenübergreifenden Replikation

Beherrschen Sie die DB-Latenz mit der AWS RDS-Regionenübergreifenden Replikation

Ich habe meine App in 3 Regionen (EU, AP, US) eingerichtet und das Master-MySQL-RDS befindet sich in eu-west-1, mit Lese-Replikaten in den anderen Regionen.

Dies funktioniert hervorragend für Leseabfragen, wobei die regionsspezifische App sehr schnell eine Verbindung zu ihrem lokalen Lese-Replikat RDS herstellt. Wenn meine App jedoch eine Schreibabfrage ausführen muss, muss sie eine Verbindung zur Master-Datenbank in eu-west-1 herstellen.

Beim Schreiben in die Master-Datenbank von US oder AP aus ist die Latenz enorm. Normalerweise dauert es etwa 2,5 Sekunden, bis der Einfügevorgang abgeschlossen ist.

Ich habe wirklich versucht, Informationen zur Lösung dieses Problems zu finden. Aurora wird in Foren und Tutorials zu globalen Datenbanken häufig erwähnt, erfordert jedoch eine Replikation des Instanztyps (wobei db.r5 das Minimum ist), was beim Ausführen mehrerer Instanzen schnell sehr kostspielig wird.

Hat jemand dieses Problem mit langsamen regionsübergreifenden Schreibvorgängen in die Master-Datenbank erlebt? Würde VPC-Peering helfen, dies zu beschleunigen?

Antwort1

Dies ist keine vollständige Antwort, sondern eher ein paar Gedanken und Fragen, die nicht in ein Kommentarfeld passen. Bitte versuchen Sie, dem Drang zu widerstehen, negativ zu bewerten :)

VPC Peering ist auf jeden Fall einen Versuch wert,Der Datenverkehr bleibt auf dem AWS-Backbonedas sollte die Latenz etwas reduzieren. Ich weiß nicht, wie viel das helfen wird. Diese drei Bereiche liegen 200 - 300 ms Ping auseinander, also wird es immer einige Verzögerungen geben.

Ich vermute, dass die Konversation zwischen Client und DB aus mehreren Anfragen für eine Einfügung besteht – z. B. Verbindung erstellen, mit bestimmter DB verbinden, einfügen, festschreiben, schließen. Wenn das der Fall ist, hilft es, die Latenz zu reduzieren, aber wichtiger ist es, einige der Schritte wegzulassen. Verwenden Sie Verbindungspooling, sodass die Verbindungen bereits geöffnet sind? Ich vermute, dass VPC-Peering und allgemeine Optimierung eine bessere Lösung darstellen als jede der folgenden Ideen.

Gibt es eine Möglichkeit, die Aktualisierungen asynchron durchzuführen? Wenn Sie Schreibvorgänge in eine SQS-Warteschlange stellen können, die in einer einzelnen Region verarbeitet wird, ist dies wahrscheinlich innerhalb von ein oder zwei Sekunden erledigt. Dies kann eine Optimierung gegenüber direkten Datenbankverbindungen sein, je nachdem, wie schnell diese sind.

Multi-Master ist eine weitere Option, bei der native Replikationsfunktionen der Datenbank verwendet werden. Ich bin nicht ganz sicher, ob Sie dies in RDS tun können, aber es ist vielleicht einen Blick wert, ob es möglich ist und welche Vor- und Nachteile es hat. Wenn Sie erwarten, dass Personen denselben Datensatz gleichzeitig aktualisieren, müssen Sie sich dagegen schützen.

Eine weitere Möglichkeit wäre Sharding, bei dem die Daten bestimmter Benutzer in bestimmten Datenbanken gespeichert werden. Dies würde Ihre Anwendungslogik allerdings komplexer machen.

verwandte Informationen