Создание табло на сайтах с большим трафиком
Немного странный вопрос, но я надеюсь, что кто-то может указать мне правильное направление. В основном у меня есть два сценария, и я хотел бы знать, какой из них лучше всего подходит для моей ситуации (пользователь проверяет табло на сайте с высоким трафиком).
- Топ-10 обновляется каждый раз, когда пользователь заходит на страницу - увеличение нагрузки на сервер, особенно при большом трафике, пользователь увидит как правильно.
- Топ 10 обновляется с установленным интервалом, например, каждые 10 минут. - генерирует только один набор результатов, вызывающий один всплеск каждые 10 минут, а не один раз каждые x секунд, если пользователь нажимает между обновлениями, он не увидит обновленную оценку.
У каждого есть свои плюсы и минусы, по вашему опыту, какой из них лучше всего использовать, или есть какие-то магические альтернативы?
РЕДАКТИРОВАТЬ - обновление, после того, как я учел все, что я сказал, я решил перестроить эту часть приложения. Вместо того, чтобы иметь дело с отдельными баллами, которые я имею в виду с итоговыми данными, они затем сохраняются в отдельной таблице, которая действует как кешированный источник данных.
Спасибо всем за отличный вклад.
4 ответа
В дополнение к ответу Марселя, я бы предложил обновлять табло только при записи событий (например, новый счет или удаленный счет). Таким образом, вы можете хранить статические ответы для популярных запросов, таких как Top 10 и т. Д. Используйте что-то вроде MemCache, чтобы хранить данные в кэше для запросов, или если вы не можете / не можете установить что-то вроде MemCache на свой сервер, сериализуйте общие запросы и пишите их в плоские файлы, а затем удалить / обновить их при записи событий. Пусть ваш код сначала найдет кэшированный результат (или файл), а затем, если он отсутствует, выполните запрос и создайте данные.
Чтобы добавить к предложению Jordan Running: я бы поместил оценочные карточки в отдельный файл (в формате HTML), который создается каждый раз, когда поступают новые данные, и только потом. Вы можете включить этот файл в страницу PHP, содержащую карту показателей, или даже позволить браузеру посетителя периодически извлекать его, используя XMLHttpRequests (для экономии пропускной способности). Пользователи с отключенным JavaScript или с помощью браузера, который не поддерживает XMLHttpRequests (редко в наши дни, но возможно), просто увидят статическую страницу.
Ничего не нужно в реальном времени, когда дело доходит до Интернета. Я бы пошел с вариантом 2 пользователи не заметят, что там оценка не меняется. Вы можете использовать JS, чтобы обновлять топ-10 каждый раз, когда очищается кеш
Модуль голосования Drupal будет обрабатывать это для вас, давая вам возможность, когда пересчитать. Если вы реализуете это самостоятельно, то кэширование топ-10 где-то является хорошей идеей - вы можете либо обновлять его через регулярные промежутки времени, либо вы можете лишить законной силы кеш в определенных точках. Вам нужно было бы посмотреть, как часто люди голосуют, как часто это приводит к изменению 10 лучших страниц, как часто просматриваются 10 лучших страниц и как влияет на производительность регенерирующая страница.
Если вы не используете Drupal/MySQL, CouchDB будет полезен здесь. Вы можете создать представление, которое рассчитывает 10 лучших данных и будет кэшироваться до тех пор, пока не произойдет что-то, что потребует пересчета. Вы также можете вставить встроенный прокси-сервер http для кэширования результатов в течение заданного количества минут.