В настоящее время у меня есть два балансировщика нагрузки, на которых запущен HAProxy, которые перенаправляют запросы на бэкенды, каждый из которых запускает кеш Varnish перед nginx. Я думал, что это позволит распределить большую часть пропускной способности между внутренними серверами, но мои балансировщики нагрузки, похоже, используют сотни гигабайт полосы пропускания в месяц, что близко к тому, что используют внутренние серверы. Полагаю, это имеет смысл, потому что весь трафик проходит через балансировщики нагрузки?
Мои балансировщики нагрузки и серверные ВМ расположены в разных частях США. Было бы эффективнее, если бы я просто запускал HAProxy и Varnish на внешних интерфейсах, а на серверных - только nginx? Спасибо!
У вас все наоборот ... поместите Varnish перед балансировщиками нагрузки, чтобы они могли ответить на как можно больше запросов на ранней стадии (если у вас слишком много трафика для обработки одним Varnish, тогда балансируйте нагрузку на те, которые балансировщик нагрузки TCP с низкими накладными расходами, такой как ldirectord), затем пусть Varnish возвращается к экземплярам HAProxy и идет оттуда. Имея лак позади Мне кажется, что HAProxies полностью отстает - вы хотите избавиться от трафика как можно раньше.
На ваш первый вопрос: Да, в обычной конфигурации HAProxy весь трафик проходит через балансировщик нагрузки как когда он поступает на ваши серверы, так и когда он снова уходит с серверов на клиенты. Это более или менее всегда так со всеми балансировщиками нагрузки, поскольку они обычно реализуются как HTTP-прокси или блоки NAT / маршрутизации IP-уровня. Исключение составляют случаи, когда используется «прямой возврат сервера» (DSR), см. это inlab.com объяснение того, что такое DSR.
Мои балансировщики нагрузки и серверные модули расположены в разных частях США.
Эхх, почему? Если вы используете географическую балансировку нагрузки или многоадресную маршрутизацию, я бы не ожидал, что вы зададите эти вопросы. В обычном случае у вас действительно должны быть ваши серверы в одной стойке и в быстрой локальной сети без коллизий и с низкой задержкой. Это упростит жизнь вашему серверному программному обеспечению и даст вам большую производительность ваших серверов, а также более стабильные / надежные характеристики производительности ...
Каноническая установка для используемого вами программного обеспечения будет примерно так:
nginx (для сжатия HTTP) -> Кеш Varnish (для кеширования) -> Балансировщик нагрузки уровня HTTP (HAProxy, или nginx, или встроенный Varnish) -> веб-серверы.
При желании, если ваша нагрузка высока, у вас может быть несколько серверов nginx или varnish в самом начале; но это для сайтов с тысячами запросов в секунду.
На ваш второй вопрос Когда вы спрашиваете «более эффективно», я сомневаюсь, что вы имеете в виду. Более эффективен при меньшем трафике между серверами? Незначительно, поскольку кеш Varnish не позволяет некоторому трафику идти дальше назад. Более эффективно с точки зрения использования ЦП - вы можете просто перетасовать службы к менее загруженным физическим серверам, если сохраняете ту же логическую структуру.