Мы пытаемся разработать архитектуру, которая сможет обрабатывать более 64 тыс. Веб-сокетов.
Сначала мы попробовали Amazon ELB, но его дизайн не допускает неожиданного всплеска трафика или веб-сокета. (Режим TCP неожиданно отключает веб-сокеты)
С HAProxy эти ограничения не применяются, но мы будем ограничены ~ 64k веб-сокетами, поддерживаемыми между HA и внутренними серверами.
Несколько решений, которые пришли на ум:
- Несколько экземпляров HAProxy, балансировка нагрузки с DNS (у Route53 есть взвешенная опция)
- Два экземпляра HAProxy с Keepalived, несколько внутренних IP-адресов (не уверен, что это выполнимо)
Есть лучший способ сделать это ?
Ответы:
Если ваш предел в 64 КБ связан с портами-источниками, вы можете сделать что-то вроде следующего (немного странно, но это было то, что мы в настоящее время делаем в SE для веб-сокетов (у нас есть что-то вроде .5 миллионов одновременных обычно с HAProxy):
Также несколько экземпляров выполнимо с keepalived. Просто сделайте что-то вроде кругового DNS по нескольким IP-адресам. Просто убедитесь, что IP-адреса всегда выбираются активными балансировщиками нагрузки, так как сам DNS не даст вам балансировки нагрузки (здесь есть и другие варианты, этот простой).
источник
source 0.0.0.0 usesrc client
в конфигурации бэкенда haproxy прозрачность исходного кода tproxy. Таким образом, srcIP: srcPORT будет фактическим IP-адресом / портом клиента (не внутренними IP-адресами машины haproxy) - это тоже удобно для регистрации.Вы можете настроить несколько систем HAproxy, которые используют одни и те же IP-адреса, используя Anycast и BGP или какой-либо другой протокол пограничной маршрутизации. Таким образом, все системы HAproxy активны; если какой-либо из них выйдет из строя, вы прекратите рекламировать маршрут BGP в этой системе, и он через ~ 30 секунд прекратит прием трафика; который будет перераспределен на другие доступные системы, которые рекламируют тот же диапазон.
Например, проверьте этот URL о том, как настроить такой макет
источник