É possível. O objetivo é processar várias conexões de entrada em paralelo. Múltiplas instâncias de haproxy
podem utilizar núcleos de CPU separados e funcionar (semi-) independentemente. A conexão de entrada será passada para ocioso haproxy
(se disponível) em vez de ser enfileirada para ocupada.
Eu acho haproxy
usa SO_REUSEPORT
. man 7 socket
explica essa opção assim:
SO_REUSEPORT
(since Linux 3.9)Permits multiple
AF_INET
orAF_INET6
sockets to be bound to an identical socket address. This option must be set on each socket (including the first socket) prior to callingbind(2)
on the socket. To prevent port hijacking, all of the processes binding to the same address must have the same effective UID. This option can be employed with both TCP and UDP sockets.For TCP sockets, this option allows
accept(2)
load distribution in a multithreaded server to be improved by using a distinct listener socket for each thread. This provides improved load distribution as compared to traditional techniques such using a singleaccept(2)
-ing thread that distributes connections, or having multiple threads that compete toaccept(2)
from the same socket.
Verifique também SO_ATTACH_REUSEPORT_CBPF
e SO_ATTACH_REUSEPORT_EBPF
.
Editar: eu encontrei este artigo (datado de 3 de maio de 2017); parece apoiar meu palpite:
In the mean time, a new and much better
SO_REUSEPORT
implementation was brought to Linux kernel 3.9, allowing the load to be intelligently spread over multiple sockets. HAProxy could immediately benefit from this new improvement.But it came with a problem [...]
Não se preocupe com o problema. O artigo descreve soluções alternativas e uma solução. Você pode achar interessante se você gosta desse tipo de coisa.