Twemproxy Lag заставляет перезагрузить

Мы запускаем стек PHP на наших серверах приложений, которые используют twemproxy локально (через сокет) для подключения к нескольким вышестоящим серверам memcached (небольшие экземпляры EC2) для нашего уровня кэширования.

Время от времени я получаю предупреждение от нашего монитора приложений, что время загрузки страницы занимает> 5 секунд. Когда это происходит, немедленное исправление — перезапуск службы twemproxy на каждом сервере приложений, что создает трудности.

Единственное исправление, которое у меня сейчас есть, — это crontab, который запускается каждую минуту и ​​перезапускает службу, но, как вы можете себе представить, ничего не пишется в течение нескольких секунд каждую минуту, что не является желаемым, постоянным решением.

Кто-нибудь сталкивался с этим раньше? Если так, что было исправлением? Я попытался переключиться на AWS Elasticache, но он не имел такую ​​же производительность, как наше текущее решение twemproxy.

Вот мой конфиг twemproxy.

default:
auto_eject_hosts: true
distribution: ketama
hash: fnv1a_64
listen: /var/run/nutcracker/nutcracker.sock 0666
server_failure_limit: 1
server_retry_timeout: 600000 # 600sec, 10m
timeout: 100
servers:

- vcache-1:11211:1
- vcache-2:11211:1

И вот конфигурация соединения для слоя php:

# Note: We are using HA / twemproxy (nutcracker) / memcached proxy
# So this isn't a default memcache(d) port
# Each webapp will host the cache proxy, which allows us to connect via socket
#   which should be faster, as no tcp overhead
# Hash has been manually override from default jenkins to FNV1A_64, which directly aligns with proxy
port: 0
<?php echo Hobis_Api_Cache::TYPE_VOLATILE; ?>:
options:
- <?php echo Memcached::OPT_HASH; ?>: <?php echo Memcached::HASH_FNV1A_64; ?><?php echo PHP_EOL; ?>
- <?php echo Memcached::OPT_SERIALIZER; ?>: <?php echo Memcached::SERIALIZER_IGBINARY; ?><?php echo PHP_EOL; ?>
servers:
- /var/run/nutcracker/nutcracker.sock

Мы используем 0.4.1 twemproxy и 1.4.25 memcached.

Благодарю.

7

Решение

Количество открытых / устаревших сокетов может быть проблемой

3

Другие решения

Я закончил тем, что переключился с сокета unix на порт tcp на localhost, и это, кажется, решило проблему перезапуска. Однако я заметил увеличение времени отклика при переключении из-за накладных расходов, связанных с tcp. Не принимая этот ответ в надежде, что кто-то в будущем опубликует более авторитетный ответ о сокетах …

0

По вопросам рекламы [email protected]