NginX vs HAProxy

Есть два очень близких по своему функционалу программных продукта: NginX и HAProxy. На старте того или иного проекта подчастую бывает затруднительно сделать осознанный выбор. Если вы сталкивались или потенциально можете столкнуться с таковым, ниже перечислены общие рекомендации и критерии, которыми можно руководствоваться. Они были выработаны мной на практике методом набивания шишек.
- Внутри Nginx работает более "вылизанный" и оптимизированный
программный код. NginX является более производительным, нежели
HAProxy, в нем меньше багов и неожиданностей, он умеет без каких-либо дополнительных
оговорок использовать многопоточность.
- HAProxy не умеет работать как Web-сервер в принципе. То есть
например, если помимо функционала непосредственно Reverse Proxy вам
нужно отдавать клиенту какие-то странички, заглушки, статику,
артефакты и т.п., то в любом случае рядом с ним понадобится также
устанавливать какой-либо веб-сервер.
- Логи NginX-а более удобочитаемы, лучше парсятся, гибче
настраиваются, по ним удобнее вести отладку приложения или считать
аналитику.
- У NginX-а более human-friendly конфигурация.
- Прямо внутри NginX-а можно реализовать какую-нибудь несложную
логику на языке lua, и она будет выполняться очень быстро.
- Ряд наиболее "вкусных" фукнций NginX-а является платным. Среди
них "заблаговременный" опрос бэкендов (апстримов), всяческие
манипуляции с печеньками / заголовками и расширенные способы
балансировки нагрузки (например, привязка к конкретному бэкенду на
основании source IP, cookie и т.п.).
- Как следствие предыдущего пункта. Если нужно чтобы N
последовательных запросов от клиента гарантированно приходили бы на
один и тот же бэкенд, придется выбрать HAProxy.
- NginX определяет недоступность бэкенда "по факту", когда
последний не ответил на "боевой" запрос. HAProxy умеет мониторить
бэкенды "заблаговременно", и в принципе не станет посылать боевые
запросы на "дохлые" бэкенды (но смотри также пункты 6 и
1).
- Если речь идет не только про HTTP(s), но и про другие
TCP-протоколы (например какой-нибудь LDAP, SMPP, AMQP),
то без вариантов только HAProxy.
- У HAProxy есть красивая диагностическая web-страничка и годный
API; его удобнее мониторить как глазами, так и Zabbix-ом.
Он сам может сигнализировать в случае возникновения каких-то
проблем на бэкендах, и для этого не нужно парсить логи.
Теперь вы знаете кунг-фу и можете испытывать муки выбора вместе со мной.
Всем правильных решений и качественно написанного программного кода.
|
</> |