Мы запускаем более крупное развертывание с несколькими серверами, на которых выполняются приложения Django под apache2 и mod_wsgi.
Мы рассматриваем переход на apache2 + fastcgi и перенос процессов fcgi на отдельный «уровень» сервера приложений.
Мой вопрос: как правильно распределить нагрузку между этими несколькими внутренними серверами? Меня больше всего беспокоит возможность добавлять и удалять серверы на лету.
То, что вы предлагаете, работает; похоже, что вы по сути воссоздаете архитектура, которую использовал eins.de для их установки Ruby On Rails на некоторое время.
Но, тем не менее, это был бы не мой первый выбор. Зачем беспокоиться о балансировке нагрузки и добавлении / удалении серверов через FastCGI, если HTTP и так широко распространен? Как вы думаете, какую выгоду вы получите от использования FastCGI вместо HTTP?
Я бы просто использовал балансировщик нагрузки HTTP / HTTPS в качестве первого сервера, а затем говорил бы HTTP на уровне сервера приложений. И серверы приложений могут использовать Apache2 + mod_wsgi + Django или gunicorn + Django в зависимости от ваших предпочтений.
Доступно множество хороших балансировщиков нагрузки HTTP. Выполните поиск по этому сайту. Некоторые распространенные варианты с открытым исходным кодом - Perlbal, nginx, HAProxy и Apache 2.2 (в произвольном порядке). Существуют также коммерческие устройства, такие как Coyote Point, Loadbalancer.org или такие сервисы, как Amazon ELB для EC2.
Меня больше всего беспокоит возможность добавлять и удалять серверы на лету.
Это хороший момент как для вывода серверов приложений из строя, так и для полной перезагрузки конфигурации балансировщика нагрузки на лету. В первую очередь Perlbal, nginx и HAProxy могут перезагружать свои файлы конфигурации во время работы; но я не проверял это сейчас.