Мы пытаемся разработать архитектуру, которая сможет обрабатывать более 64 тысяч веб-узлов.
Сначала мы попробовали Amazon ELB, но его дизайн не допускает неожиданных всплесков трафика или веб-сокетов. (Таймаут режима TCP для веб-сокетов неожиданно)
С HAProxy эти ограничения не применяются, но мы ограничимся ~ 64 КБ веб-сокетов, поддерживаемых между HA и внутренними серверами.
На ум пришло несколько решений:
Есть лучший способ сделать это ?
Если ваш лимит в 64 КБ связан с исходными портами, вы можете сделать что-то вроде следующего (немного взломано, но это мы сейчас делаем в SE для веб-сокетов (у нас есть что-то около 0,5 миллиона одновременных пользователей с HAProxy):
server ny-web01-1 10.0.0.1:8081 check
server ny-web01-2 10.0.0.1:8082 check
server ny-web01-3 10.0.0.1:8083 check
Также несколько экземпляров можно выполнить с помощью keepalived. Просто сделайте что-то вроде циклического DNS по нескольким IP-адресам. Просто убедитесь, что IP-адреса всегда выбираются активными балансировщиками нагрузки, поскольку сам DNS не дает вам балансировки нагрузки (здесь также есть другие варианты, это просто).
Вы можете настроить несколько систем HAproxy, которые используют одни и те же IP-адреса, используя Anycast и BGP или какой-либо другой протокол пограничной маршрутизации. Таким образом, все системы HAproxy активны; если какой-либо из них выйдет из строя, вы прекратите рекламировать маршрут BGP в этой системе, и через ~ 30 секунд он перестанет получать трафик; который будет повторно распространен на другие доступные системы, рекламирующие тот же диапазон.
Например, проверьте этот URL о том, как настроить такой макет