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

Настройки Nginx, HAproxy, Unicorn, Rails и Node

Наши применение в настоящее время это только «обычное» веб-приложение, без каких-либо причуд, таких как потоковая передача HTTP или веб-сокетов. В основном это Рельсы приложение, обслуживаемое несколькими (20 на 2 машинах) Единорог рабочих, по доверенности почтенного nginx сервер, который занимается балансировкой нагрузки.

В течение прошлого года это работало достаточно хорошо, и теперь приложение работает от 400 до 800 запросов в секунду в любой момент в течение дня.

Вскоре мы выпустим 2 новых API, которые обслуживаются одним Узел приложение: a веб-сокет один, а также длинный опрос HTTP один. (такая модная штука, как API потоковой передачи Twitter, где HTTP-соединения никогда не заканчиваются). Оба они используют один и тот же порт на узле, и, поскольку приложение узла не имеет состояния, мы, безусловно, можем развернуть некоторые из них для обработки трафика.

Приложение (узел) теперь развернуто в 5 экземплярах и теперь прослушивает 5 разных «частных» портов на одном хосте. Нам нужно поставить перед ними что-то для балансировки нагрузки, но также что-то, что может работать с сокетами (либо веб-сокетами, либо потоковой передачей HTTP), которые предназначены для работы в течение нескольких дней.

Тогда возникает вопрос: что? Я где-то читал это HAProxy справляется с этим лучше, чем Nginx. Что вы порекомендуете?

Nginx вообще не поддерживает WebSockets, поэтому вам придется использовать другой балансировщик нагрузки. У меня был хороший опыт работы с HAProxy. Просмотрите этот поток StackOverflow для образца конфигурации: https://stackoverflow.com/questions/2419346/can-nginx-be-used-as-a-reverse-proxy-for-a-backend-websocket-server

А еще лучше ничего не ставьте перед ним. Баланс нагрузки DNS + редиректы. Вы воля в любом случае требуется интеллектуальная привязка узлов, и вы можете получить это с помощью перенаправлений. Балансировка нагрузки DNS не очень хороша в краткосрочной перспективе, но может работать в долгосрочной перспективе в качестве хорошей основы для балансировки входящих соединений.

Или, Жюльен, вы могли бы работать с кем-то вроде меня, который решает эту проблему для таких людей, как вы, в качестве услуги. ;)