Acabei instalando o twemproxy (proxy do Memcached pelo Twitter), pois ele ejetará automaticamente os hosts que não respondem. Esta API resolveu meus problemas de atraso.
Eu tenho vários servidores de cache que são adicionados a um pool virtual na camada PHP através da API Memcached :: addServers (). Durante o teste de tolerância a falhas, observei que colocar um dos servidores memcached off-line fazia com que os tempos de resposta do aplicativo aumentassem para 3-6 segundos por solicitação, quando normalmente levam de 5 a 2 segundos por solicitação.
Eu implementei essas configurações seguindo os conselhos desta postagem no blog :
$memcached = new Memcached();
$memcached->setOption(Memcached::OPT_CONNECT_TIMEOUT, 10);
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
$memcached->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
$memcached->addServers($servers);
No entanto, essas configurações não parecem resolver o problema de atrasos. A única maneira de resolver o problema é reintroduzir o servidor novamente no pool e, em seguida, o atraso desaparece. Obviamente, esta não é uma solução ideal, pois pode levar 15 minutos para resolver o problema na produção (ou seja, a página 3am temida).
Ao pesquisar esse problema, me deparei com este post , que discute o uso de moxi e Parece interessante, mas antes de eu introduzir mais uma camada em nosso aplicativo, gostaria de saber como os outros resolveram esses problemas de atraso?
Acabei instalando o twemproxy (proxy do Memcached pelo Twitter), pois ele ejetará automaticamente os hosts que não respondem. Esta API resolveu meus problemas de atraso.