Учитывать загрузку ЦП и ОЗУ обычно не нужно, это только для эзотерических задач. Для балансировки в рамках одной машины хватает рандомного раскидывания или приклеивания по IP (IP sticky) хватает библиотеки cluster (или более низкоуровневой child_process) для передачи хендлов сокетов из центрального процесса в дочерние через системный механизм IPC (interprocess communication) для обработки. Например, вот тут как я это делаю:
/lib/impress.js#L636-L646 в Impress Application Server. Если выходить за рамки одной машины, то чисто нодовская балансировка не годится, нужно применять двухуровневую балансировку, хардварное решение типа F5 Load balancer + внутри машины еще и распределение между процессами через IPC. Софтварные балансировщики на ноде в режиме нескольких машин ни чем не лучше чем Reverse proxy, в этом случае nginx даст Вам лучшие результаты, чем нодовские решения, это точно, он может еще и терминировать SSL очень эффективно и дальше уже передавать в ноду просто HTTP, снижая нагрузку на нодовский сервер. Как на nginx, так и на хардварных решениях, вполне можно сделать любой URL-реврайтинг, стики и объединение нескольких сервосов и портов в один, но хардварные на порядок производительнее.