Existe alguma maneira de minimizar o impacto da latência entre o aplicativo e o banco de dados ao executar o PostgreSQL e SQLAlchemy ORM? Alterar estratégias de carregamento ou propriedades de pré-carregamento tem sido eficaz - apenas reduzindo geralmente o número de instruções entre aplicativo e banco de dados. Existem outras técnicas que podem ser usadas para minimizar o impacto dessa sobrecarga de conexão?
Nos gráficos Grafana abaixo, simulei uma latência de 10ms entre aplicação e banco de dados usando o tc
módulo de controle de tráfego. No meio do caminho, removi essa latência artificial, resultando em latência de cerca de 300 microssegundos ao cronometrar SELECT 1;
entre o aplicativo e o banco de dados (interface de loopback localhost - banco de dados dentro do mesmo contêiner do aplicativo).
Isso parece indicar sensibilidade à latência nos endpoints medidos do processo/API.
Uma maneira típica de melhorar o desempenho em redes de alta latência é usar funções de banco de dados definidas pelo usuário. Dessa forma, você pode executar muitas instruções com uma única viagem de ida e volta cliente-servidor.
Uma outra forma de melhorar o desempenho em redes de alta latência é usar pipelining: você envia diversas instruções ao servidor e não espera pelo resultado da instrução anterior antes de enviar a próxima.
Há suporte para pipeline no protocolo de rede, e versões recentes do PostgreSQL têm suporte para isso na API C. Você também pode fazer isso enviando diversas instruções em um único comando, separadas por ponto e vírgula.
Não tenho ideia se alguma das opções acima é suportada pela API do seu cliente e pelo ORM que você está usando.