С таким количеством одновременных пользователей (я признаю, что никогда не сталкивался с такой ситуацией), я считаю, что наиболее важным является возможность распределить нагрузку на многие веб-серверы.
Если вы хотите переключение при отказе (которое, вероятно, является обязательным), это означает, что вы должны быть очень осторожны с состоянием: чем больше у вас состояния, тем больше памяти вам нужно, и тем сложнее обрабатывать переключение между серверы: либо вам нужно сохранить состояние сеанса в месте, которое является общим для всех серверов, либо вам необходимо реплицировать состояние между серверами.
Итак, я бы выбрал архитектуру, в которой вам не нужно слишком много состояний на сервере. ИМХО, основанная на действии инфраструктура больше подходит для этого типа архитектуры, чем основанная на компонентах архитектура, если состояние не обрабатывается на стороне клиента с богатыми компонентами JavaScript.