Как я могу решить проблему c10k, если я использую PHP? - PullRequest
8 голосов
/ 27 мая 2011

Я выбираю архитектуру приложения, в котором "Http KeepAlive" и "long polling" будут использоваться для более быстрого ответа.Есть ли что-нибудь для PHP, которое решает проблему, которую Tornado делает для c10k?

Я думал об использовании nginx + PHP-FPM.Но тогда, для 1000 активных соединений, не будет ли 1000 процессов PHP-FPM?

Тогда я думаю, что у нас будет та же проблема, что и у Apache со многими постоянными соединениями.Не так ли?

РЕДАКТИРОВАТЬ: Я понимаю, что nginx будет достаточно, если я просто хочу HTTP KeepAlive.Но что, если я также хочу длительный опрос, как опоры торнадо?Есть ли что-нибудь подобное в PHP?

Ответы [ 3 ]

6 голосов
/ 27 мая 2011

Для активных соединений (например, при загрузке и запуске определенного сценария PHP), да, будет столько же процессов PHP, сколько и активных подключений.Но KeepAlive - это около пассивных соединений, и Nginx очень хорошо справляется с пассивными соединениями KeepAlive с очень низким использованием ресурсов - даже для тысяч из них.обычная конфигурация с mod_php и mpm_prefork требует процесса для каждого соединения, даже если это просто пассивный KeepAlive.Это означает, что большинство серверов Apache на самом деле do должны иметь процесс PHP в памяти, даже если соединение пассивное, но это не так, если вы запускаете PHP как FastCGI.Apache также может обрабатывать множество пассивных соединений, если вы запускаете PHP как FastCGI и выбираете mpm_worker, который создаст более легкий поток для каждого соединения, но он по-прежнему не так хорош, как Nginx.

2 голосов
/ 27 мая 2011

Мой ответ на этот вопрос будет посмотреть на node.js . Вы указываете 100К активных соединений, которые Node.js должен обрабатывать нормально, если у вас правильное оборудование.

Узел не порождает новые процессы при установлении соединения, сокет помещается в систему очередей, но это не типичная система очередей, где обрабатывается 1 соединение, а затем следующее.

Node.js известен тем, что обрабатывает множество подключений, и там HTTP Client Library основана на Keep-Alive стиле передачи, а также очень быстр и мощен.

Я использовал его справедливо, и должен сказать, что он чрезвычайно прост в использовании, он основан на сверхбыстром движке Google V8, который используется для JavaScript в Chrome, а это означает, что он очень быстрый, вы должны действительно взглянуть на это, и вы увидите, что это жизнеспособно для такого рода вещей.

0 голосов
/ 27 мая 2011

Я не понимаю, что ты имеешь в виду.c10k связан с веб-сервером (apache, nginx и т. д.), а не с PHP.

Если вы используете nginx, вам не стоит об этом беспокоиться

...