Site de falha de DNS - solicitações CURL

1

Meu PHP continua lançando erros aleatórios relacionados a scripts lentos. nginx / php5-fpm reportam em seus logs de erro que o filho foi finalizado devido ao tempo limite do script.

O log de erros lentos do PHP5-FPM informa que o problema está nas solicitações de curl que eu faço.

Confusa porque uso os tempos limite de conexão em todos os meus pedidos de onda, por exemplo,

CURLOPT_CONNECTTIMEOUT 3 #number of seconds trying to connect
CURLOPT_TIMEOUT 3 #number of seconds to run curl for

Este é um servidor de produção, portanto, os valores são baixos, esperamos uma resposta dentro de 1 segundo.

Então percebi que os URLs que usamos para o CURL devem estar falhando no nível do DNS.

Então eu simulei um DNS ruim ou um DNS não disponível e consegui reproduzir os mesmos erros e mensagens de script lentas no meu log.

Então, como eu lido com isso?

1) CURLOPT_DNS_CACHE_TIMEOUT - mas aumenta o padrão de 2 minutos para 10 minutos?

No entanto, eu vi que em meus erros eu tinha esses scripts lentos por 2 minutos e 3 segundos exatamente ... o que sugere que o padrão CURLOPT_DNS_CACHE_TIMEOUT de 2 minutos é o cache de uma resposta ruim que está acabando com o cache definido para. Os horários parecia conveniente para ignorar, mas eu poderia estar errado. Colocaria em cache um DNS / DNS incorreto?

2) Edite meus servidores de nomes DNS de alguma forma para permitir vários servidores DNS.

No entanto, editei meu arquivo resolv.conf e adicionei o openDNS aos servidores de nomes existentes. Mas eu coloquei um DNS falso primeiro 1.1.1.1 e ainda falhou me dando um erro de gateway ruim no site. Por que não está escolhendo outro servidor para obter uma resposta?

Eu pensei em adicionar vários servidores para classificá-lo, mas ele ainda está lendo o primeiro da lista e falhando. Eu acho que o cache curl pode estar fazendo cache de respostas ruins, mas não tenho certeza. O ideal é manter o cache para reduzir a latência para procurar o IP.

Alguma sugestão sobre como eu poderia resolver um servidor DNS indisponível de travar meu script php / solicitações de curl?

obrigado

    
por B p 06.06.2013 / 17:24

1 resposta

1

Você pode querer considerar tirar o DNS das mãos do curl e executar seu próprio cache local, resolver.

Você pode definir CURLOPT_DNS_USE_GLOBAL_CACHE como false para desativar o cache e usar um cache DNS local para gerenciar suas pesquisas.

Não tenho certeza do throughput que você está processando, mas descobri que lidar com nosso próprio DNS no nível do servidor DNS geralmente é mais rápido do que confiar no cache interno de muitas pilhas de aplicativos.

Veja: link

Além disso, isso pode ser melhor feito no stackoverflow, pois acho que é a sua camada de aplicativo, e não a configuração no nível do servidor que está causando o problema.

    
por 06.06.2013 / 17:40