Насколько хорошо nginx и memcached работают вместе?

14

У нас есть веб-приложение на основе Java EE, работающее на кластере серверов приложений Glassfish . Входящий трафик будет в основном представлять собой запросы RESTful для представлений ресурсов нашего приложения на основе XML, но, возможно, 5% трафика может быть для представлений на основе JSON или XHTML / CSS.

Сейчас мы исследуем решения по балансировке нагрузки для распределения входящего трафика между экземплярами Glassfish в кластере. Мы также изучаем, как разгрузить кластер, используя memcached, распределенную хэш-карту в памяти, ключами которой будут имена ресурсов REST (например, "/ user / bob", "/ group / jazzlovers") и чьи значения соответствующие представления XML.

Один из подходов, который звучит многообещающе, - убить обеих птиц одним камнем и использовать легкий, быстрый HTTP-сервер nginx / обратный прокси-сервер. Nginx будет обрабатывать каждый входящий запрос, сначала просматривая его URI в memcached, чтобы увидеть, есть ли там еще не истекшее представление XML. Если нет, nginx отправляет запрос одному из экземпляров Glassfish. Модуль memcached для nginx описан в этой короткой статье .

Каково ваше общее впечатление от использования nginx и memcached, насколько вы счастливы с ними? Какие ресурсы вы нашли наиболее полезными для изучения? Если вы попробовали их, и они не соответствовали вашим целям, почему бы и нет, и что вы использовали вместо этого?

Примечание: вот связанный вопрос . Прежде чем я узнал о ServerFault, я спросил об этом в StackOverflow .

Изменить: Все ответы здесь были весьма полезны, хотя прямого опыта не было. Этот ответ в конечном итоге появился в StackOverflow, и он был довольно оптимистичным в настройке nginx / memcached.

Джим Ферранс
источник
Круто, сделаю. Мы, вероятно, будем экспериментировать с этим в следующем месяце или около того
Джим Ферранс

Ответы:

6

Вы действительно должны использовать кеш-сервер перед вашими веб-серверами. Я рекомендую Varnish-кеш. Мы используем его при работе с самым крупным и загруженным сайтом в Скандинавии. Мы заменили 13 высоконагруженных коробок Squid на 1 коробку Varnish и 1 на запасную.

Я протестировал простое приложение на своем частном веб-сайте, и оно выросло с 9 запросов в секунду до более 2000.

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

Траусти Тор
источник
1
Но кеш nginx явно быстрее, чем Varnish .
VBart
4

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

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

Крис
источник
1

Я думаю, вы попадете в тупик, если вам понадобятся такие вещи, как балансировка нагрузки, высокая доступность и т. Д.

Также рассмотрим такую ​​ситуацию: когда пользователь авторизуется, страница выглядит по-другому, с дополнительными функциями, доступными и индивидуализированными для каждого пользователя. URL-адреса одинаковы для удобства ссылок и т. Д. Например, сайт, на котором авторизованному пользователю не нужно вводить свое имя / капчу для комментариев, или сайт отображает ваше имя пользователя сверху, когда вы вошли в систему (например, serverfault). В таких случаях nginx будет непригодным для использования, потому что вы не можете отличить авторизованного пользователя от не авторизованного.

Если вам не нужен SSL, я бы посоветовал вам запустить Varnish. Он был разработан как HTTP Accelerator, а не как веб-сервер или прокси. Если вам нужен SSL, запустите nginx сверху как ускоритель SSL и залейте как обычный ускоритель HTTP, потому что Varnish не может справиться с SSL.

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

Кристапу
источник
1

мой выбор - haproxy. Очень маленький и очень быстрый обратный прокси, но не кеш прокси! Я использую для своей кеш-системы "Squid Web Proxy"

CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
                                          -> WEB II /lighttpd/
                                          -> WEB III /lighttpd/

Эта работа идеально подходит для моей веб-системы

Йордан
источник