Eu criei recentemente uma implantação semelhante na Rackspace e optei por executar várias instâncias de node.js em cada VM (igual ao número de CPUs) e equilibrar a carga entre elas com o NGINX. Eu estava pensando em usar o HAProxy, mas estou mais familiarizado com o NGINX, mas ambos funcionariam igualmente bem. Então usei o Load Balancer fornecido pela Rackspace para balancear a carga entre as máquinas virtuais. Eu escolhi essa abordagem porque eu faço terminação SSL na instância NGINX, bem como a compactação. Outro motivo para essa abordagem é que eu provisiono instâncias com SaltStack e é muito mais fácil controlar nós NGINX com ele do que o LB da Rackspace.
Embora a camada NGINX / HAProxy pareça redundante, ela mantém o sistema modular com funcionalidade claramente dividida. Em teoria, a camada extra deve adicionar um pouco de latência, mas é tão minúsculo que eu não me preocuparia com isso.