Стратегии для редко обновляемых данных - PullRequest
2 голосов
/ 19 октября 2010

Справочная информация: За 2 минуты до каждого часа сервер останавливает доступ к сайту, возвращая занятый экран, пока обрабатывает данные, полученные за предыдущий час. Это может длиться менее двух минут, и в этом случае он спит до истечения двух минут. Если он длится дольше двух минут, он работает столько, сколько ему нужно, затем возвращается. Блок содержится в отдельной таблице с одним полем и одним значением в этом поле.

В настоящее время пользователь получает информацию о блоке только тогда, когда он пытается выполнить действие (щелкнуть ссылку, отправить форму и т. Д.). Я планировал обновить код, чтобы автоматически отключить лайтбокс и сообщение о блокировке с помощью плагина jQuery BlockUI.

Есть два основных способа достижения цели:

  1. Опрос каждые N секунд (через PeriodicalUpdater или аналогичный)

  2. Длинный опрос (комета)

Вы можете уменьшить нагрузку на сервер на 1, проверив местное время, и когда оно приблизится к фактическому времени, запустите цикл опроса. Это может быть более точным, посылая местное время серверу, возвращающему разностный мод 60. Тем не менее более 100 человек обращаются к серверу, что вызывает дополнительный удар по БД.

Вариант 2 является более привлекательным выбором. Это удаляет повторное попадание на веб-сервер, но не устраняет повторную проверку БД. Однако 2 не является выбором для бегунов Apache 2.0, таких как мы, и хотя мы владеем нашим сервером, никто из нас не является веб-администратором и не хочет его ломать - люди платят реальные деньги за игру, поэтому, если он не сломается, не исправить (следовательно, почему все еще работает PHP4 / MySQL3).

Из-за проблем с вариантом 2 мы вернулись с вариантом 1 - неоптимальным.

Так что мой вопрос действительно двойственный:

  1. Есть ли другие возможности, которые я упустил?

  2. Является ли длинный опрос такой проблемой при таком размере? Я понимаю, что это не масштабируется, но меня больше волнует, на каком уровне он лишает Apache потоков. Также есть ли какие-либо параметры, которые вы можете настроить в Apache, чтобы он немного масштабировался?

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Вы можете просто отправить на страницу сколько времени осталось до того, как сервер начнет обрабатывать данные, полученные за предыдущий час.Допустим, при отправке HTML вы записываете, что через 1 минуту сервер начнет обработку.И создайте JS, который сработает через 1 минуту и ​​покажет лайтбокс.

0 голосов
/ 19 октября 2010

Альтернатива, которую я вижу, - сделать это быстрее, чтобы сократить время простоя с точки зрения пользователей. Для этого я использовал бы распределенную систему для фактической обработки данных за почасовым обновлением, например, Hadoop. Затем используйте тот метод, который наиболее подходит для этого короткого времени простоя, чтобы обновить страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...