Могу ли я разместить сервер кэширования перед моим веб-сайтом? - PullRequest
4 голосов
/ 04 октября 2008

У меня есть веб-сайт, использующий apache httpd в качестве сервера и mysql в качестве бэкэнда. Он публикует «мысль на день», которая стала настолько популярной, что сервер падает из-за количества запросов. Поскольку запрашивается одна и та же страница (мысль меняется только один раз в день), возможно ли разместить сервер кэширования перед моим главным сервером, чтобы при выполнении одного и того же запроса разными клиентами сервер кэширования возвращал страницу без необходимости заходить в базу данных?

Ответы [ 8 ]

12 голосов
/ 04 октября 2008

Для медленно меняющихся страниц кэш определенно уменьшит загрузку процессора; но в вашем крайнем случае, когда страница меняется один раз в день, и она совершенно предсказуема, было бы намного проще использовать простой и быстрый статический файловый сервер ( lighthttp , nginx , и т. д.) и cron-задание менять свою «мысль дня» каждую ночь.

Фактически, многие неинтерактивные веб-страницы могут быть сделаны таким образом: периодически перестраивать html-файлы из базы данных или любого другого источника и использовать простые, быстрые статические веб-серверы.

2 голосов
/ 04 октября 2008

Я бы определенно порекомендовал решение Хавьера, которое является самым простым, надежным и простым в обслуживании. Только не забудьте отправить правильный заголовок Expires на 24 часа в будущее и правильно настроить ETag.

2 голосов
/ 04 октября 2008

Да. Вы говорите об обратном прокси-сервере (или «http-ускорителе», который является неточным термином для той же вещи). Это может быть очень эффективным, и очень много сайтов с высокой пропускной способностью используют эту технику.

Ключевым элементом, который нужно понять, являются HTTP-заголовки, связанные с кэшированием. Поэтому я настоятельно рекомендую прочитать HTTP RFC (на самом деле это можно сделать). Если вы неправильно укажете заголовки, это может привести к небольшому эффекту или даже проблемам с безопасностью (если персонализированные страницы кэшируются и представляются не тем людям).

Также: возможно, вам придется разделить вашу страницу на части, чтобы получить лучший эффект кэширования. Пример: если вы настаиваете, чтобы в углу ваших страниц были часы, показывающие текущее время сервера с точностью до секунды, то вся страница становится кешируемой всего на секунду. Итак, 1) отбросить глупые часы, или 2) сгенерировать их клиентским скриптом - или 3) сделать так, чтобы клиентский скрипт извлек эту конкретную часть страницы со специального URL-адреса, который затем выводил только небольшой постоянно изменяющийся HTML-фрагмент, не кэшируемый.

Я однажды использовал Squid в качестве обратного прокси-сервера для большого веб-сайта. В настоящее время, если бы я сделал это снова, я бы попробовал Лак .

2 голосов
/ 04 октября 2008

Абсолютно. Есть много продуктов, которые будут хорошо работать для этого. Сам Apache может быть настроен на работу таким образом, хотя, если вы работаете в Linux или UNIX, Squid - лучший вариант, поскольку он специально предназначен для этой работы.

В Windows MS всегда предлагала продукты для кеширования / прокси, которые будут выполнять эту функцию. В настоящее время это ISA Server 2006. Хотя для этого типа приложений это значительно избыточно.

Кальмар - моя рекомендация.

1 голос
/ 05 октября 2008

Если ваша страница «Мысли о дне» никогда не меняется, кроме одного раза в день, возможно, самая простая вещь - запускать что-то подобное один раз в день

wget http://your_site/your_page.php -O /var/www/your_site_directory/your_page.html

(и измените ссылки на эту страницу с your_page.php на your_page.html)

Тогда вы уменьшите нагрузку на свой сервер apache И свой сервер SQL ...

0 голосов
/ 05 октября 2008

Статический файл имеет только ввод-вывод в качестве служебной информации. Объекты, кэшированные в памяти, великолепны, но у вас все еще есть накладные расходы на управление этими объектами, и при интенсивном использовании это становится сложно. Отсюда легкость и красота статических файлов.

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

0 голосов
/ 05 октября 2008

Я не могу согласиться с предложением Хавьера (создать статическую веб-страницу). Я просто хочу добавить одно замечание, чтобы уточнить его немного:

Храните статический файл как «.html», а не «.php» или как-либо другой язык, используемый для извлечения данных из БД. Использование статических файлов намного быстрее, чем запуск парсера или исполняемого файла. Статические файлы (HTML, GIF, ...) просто передаются в сеть, в то время как скрипты, CGI и все остальные вещи запускаются, анализируются, выполняются и все остальное ... Это потребует гораздо больше ресурсов сервера, чем real статические файлы.

0 голосов
/ 04 октября 2008

Вы также можете попробовать memcached . Это то, что использует моя компания, и я думаю, что LiveJournal использует это тоже. Он кеширует запросы к БД и серьезно мешает доступу к БД.

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