Latência mestre do banco de dados com replicação entre regiões do AWS RDS

Latência mestre do banco de dados com replicação entre regiões do AWS RDS

Tenho meu aplicativo configurado em 3 regiões (UE, AP, EUA) e o MySQL RDS mestre reside em eu-west-1, com réplicas de leitura nas outras regiões.

Isso funciona muito bem para consultas de leitura, com o aplicativo específico da região conectando-se à réplica de leitura local RDS muito rapidamente, mas quando meu aplicativo precisa executar uma consulta de gravação, ele precisa se conectar ao banco de dados mestre em eu-west-1.

Ao gravar no banco de dados mestre dos EUA ou AP, a latência é enorme, geralmente demorando cerca de 2,5s para concluir a inserção.

Estou com muita dificuldade para encontrar alguma informação sobre como superar isso, Aurora aparece muito em fóruns e tutoriais para bancos de dados globais, mas requer replicação do tipo de instância, sendo db.r5 o mínimo, o que logo se torna muito caro ao executar várias instâncias.

Alguém enfrentou esse problema com gravações lentas entre regiões no banco de dados mestre? O peering de VPC ajudaria a acelerar isso?

Responder1

Esta não é uma resposta completa, são mais algumas ideias para tentar e perguntas que não cabem na caixa de comentários. Por favor, tente resistir à tentação de votar negativamente :)

Definitivamente vale a pena tentar o peering de VPC, dessa formao tráfego permanece no backbone da AWSo que deve reduzir um pouco a latência. Não sei o quanto isso vai ajudar. Essas três áreas estão separadas por ping de 200 a 300 ms, então você sempre terá alguns atrasos.

Suspeito que a conversa entre o cliente e o banco de dados seja de várias solicitações para uma inserção - por exemplo, criar conexão, conectar-se a um banco de dados específico, inserir, confirmar, fechar. Se for esse o caso, reduzir a latência ajuda, mas cortar algumas etapas é mais importante. Você está usando o pool de conexões, então as conexões já estão abertas? Suspeito que o peering de VPC e a otimização geral serão uma solução melhor do que qualquer uma das ideias abaixo.

Existe alguma maneira de tornar as atualizações assíncronas? Se você puder colocar gravações em uma fila SQS processada em uma única região, isso provavelmente será feito em um ou dois segundos. Isso pode ser uma otimização nas conexões diretas com o banco de dados, dependendo da velocidade.

Multi-master é outra opção, usando recursos de replicação nativa de banco de dados. Não tenho certeza se você pode fazer isso no RDS, mas talvez valha a pena dar uma olhada se é possível e as vantagens/desvantagens. Se você espera que as pessoas atualizem o mesmo registro ao mesmo tempo, você terá que se proteger contra isso.

Outra opção poderia ser a fragmentação, com dados de usuários específicos em bancos de dados específicos. Isso tornará a lógica do seu aplicativo mais complexa.

informação relacionada