Как лучше разработать логику сайта?

Имеется сайт-портал на PHP c memcache и сервером WebSocket так же на PHP, который контролируется supervisord'ом. Сайт работает в реальном времени, как ВКонтакте.

Но вот уже второй день ломаю голову и не могу решиться, где же всё таки разместить логику сайта. Было бы легко и просто сделать весь код в сервере WebSocket и просто отправлять клиенту какие-то данные, чтобы вывести на страницу. Но мне кажется при одновременном нахождении на сайте 50 человек (которые за каждым действием будут обращаться к серверу) сервер уже будет неплохо нагружен и подлагивать (особенно при работе с базой данных), ведь всё выполняется в одном потоке и по порядку (этожпхп). Конечно, можно в этом случае поднять второй, третий и так далее WebSocket серверы и распределить между ними посетителей, но это неудобно.

Либо можно выполнять весь код в отдельных PHP скриптах, а сервер лишь "уведомлять" о том, чтобы он обновил нужным клиентам информацию. В плане нагрузки такой вариант вообще шикарный, но тут другая проблема - чтобы сервер определил кому надо обновить, а кому нет, ему нужно иметь информацию обо ВСЕХ находящихся на сайте пользователях. Можно хранить в memcache, но очень затратно по ресурсам да и по скорости, что тоже неплохо нагрузит сервер.

Может я в чём то не прав или есть варианты получше - я хочу у вас это узнать. Помогите мне в решении этой задачки :)

P.S. Другие языки не предлагать, нет времени и желания переучиваться, ибо потом (в случае успеха) над проектом будет работать другая команда, которая будет вольна выбирать как и на чём писать.
  • Вопрос задан
  • 486 просмотров
Пригласить эксперта
Ответы на вопрос 3
@utyfua
не делайте подгрузку данных слишком часто. если нагрузка достигла определенной точки - отправляйте команду "отдых" на минуту, допустим. Такой мелочи никто с обычных пользователей не заметит
Ответ написан
Комментировать
danil_sport
@danil_sport
Web, android, C++
Разделяй и властвуй
Ответ написан
e-vyushin
@e-vyushin
Frontend engineer
Я прочитал то, что вы написали и сложилось такое впечатление, что вы собираетесь решать админские задачи руками программиста.

В больших компаниях, к примеру, задачами администрирования серверов и задачами программирования занимаются отдельные люди и решают они поставленные задачи разными инструментами. Вы, как мне показалось, собираетесь решить 2 задачи (администрирование и программирование) одним инструментом — языком программирования и архитектурой кода.

По этому у вас и возникло сомнение.
Задачи администрирования серверов и распределение нагрузки — это конечно забота программиста, но не в самой приоритетной степени. В приоритетной степени — это задача администратора серверов.

Я бы предложил вам писать код так, как будет удобно и правильно с точки зрения архитектуры и дальнейшей поддержки, а задачи нагрузки решить разделением системы на кластеры и распределением нагрузки между ними.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы