У меня есть ситуация, когда большой пакет серверов (X) по запросу должен запрашивать данные с меньшего набора веб-серверов (Y).
В худшем случае все серверы в X решат получать разные запросы к одному серверу в Y. Это будет X соединений, что может быть очень большим всплеском трафика. В лучшем случае 1 сервер в X соединяется с 1 сервером в Y в тандеме. В жизни так не бывает.
Одна из забавных идей - разместить прокси, похожий на squid, между X и Y. Все X-серверы могут подключаться к этому прокси, но это приведет к нескольким постоянным (http keepalive) соединениям с Y. Если бы немногие сказали, 3 или 4, тогда это будет воронка. Если бы мы могли затем ограничить скорость этих подключений, и трафик решился бы резко возрасти, мы бы никому не повредили, кроме себя.
Мысли?
Посмотри на nginx в конфигурации обратного прокси / кеширования или, если вам удобнее Apache, Apache2 + mod_proxy, mod_proxy_balancer и mod_cache.
Вы думали о балансировке нагрузки? Для этого существует множество технологий. Я предпочитаю LVS но другие решения, применимые к балансировке нагрузки веб-сервера, включают ..
LVS имеет разные планировщики, которые точно определяют, как обрабатываются соединения. Кроме того, он очень легкий, я запускаю его на небольшом стандартном оборудовании, обрабатывая трафик для большого объема веб-сайта.