У нас есть веб-приложение на основе 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.
Ответы:
Вы действительно должны использовать кеш-сервер перед вашими веб-серверами. Я рекомендую Varnish-кеш. Мы используем его при работе с самым крупным и загруженным сайтом в Скандинавии. Мы заменили 13 высоконагруженных коробок Squid на 1 коробку Varnish и 1 на запасную.
Я протестировал простое приложение на своем частном веб-сайте, и оно выросло с 9 запросов в секунду до более 2000.
Вы сами решаете, как долго он будет храниться в памяти, вы можете делать до конца времени, а затем просто отправлять запрос очистки http на сервер кеша при изменении данных.
источник
По моему личному опыту, если вы используете балансировщик нагрузки, вы хотите полностью ограничить этот блок функциями балансировки нагрузки. Наличие в вашем устройстве балансировки нагрузки контента, даже из кэша, ухудшает функциональность балансировки нагрузки в ситуациях высокой нагрузки (большее количество соединений остается активным дольше, что снижает общую емкость и пропускную способность).
Я бы посоветовал, чтобы приложение само выполняло поиск и обслуживало кэшированное содержимое, а балансировщик нагрузки выполнял свою работу. Сказав это, nginx не идеален, когда дело доходит до балансировки нагрузки - он предлагает только очень простой алгоритм циклического перебора. Я бы порекомендовал вместо этого haproxy. Если вам нужны сервисы дешифрования SSL, nginx, по моему опыту, хорошо работает, сидя перед haproxy.
источник
Я думаю, вы попадете в тупик, если вам понадобятся такие вещи, как балансировка нагрузки, высокая доступность и т. Д.
Также рассмотрим такую ситуацию: когда пользователь авторизуется, страница выглядит по-другому, с дополнительными функциями, доступными и индивидуализированными для каждого пользователя. URL-адреса одинаковы для удобства ссылок и т. Д. Например, сайт, на котором авторизованному пользователю не нужно вводить свое имя / капчу для комментариев, или сайт отображает ваше имя пользователя сверху, когда вы вошли в систему (например, serverfault). В таких случаях nginx будет непригодным для использования, потому что вы не можете отличить авторизованного пользователя от не авторизованного.
Если вам не нужен SSL, я бы посоветовал вам запустить Varnish. Он был разработан как HTTP Accelerator, а не как веб-сервер или прокси. Если вам нужен SSL, запустите nginx сверху как ускоритель SSL и залейте как обычный ускоритель HTTP, потому что Varnish не может справиться с SSL.
Я думаю, что выбор сервера кэширования зависит от конкретного приложения, и вы не можете делать об этом общие комментарии без глубокого анализа приложения.
источник
мой выбор - haproxy. Очень маленький и очень быстрый обратный прокси, но не кеш прокси! Я использую для своей кеш-системы "Squid Web Proxy"
Эта работа идеально подходит для моей веб-системы
источник