Назад | Перейти на главную страницу

Memcached Pool - выход из строя приводит к увеличению времени отклика

У меня есть несколько серверов кеширования, которые добавляются в виртуальный пул на уровне PHP через api Memcached :: addServers (). Во время тестирования отказоустойчивости я заметил, что отключение одного из серверов memcached привело к увеличению времени отклика приложения до 3-6 секунд на запрос, тогда как обычно они занимают 0,5-2 секунды на запрос.

Я реализовал эти настройки по совету этого Сообщение блога:

$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);

Однако эти настройки не помогли решить проблему увеличенного запаздывания. Единственный способ решить проблему - повторно ввести сервер в пул, после чего задержка исчезнет. Очевидно, что это не идеальное решение, так как нам может потребоваться 15 минут, чтобы решить проблему в производственной среде (то есть ужасная страница в 3 часа ночи).

Исследуя эту проблему, я наткнулся на Почта, в котором обсуждается использование moxi, и звучит интересно, но прежде чем я перейду к введению еще одного уровня в наше приложение, я хотел бы знать, как другие решают эти проблемы с задержкой?

Я закончил установку twemproxy (Прокси-сервер Memcached от Twitter), так как он автоматически удаляет хосты, которые не отвечают. Этот api решил мои проблемы с задержкой.