Puncte:0

Stăpânește latența DB cu replicarea pe mai multe regiuni AWS RDS

drapel mg

Am aplicația mea configurată în 3 regiuni (UE, AP, SUA) și masterul MySQL RDS rezidă în eu-west-1, cu replici citite în celelalte regiuni.

Acest lucru funcționează excelent pentru interogări de citire, cu aplicația specifică regiunii conectându-se la replica locală de citire RDS foarte rapid, dar când aplicația mea trebuie să efectueze o interogare de scriere, trebuie să se conecteze la DB-ul principal în eu-west-1.

Când scrieți în DB master din SUA sau AP, latența este uriașă, de obicei durează aproximativ 2,5 secunde pentru a finaliza inserarea.

M-am chinuit foarte mult să găsesc orice informații despre cum să depășesc acest lucru, Aurora apare mult în forumuri și tutoriale pentru bazele de date globale, dar necesită replicarea tipului de instanță, db.r5 fiind minim, care devine în curând foarte costisitoare atunci când rulați mai multe instanțe.

S-a confruntat cineva cu această problemă cu scrieri lente între regiuni în DB-ul principal? Peering-ul VPC ar ajuta la accelerarea acestui lucru?

Wilson Hauck avatar
drapel jp
Care este rezultatul SELECT @@binlog_format; ? Care este tipul dvs. de instanță? La fel în toate regiunile? Care este rezultatul SELECT @@version; ?
Puncte:0
drapel gp
Tim

Acesta nu este un răspuns complet, mai mult câteva gânduri de încercat și întrebări care nu se potrivesc într-o casetă de comentarii. Vă rugăm să încercați să rezistați impulsului de a vota negativ :)

Peeringul VPC merită cu siguranță încercat, așa traficul rămâne pe coloana vertebrală AWS care ar trebui să reducă puțin latența. Nu știu cât de mult va ajuta asta. Aceste trei zone sunt la o distanță de 200 - 300 ms ping, așa că veți avea întotdeauna unele întârzieri.

Bănuiesc că conversația dintre client și DB este mai multe solicitări pentru o inserare - de exemplu, creați o conexiune, conectați-vă la un anumit DB, inserați, commit, închideți. Dacă este cazul, reducerea latenței ajută, dar eliminarea unora dintre pași este mai importantă. Utilizați gruparea de conexiuni, astfel încât conexiunile sunt deja deschise? Bănuiesc că peeringul VPC și optimizarea generală aceasta va fi o soluție mai bună decât oricare dintre ideile de mai jos.

Dacă există vreo modalitate de a face actualizările asincrone? Dacă puteți pune scrieri într-o coadă SQS procesată într-o singură regiune, probabil că se va face într-o secundă sau două. Aceasta ar putea fi o optimizare a conexiunilor directe la baza de date, în funcție de cât de rapid este.

Multi-master este o altă opțiune, folosind caracteristici de replicare nativă a bazei de date. Nu sunt pe deplin sigur dacă puteți face acest lucru în RDS, dar poate merită să vă uitați dacă este posibil și avantajele / dezavantajele. Dacă vă așteptați ca oamenii să actualizeze aceeași înregistrare în același timp, va trebui să vă protejați împotriva acestui lucru.

O altă opțiune ar putea fi sharding, cu date specifice utilizatorilor pe baze de date specifice. Totuși, asta va face logica aplicației dvs. mai complexă.

drapel mg
Mulțumesc mult @Tim, câteva sfaturi bune aici pentru ca să fac mai multe cercetări despre....

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.