Имеется сайт-портал на PHP c memcache и сервером WebSocket так же на PHP, который контролируется supervisord'ом. Сайт работает в реальном времени, как ВКонтакте.
Но вот уже второй день ломаю голову и не могу решиться, где же всё таки разместить логику сайта. Было бы легко и просто сделать весь код в сервере WebSocket и просто отправлять клиенту какие-то данные, чтобы вывести на страницу. Но мне кажется при одновременном нахождении на сайте 50 человек (которые за каждым действием будут обращаться к серверу) сервер уже будет неплохо нагружен и подлагивать (особенно при работе с базой данных), ведь всё выполняется в одном потоке и по порядку (этожпхп). Конечно, можно в этом случае поднять второй, третий и так далее WebSocket серверы и распределить между ними посетителей, но это неудобно.
Либо можно выполнять весь код в отдельных PHP скриптах, а сервер лишь "уведомлять" о том, чтобы он обновил нужным клиентам информацию. В плане нагрузки такой вариант вообще шикарный, но тут другая проблема - чтобы сервер определил кому надо обновить, а кому нет, ему нужно иметь информацию обо ВСЕХ находящихся на сайте пользователях. Можно хранить в memcache, но очень затратно по ресурсам да и по скорости, что тоже неплохо нагрузит сервер.
Может я в чём то не прав или есть варианты получше - я хочу у вас это узнать. Помогите мне в решении этой задачки :)
P.S. Другие языки не предлагать, нет времени и желания переучиваться, ибо потом (в случае успеха) над проектом будет работать другая команда, которая будет вольна выбирать как и на чём писать.
не делайте подгрузку данных слишком часто. если нагрузка достигла определенной точки - отправляйте команду "отдых" на минуту, допустим. Такой мелочи никто с обычных пользователей не заметит
Я прочитал то, что вы написали и сложилось такое впечатление, что вы собираетесь решать админские задачи руками программиста.
В больших компаниях, к примеру, задачами администрирования серверов и задачами программирования занимаются отдельные люди и решают они поставленные задачи разными инструментами. Вы, как мне показалось, собираетесь решить 2 задачи (администрирование и программирование) одним инструментом — языком программирования и архитектурой кода.
По этому у вас и возникло сомнение.
Задачи администрирования серверов и распределение нагрузки — это конечно забота программиста, но не в самой приоритетной степени. В приоритетной степени — это задача администратора серверов.
Я бы предложил вам писать код так, как будет удобно и правильно с точки зрения архитектуры и дальнейшей поддержки, а задачи нагрузки решить разделением системы на кластеры и распределением нагрузки между ними.
Алексей Максимов: я об этом и пишу. Конечно код надо правильно писать. Это задача программиста.
Моя мысль такая — администрирование серверов и распределение нагрузки не решается языком программирования.