Ответ 1
Не зависеть от множества сокетов ОС, которые позволяют балансировать нагрузку через процессы веб-сервера.
Поведение ядер Linux отличается от версии к версии, и мы видели особенно неуравновешенное поведение с ядром 3.2, которое, как представляется, несколько более сбалансировано в более поздних версиях. например 3.6.
Мы работали в соответствии с предположением, что должен быть способ заставить Linux сделать что-то вроде round-robin с этим, но с этим было много проблем, в том числе:
- Ядро Linux 2.6 показало что-то вроде циклического поведения на голом металле (дисбаланс был примерно от 3 до 1), ядро Linux 3.2 не (дисбаланс 10-к-1), а ядро 3.6.10 выглядело хорошо. Мы не пытались деактивировать фактическое изменение.
- Независимо от используемой версии ядра или сборки, поведение, которое мы наблюдали на примере 32-логического ядра HVM на веб-сервисах Amazon, сильно привязано к одному процессу; могут возникнуть проблемы с приемкой Xen: https://serverfault.com/info/272483/why-is-tcp-accept-performance-so-bad-under-xen
Вы можете подробно ознакомиться с нашими тестами на проблеме github, которую мы использовали, чтобы соответствовать отличной команде Node.js, начиная с здесь: https://github.com/joyent/node/issues/3241#issuecomment-11145233
Этот разговор заканчивается командой Node.js, указывающей на то, что они серьезно рассматривают возможность применения явного round-robin в Cluster и запускают для этого проблему: https://github.com/joyent/node/issues/4435, а команда Trello (что мы) перешла к нашему резервному плану, который должен был использовать локальный процесс HAProxy для прокси-сервера через 16 портов на каждой серверной машине с кластером 2-рабочих процессов экземпляр, запущенный на каждом порту (для быстрого перехода на другой ресурс на уровне принятия в случае сбоя процесса или зависания). Этот план работает красиво, со значительно уменьшенным изменением задержки запроса и более низкой средней задержкой.
Здесь еще многое нужно сказать, и я НЕ принял шаг по рассылке списка рассылки ядра Linux, так как неясно, действительно ли это проблема Xen или Linux, или действительно просто неправильное ожидание множественного поведения принятия с нашей стороны.
Мне бы хотелось увидеть ответ от эксперта по множественному согласию, но мы вернемся к тому, что мы можем построить, используя компоненты, которые мы понимаем лучше. Если кто-нибудь отправит лучший ответ, я был бы рад принять его вместо моего.