Domine la latencia de la base de datos con la replicación entre regiones de AWS RDS

Domine la latencia de la base de datos con la replicación entre regiones de AWS RDS

Tengo mi aplicación configurada en 3 regiones (UE, AP, EE. UU.) y el MySQL RDS maestro reside en eu-west-1, con réplicas de lectura en las otras regiones.

Esto funciona muy bien para consultas de lectura, ya que la aplicación específica de la región se conecta a su réplica de lectura local RDS muy rápidamente, pero cuando mi aplicación necesita realizar una consulta de escritura, tiene que conectarse a la base de datos maestra en eu-west-1.

Al escribir en la base de datos maestra desde EE. UU. o AP, la latencia es enorme y, por lo general, tarda alrededor de 2,5 segundos en completar la inserción.

He estado luchando mucho para encontrar información sobre cómo superar esto, Aurora aparece mucho en foros y tutoriales para bases de datos globales, pero requiere replicación del tipo de instancia, siendo db.r5 el mínimo, lo que pronto se vuelve muy caro cuando se ejecutan varias instancias.

¿Alguien se ha enfrentado a este problema con escrituras lentas entre regiones en la base de datos maestra? ¿El peering de VPC ayudaría a acelerar esto?

Respuesta1

Esta no es una respuesta completa, sino más bien algunas ideas para probar y preguntas que no caben en un cuadro de comentarios. Intente resistir la tentación de votar negativamente :)

Definitivamente vale la pena intentar el peering de VPC, de esa manerael tráfico permanece en la red troncal de AWSlo que debería reducir un poco la latencia. No sé cuánto ayudará eso. Esas tres áreas tienen un ping de 200 a 300 ms, por lo que siempre habrá algunos retrasos.

Sospecho que la conversación entre el cliente y la base de datos es de múltiples solicitudes para una inserción, por ejemplo, crear una conexión, conectarse a una base de datos específica, insertar, confirmar, cerrar. Si ese es el caso, reducir la latencia ayuda, pero eliminar algunos de los pasos es más importante. ¿Está utilizando la agrupación de conexiones para que las conexiones ya estén abiertas? Sospecho que VPC Peering y optimización general serán una mejor solución que cualquiera de las ideas siguientes.

¿Hay alguna manera de que las actualizaciones sean asincrónicas? Si puede colocar escrituras en una cola SQS procesada en una sola región, probablemente se realizará en uno o dos segundos. Esto podría ser una optimización de las conexiones directas a la base de datos, dependiendo de qué tan rápida sea.

Multi-master es otra opción, que utiliza funciones de replicación nativas de bases de datos. No estoy del todo seguro de si se puede hacer esto en RDS, pero tal vez valga la pena ver si es posible y las ventajas/desventajas. Si espera que las personas actualicen el mismo registro al mismo tiempo, tendrá que protegerse contra eso.

Otra opción podría ser la fragmentación, con datos de usuarios específicos en bases de datos específicas. Sin embargo, eso hará que la lógica de su aplicación sea más compleja.

información relacionada