Результаты php-handlersocket усекаются, когда значения слишком велики
Наша установка выглядит следующим образом:
- Основной сервер БД, экземпляр Amazon EC2 m2.xlarge (оперативная память 17 ГБ, ЦП 2x3.25ecu) под управлением Percona 5.5.x
- Серверы приложений, экземпляр Amazon EC2 m1.large (7,5 ГБ оперативной памяти, 2x2ecu ЦП) под управлением PHP 5.4
php-handlersocket
Библиотека PECL находится здесь http://code.google.com/p/php-handlersocket/
По большей части это работает, но как только я загружаю сервер приложений ровным относительным трафиком, результаты начинают давать сбои в запросах, где записи результатов имеют поля со средними и большими значениями. В нашем случае двумя главными виновниками являются строки XML размером ~5 КБ и файлы мультимедиа, хранящиеся в виде двоичных объектов размером 5-500 КБ. Симптом: если я запрашиваю 10 полей, а XML находится в 8-м поле, я получу 7 результатов с данными, а 8-е будет пустым, 9 и 10 не будут включены вообще.
Существует известная проблема для библиотеки php-handlersocket, связанная с этим типом проблемы, однако есть также предложенное исправление, которое я реализовал, и я подумал, что оно помогло, но, похоже, не совсем. Подробности проблемы и ее решение можно найти здесь http://code.google.com/p/php-handlersocket/issues/detail?id=28
Мои настройки HandlerSocket немного отличаются от настроек по умолчанию. Должны ли они быть другими?
loose_handlersocket_port = 9998
loose_handlersocket_port_wr = 9999
loose_handlersocket_threads = 4
loose_handlersocket_threads_wr = 1
open_files_limit = 65535
Я сократил значение по умолчанию read
потоки до 4, так как они рекомендуют CORES * 2, по умолчанию - 16. Я думал, что более медленные ответы будут лучше, чем вообще никаких, но, похоже, это не имеет значения.
php-handlersocket
Проект выглядит мёртвым, что само по себе немного удивительно, последние обновления исходного кода были более года назад, но, похоже, нет другой доступной библиотеки PHP, поэтому я застрял.
Мне интересно, если у кого-то были подобные проблемы, есть ли другие доступные библиотеки, или я должен был бы исследовать пропуск библиотек и создавать свой собственный интерфейс с чем-то вроде CURL.
1 ответ
В итоге, как и в случае со многими проблемами, я стал настороженно относиться к проекту с открытым исходным кодом с ограниченным вниманием и решил написать свой собственный php sockets
решение, которое работает отлично.