Назад | Перейти на главную страницу

Апач и пристань

У меня есть VPS в wiredtree, где я хотел бы запустить приложение scala / lift с jeety на сервере, на котором запущен стек LAMP. Я хочу использовать кометных актеров, поэтому я буду использовать "длинный http-хак", и я не знаю, будет ли это важно.

Итак, какие у меня есть варианты? Как я могу этого добиться? Я читал, что есть способ сделать это с помощью mod_rewrite и mod_proxy, но я понятия не имею!

Все решения кометы полагаются на то, чтобы соединение между веб-сервером оставалось открытым как можно дольше, либо клиент делает POST запрос, а затем задержка отправки данных, или сервер, отправляющий GET ответ, снова задерживая данные.

Оба из них имеют схожие проблемы для источника, а именно использование сокета и памяти для каждого соединения и, возможно, потока, если вы не используете что-то вроде продолжения Jetty.

Если разместить обратный прокси-сервер, такой как Apache, перед Jetty, например apache, каждое открытое соединение между Jetty и клиентом также будет потреблять рабочего. В зависимости от того, какую модель рабочего Apache вы выберете (например, mod_prefork или mod_worker_mpm) будут ограничения на максимальное количество подключений, которое может поддерживать ваш сервер Apache. Это около пары сотен за mod_prefork и обычно ограничивается объемом физической памяти, потребляемой каждым рабочим процессом, до нескольких тысяч с mod_worker_mpm. Если вы смешиваете mod_worker_mpm с php вам следует изучить варианты, с которыми была скомпилирована ваша версия php, поскольку известны несовместимости с php и mod_worker_mpm.

Вам также следует помнить о тайм-аутах как в Apache, так и в Jetty. Соединения в стиле кометы либо имитируют медленное POST request, поэтому вам придется настроить Apache, чтобы он был снисходительным к этому, а также к размеру тела запроса. GET запросы стиля также подвержены тайм-ауту, если с исходного сервера ничего не передается. Вам нужно будет применить эти тайм-ауты на обеих сторонах обратного прокси-соединения, от клиента к Apache и от Apache к Jetty.

Если бы я развертывал подобное решение, я бы либо разместил службу Comet на основе Jetty в другом домене, используя балансировщик нагрузки для прокси-сервера нескольких бэкэндов Jetty для дополнительной емкости и надежности, либо я бы использовал другой обратный прокси, скажем HAProxy, для действуют вместо Apache и направляют запросы к различным серверным модулям (Apache, Jetty) на основе URL-адреса.